我想直接在彙編中使用gcc內聯調用MessageBoxA()。不過,我需要通過兩種方式來實現:首先是使用動態尋址,使用LoadLibrary()和GetProcAddress() - 我找到了關於這個的教程,試圖遵循它。但我也有興趣直接調用MessageBoxA的地址,在我的Windows SP3英文中是0x7e4507ea。Windows中的MessageBoxA AT&T彙編
我試圖執行此代碼:
/*
* eax holds return value
* ebx will hold function addresses
* ecx will hold string pointers
* edx will hold NULL
*
*/
int main(int argc, char **argv)
{
asm(" xor %eax, %eax \t\n\
xor %ebx, %ebx \t\n\
xor %ecx, %ecx \t\n\
xor %edx, %edx \t\n\
push $0x0 \t\n\
push $0x44444444 \t\n\
push $0x44444444 \t\n\
pop %ecx \t\n\
mov %dl,0x3(%ecx) \t\n\
mov $0x7e4507ea, %ebx \t\n\
push %edx \t\n\
push %ecx \t\n\
push %ecx \t\n\
push %edx \t\n\
mov $0x8, %ax \t\n\
call *%ebx \t\n\
");
}
我不知道,如果在Windows中甚至可以做到這一點,直接調用地址,沒有在此指定庫(USER32.DLL案件)。我知道在Linux中很容易調用write()系統調用,但在Windows中我還不太熟悉。
我期望看到帶有「DDDDDDDD」的消息框。有人可以幫我嗎?欣賞任何幫助,也有教程鏈接!
非常感謝
嘿,正如你在評論中提到的,你已經做到了。你能否描述我如何與IAT相處?在上例 – 2016-11-03 06:57:34