以下のコードは、画面にメッセージボックスを表示しているだけです。
アドレスは、次のことを容易にするためにハードコーディングされています。
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構文で実行できることは知っていますが、gccインラインではどうでしょうか.ascii 'Hello'
。.string 'Hello'
WindowsXPSP3でDev-C++を使用していることに注意してください
ありがとう!