[英]MessageBoxA in Windows AT&T Assembly
我正在嘗試使用gcc內聯直接在程序集中調用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中看到一條您不理解的指令。
我這樣做了:
int main ()
{
asm("xorl %eax, %eax \n"
"xorl %ebx, %ebx \n"
"xorl %ecx, %ecx \n"
"xorl %edx, %edx \n"
"pushl %ecx \n"
"pushl $0x20206c6c \n"
"pushl $0x642e3233 \n"
"pushl $0x72657375 \n"
"movl %esp, %ecx \n"
"movl $0x7c801d7b, %ebx \n"
"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"
);
}
即使很難完全可以對函數的地址進行硬編碼,我更喜歡動態加載(雖然我硬編碼kernel32地址),因此它適用於任何Windows XP(SP1,2,3)
直接撥打地址
聽起來像一個大禁忌。 API調用沒有固定的地址。 這取決於它加載的內存在哪里。 雖然我確信在操作系統啟動時加載了User32.dll,但我不會指望它占用相同的空間。
要調用API例程,必須將其導入,以便操作系統為您提供正確的呼叫地址。
“直接”調用MessageBoxA實際上是不可能的。 是的,您可以添加對0x7e4507ea
的調用,但這並不重要。 您必須在導入地址表中添加一個條目,該條目表示您正在從user32.dll調用MessageBoxA
,並從那里調用。 當Windows加載您的可執行文件時,它會看到您正在調用MessageBoxA
,為您加載user32.dll,並修補MessageBoxA
結束的實際地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.