gpt4 book ai didi

c - Windows AT&T 程序集中的 MessageBoxA

转载 作者:太空狗 更新时间:2023-10-29 15:27:51 28 4
gpt4 key购买 nike

我正在尝试使用 gcc inline 在程序集中直接调用 MessageBoxA()。但是我需要通过两种方式来做到这一点:首先是使用动态寻址,使用 LoadLibrary() 和 GetProcAddress() - 我找到了一个关于这个的教程,试图遵循它。但我也有兴趣直接调用 MessageBoxA 的地址,在我的 Windows SP3 英语中是 0x7e4507ea。

我正在尝试执行这段代码:

/*
* 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”的消息框。有人可以帮我吗?感谢任何帮助,还有教程链接!

非常感谢

最佳答案

先用C写,编译后查看汇编列表,看看编译器生成了什么。这是最简单的学习方法。如果您看到不理解的指令,请在英特尔指令集引用 PDF 中查找。

关于c - Windows AT&T 程序集中的 MessageBoxA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3671091/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com