【问题标题】:combination of objdump and gdbobjdump 和 gdb 的组合
【发布时间】:2016-06-02 19:28:48
【问题描述】:

这是关于 linux 中的逆向工程:如果我有一个 .c 文件并用 gdb 编译它,一切都很好。但是如何从可执行文件开始获得相同的结果呢? 我尝试objdump -M intel -D file 进行反汇编,但后来我想再次组装它以便用 gdb 打开它(相反,如果我直接用 gdb 打开可执行文件,我不能做诸如放置断点和查看寄存器之类的事情);我尝试了 nasm 和 gcc,但他们发现语法错误。

【问题讨论】:

  • 请注意:NASM 使用 Intel 语法的变体。 GNU 汇编器更喜欢 AT&T 语法。我认为,您的意思是:用 gcc 编译一个 .c 文件,并用 gas(或简称)组装一个文件。
  • 在 GDB 中,您可以使用 break 设置断点并使用 info registers 查看寄存器。那么你能否澄清你的问题。
  • 但是如果我使用gdb和可执行文件(下载的crackme,不是我自己编译和链接的)我不能设置断点并且(这是重点)我不能查看汇编代码(它说“没有加载符号表”)。

标签: c gdb reverse-engineering objdump


【解决方案1】:

如果符号表已被剥离,则无法取回。 无论如何,您可以在 GDB 中的特定代码地址上设置断点:

break *address

如果你有一个十六进制地址,你必须在它前面加上0x 例如:

break *0x400506

要打印当前寄存器值,您可以使用info registersHow to print register values in gdb? 中也有回答

info registers

NASM 和 GNU 汇编器使用不同的语法,这就是为什么你不能轻易地用第一个解散并用后者汇编。 NASM 使用 Intel 语法的变体。 GNU 汇编器更喜欢 AT&T 语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2011-03-27
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多