gccインラインを使用して、アセンブリで直接MessageBoxA()を呼び出そうとしています。ただし、これを2つの方法で行う必要があります。1つは、LoadLibrary()とGetProcAddress()を使用した動的アドレス指定の使用です。これに関するチュートリアルを見つけて、それに従ってください。しかし、私はMessageBoxAのアドレスを直接呼び出すことにも興味があります。これは私のWindowsSP3英語では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()syscallを呼び出すのは簡単ですが、Windowsではまだあまり馴染みがありません。
「DDDDDDDD」のメッセージボックスが表示されると思います。誰かがそれについて私を助けてくれませんか?チュートリアルリンクもあり、助けに感謝します!
どうもありがとう