【问题标题】:GDB question - how do I go through disassembled code line by line?GDB 问题 - 我如何逐行查看反汇编代码?
【发布时间】:2010-05-04 01:10:26
【问题描述】:

我想逐行查看老师给我的二进制文件,以检查堆栈上的地址和不同寄存器的内容,但我对使用 gdb 不是非常熟悉。虽然我有 C 代码,但我们应该完全从二进制文件中工作。以下是我目前使用的命令:

(gdb) file SomeCode

这给了我这个信息:

Reading symbols from ../overflow/SomeCode ...(no debugging symbols found)...done.

然后我使用:

(gdb) disas main

这给了我所有的程序集。我想设置一个断点并使用“下一个”命令,但我尝试过的命令都不起作用。有谁知道我会使用的语法吗?

【问题讨论】:

    标签: gdb disassembly next


    【解决方案1】:

    尝试使用ni,即nexti。等价于si,这是一步指令

    【讨论】:

    • 当我在“file SomeCode”命令之后或“disas main”之后尝试 ni、next、step 等时,它说“程序没有运行”。如果我尝试执行“运行 ./SomeCode”,则会显示权限被拒绝。知道我错过了什么吗?
    • @user 首先设置断点,运行,下一个:break mainrunstepi。阅读手册,它解释得很好。我并不是要让你失望,手册确实是学习调试的绝佳来源。另外,您可以使用帮助命令,例如help break
    • @user 如果你还在苦苦挣扎,请发布你的命令,我会指出你犯错的地方。
    • 我从 C 文件重新编译,现在似乎可以工作了。我认为我的老师给我的二进制文件不是用 -g 开关编译的。不过感谢您的帮助
    【解决方案2】:

    nexti 如果你想跳过函数调用。 stepi 如果你想输入一个函数调用。

    以下文档非常有帮助;它列出了您可以在 gdb 上使用的所有重要命令。

    X86-64:http://csapp.cs.cmu.edu/public/docs/gdbnotes-x86-64.pdf

    IA32:http://csapp.cs.cmu.edu/public/docs/gdbnotes-ia32.pdf

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多