x86 程序集中的 MessageBox 程序

问题描述

一个简单的 MessageBox 程序:

NULL          EQU 0                             ; Constants
MB_DEFBUTTON1 EQU 0
MB_DEFBUTTON2 EQU 100h
IDNO          EQU 7
MB_YESNO      EQU 4

extern _MessageBoxA@16                          ; Import external symbols
extern _ExitProcess@4                           ; Windows API functions,decorated

global Start                                    ; Export symbols. The entry point

section .data                                   ; Initialized data segment
 MessageBoxText    db "Do you want to exit?",0
 MessageBoxCaption db "MessageBox 32",0

section .text                                   ; Code segment
Start:
 push  MB_YESNO | MB_DEFBUTTON2                 ; 4th parameter. 2 constants ORed together
 push  MessageBoxCaption                        ; 3rd parameter
 push  MessageBoxText                           ; 2nd parameter
 push  NULL                                     ; 1st parameter
 call  _MessageBoxA@16

 cmp   EAX,IDNO                                ; Check the return value for "No"
 je    Start

 push  NULL

 call  _ExitProcess@4

我的问题是:
调用 esp 以将堆栈恢复到以前的状态后,我们不应该向 MessageBoxA reg 添加适当的值吗?如果是这样,则在调用 push MessageBoxCaption 时必须将多少添加esp 寄存器 (4?)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)