assembly 无法调用NASM程序集中的MessageBoxA(崩溃)

utugiqy6  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(138)

我已经创建了一个小程序在汇编(NASM)为Windows 32位调用WinAPI和打开一个消息框。该程序崩溃的一些原因,我不知道为什么,一定有一些问题的代码,但我找不到它(地址是正确的肯定)。任何想法可能是错误,为什么?

[BITS 32]

section .data

section .text

    global  _start

_start:
    
    ; int MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);

    xor   eax, eax
    push  eax
    push  0x74657374         ; string that says "test"
    mov   ecx, esp           ; pointer

    push  eax
    push  0x74657374         ; string that says "test"
    mov   edx, esp           ; pointer

    push  eax
    push  ecx
    push  edx
    push  eax
    mov   esi, 0x307be275    ; address to MessageBoxA
    call  esi

    xor   eax, eax 
    push  eax
    mov   eax, 0x778a9fe0    ; address to ExitProcess
    jmp   eax
cclgggtu

cclgggtu1#

我发现了错误...
我必须先导入函数。
以下是正确版本:

[BITS 32]

    extern _MessageBoxA@16    <---- This one is neccessary

section .data

section .text

    global  _start

_start:

   etc.

相关问题