我想直接在汇编中使用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