GDB 问题 - 我如何逐行查看反汇编代码?
Posted
技术标签:
【中文标题】GDB 问题 - 我如何逐行查看反汇编代码?【英文标题】:GDB question - how do I go through disassembled code line by line? 【发布时间】:2010-05-04 01:10:26 【问题描述】:我想逐行查看老师给我的二进制文件,以检查堆栈上的地址和不同寄存器的内容,但我对使用 gdb 不是非常熟悉。虽然我有 C 代码,但我们应该完全从二进制文件中工作。以下是我目前使用的命令:
(gdb) file SomeCode
这给了我这个信息:
Reading symbols from ../overflow/SomeCode ...(no debugging symbols found)...done.
然后我使用:
(gdb) disas main
这给了我所有的程序集。我想设置一个断点并使用“下一个”命令,但我尝试过的命令都不起作用。有谁知道我会使用的语法吗?
【问题讨论】:
【参考方案1】:尝试使用ni
,即nexti
。等价于si
,这是一步指令
【讨论】:
当我在“file SomeCode”命令之后或“disas main”之后尝试 ni、next、step 等时,它说“程序没有运行”。如果我尝试执行“运行 ./SomeCode”,则会显示权限被拒绝。知道我错过了什么吗? @user 首先设置断点,运行,下一个:break main
,run
,stepi
。阅读手册,它解释得很好。我并不是要让你失望,手册确实是学习调试的绝佳来源。另外,您可以使用帮助命令,例如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
【讨论】:
以上是关于GDB 问题 - 我如何逐行查看反汇编代码?的主要内容,如果未能解决你的问题,请参考以下文章