Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly GDB步进不正确_Assembly_X86_Gdb_Elf - Fatal编程技术网

Assembly GDB步进不正确

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,则

为什么GDB不转到下一条机器指令。在下面的gif中,我将程序计数器设置为指向开始(0x100020),它保存
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
停止触发调试中断。