Assembly GDB步进不正确
为什么GDB不转到下一条机器指令。在下面的gif中,我将程序计数器设置为指向开始(0x100020),它保存Assembly GDB步进不正确,assembly,x86,gdb,elf,Assembly,X86,Gdb,Elf,为什么GDB不转到下一条机器指令。在下面的gif中,我将程序计数器设置为指向开始(0x100020),它保存cli指令。但是,当我输入(gdb)stepi时,gdb不会转到下一条指令(0x100021)mov$0x104000,%esp,而是跳到(0x100023) 不管我从哪条指令开始,GDB都不会跳到下一条逻辑指令,而是跳到一个看似任意的位置。为什么会这样 WSL尚未提供32位ELF支持 看 原来问题出在WSL上,我的elf文件是32位的 编辑 尽管上述情况属实,但如果您使用QEMU,则
cli
指令。但是,当我输入(gdb)stepi
时,gdb不会转到下一条指令(0x100021)mov$0x104000,%esp
,而是跳到(0x100023)
不管我从哪条指令开始,GDB都不会跳到下一条逻辑指令,而是跳到一个看似任意的位置。为什么会这样
WSL尚未提供32位ELF支持
看
原来问题出在WSL上,我的elf文件是32位的
编辑
尽管上述情况属实,但如果您使用QEMU,则可以在WSL中通过GDB进行32位elf调试。在我的例子中,GDB的行为如上所述,不是因为它是32位的(因为我通过QEMU运行elf文件),而是因为我的汇编程序生成的代码没有生成GDB理解的调试信息。我正在使用,需要
-F dwarf
和-g
标志来生成所述调试信息。尝试命令nexti
@Sergio,同样的任意跳转问题。此外,我需要stepi
来像执行所有指令一样工作。GDB不需要stepi
/nexti
的调试信息。它被错误的调试信息弄糊涂了吗?看起来您使用的是layout reg
或layout asm
(因此您看到的是反汇编窗口,而不是源窗口)。我担心的是,如果cli
停止触发调试中断。