(Windows 7 x64)
Я сохранил какое-то значение в памяти и создал функцию для возврата этого адреса. Но когда я пытаюсь получить значение, это дает мне
First-chance exception at 0x000000013fbc1b2b in Testing.exe: 0xC0000005: Access violation reading location 0x000000003fbca000.
Unhandled exception at 0x000000013fbc1b2b in Testing.exe: 0xC0000005: Access violation reading location 0x000000003fbca000.
The program '[2528] Testing.exe: Native' has exited with code -1073741819 (0xc0000005).
C ++:
#include <iostream>
extern "C" unsigned long getMemoryAddress();
extern "C" unsigned long getValue(unsigned long address);
int main() {
unsigned long address = getMemoryAddress();
unsigned long value = getValue(address);
std::cout << "Address: " << address << std::endl;
std::cout << "Value: " << value << std::endl;
return 0;
}
И из Ассамблеи
.data
memory db 15
.code
getMemoryAddress proc
lea rax, memory ; Get address to return
ret
getMemoryAddress endp
getValue proc
mov rax, [rcx] ; Get value from address
ret
getValue endp
end
unsigned long является 32-битным в MSVC, поэтому не может содержать адрес. Используйте uintptr_t, размер которого точно такой же, как у указателя.