Попытка получить значение с адреса дает мне нарушение прав доступа?

0

(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
Теги:
visual-studio
masm

1 ответ

1
Лучший ответ

unsigned long 32-бит в MSVC, поэтому не может содержать адрес. Используйте uintptr_t, который гарантированно будет иметь тот же размер, что и указатель.

  • 0
    Спасибо, теперь я не получаю ошибку, и она работает :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню