【发布时间】:2011-04-12 08:12:04
【问题描述】:
下面的代码只是在屏幕上显示一个消息框。
为了方便起见,地址被硬编码:
int main ()
{
asm("xorl %eax, %eax \n"
"xorl %ebx, %ebx \n"
"xorl %ecx, %ecx \n"
"xorl %edx, %edx \n"
"pushl %ecx \n" //$0x0
"pushl $0x20206c6c \n" //" ll"
"pushl $0x642e3233 \n" //"d.23"
"pushl $0x72657375 \n" //"resu"
"movl %esp, %ecx \n" //store "user32.dll" address in %ecx
"movl $0x7c801d7b, %ebx \n" //store address of LoadLibraryA in %ebx
"pushl %ecx \n"
"call *%ebx \n"
"movl $0xef30675e, %ecx \n"
"addl $0x11111111, %ecx \n"
"pushl %ecx \n"
"pushl $0x42656761 \n"
"pushl $0x7373654d \n"
"movl %esp, %ecx \n"
"pushl %ecx \n"
"pushl %eax \n"
"movl $0x7c80ae40, %ebx \n"
"call *%ebx \n"
"movl %esp, %ecx \n"
"xorl %edx, %edx \n"
"pushl %edx \n"
"pushl %ecx \n"
"pushl %ecx \n"
"pushl %edx \n"
"call *%eax \n"
"xorl %eax, %eax \n"
"pushl %eax \n"
"movl $0x7c81cb12, %eax \n"
"call *%eax \n"
);
}
(我没有评论所有代码,因为我的问题不是关于代码)
我的问题是:有没有办法在汇编内联中写入字符串“user32.dll”而无需手动推送到堆栈?我的意思是在 NASM 中是这样的:db 'Hello'
我知道在 AT&T 语法中我可以使用 .ascii 'Hello' 或 .string 'Hello' 但在 gcc inline 中呢?
请注意,我在 Windows XP SP3 上使用 Dev-C++
谢谢!
【问题讨论】:
标签: gcc assembly inline-assembly dev-c++ att