Debugging nexti gdb与_GetStdHandle@4完成节目
这是Windows10上的ASMx86代码,它在内存中放入一个ascii字符,并用WriteFile打印 file.asm: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
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
正常工作