Некоторое время назад я прочитал статью от парня, который продемонстрировал, как можно напрямую вызывать функцию в user32.dll в сборке (NASM) по ее адресу в памяти.У меня больше нет статьи, но я пытаюсь воспроизвести эксперимент.
Я хочу выполнить функцию MessageBoxA в user32.dll, и на моем компьютере эта функция должна быть расположена по адресу 0x76cd75c0.
Вот функция:
int MessageBoxA(
HWND hWnd, # NULL
LPCSTR IpText, # text
LPCSTR IpCaption, # title
UINT uType # style
);
Вот программа:
global _main
section .data
msgText: db 'Hello World', 0
msgCaption: db 'Title', 0
section .text
_main:
push 0
push msgCaption
push msgText
push 0
call 0x76cd75c0
add esp, 4
ret 0x10
Для компиляции программы я использую:
nasm –f win32 message_box.asm
Тем не менее, я получаю это сообщение об ошибке:
error: Win32 COFF does not correctly support relative references to absolute
addresses
Неважно, если я использую обычный адрес или относительный адрес, я все равно получаю то же сообщение об ошибке.
Кто-нибудь, кто знает, в чем проблема?