Debugging nexti gdb与_GetStdHandle@4完成节目

Debugging nexti gdb与_GetStdHandle@4完成节目,debugging,x86,gdb,nasm,32-bit,Debugging,X86,Gdb,Nasm,32 Bit,这是Windows10上的ASMx86代码,它在内存中放入一个ascii字符,并用WriteFile打印 file.asm: global _main extern _GetStdHandle@4 extern _WriteFile@20 extern _ExitProcess@4 section .text _main: mov al, 8 add al, '0' mov [message], al push -11 call _GetStdH

这是Windows10上的ASMx86代码,它在内存中放入一个ascii字符,并用WriteFile打印

file.asm:

global _main
extern _GetStdHandle@4
extern _WriteFile@20
extern _ExitProcess@4

section .text
_main:  
    mov al, 8
    add al, '0'

    mov [message], al

    push -11
    call _GetStdHandle@4

    push 0
    push 0
    push 1
    push message
    push eax
    call _WriteFile@20

    push 0
    call _ExitProcess@4

section .bss
    message resb 1
命令:

nasm -fwin32 file.asm
gcc file.obj
a.exe
它打印
8
。我想用
gdb
上的每条指令检查寄存器的变化

我做了以下工作:

gdb a.exe
然后,在gdb中:

b main
run
nexti
i r
nexti
i r
nexti
i r
nexti
i r
它工作得很好,但是当位置正好在
调用之前时_GetStdHandle@4
我再次执行
nexti
,它继续执行所有程序并完成。 电话刚打完我就得休息一下。似乎
_GetStdHandle@4
修改了一些寄存器(例如
EAX
),所以我想在不进入的情况下执行
nexti

我用
ret
测试了一个自定义
调用
,这里
nexti
工作正常

  • 为什么当我在
    调用中执行
    nexti
    时程序会结束_GetStdHandle@4
    说明
  • 我如何才能使
    nexti
    正常工作