基本上,根据我的知识,
如果我们使用GDB来调试从C源代码编译的执行代码, 编译器会将源代码Path留在ELF / PE文件中,所以 GDB将使用源代码来促进我们的调试过程。
但GDB如何在上述过程中提供asm代码信息?我举一个在我的电脑上捕获的例子如下:
所以我的问题是:
有人能给我一些帮助吗?谢谢!
答案 0 :(得分:4)
请记住,“编译器”(例如gcc)可以做几件事:
到目前为止,最复杂的部分是编译适当的阶段。
还要记住,汇编或多或少是对象代码中包含的机器指令的直接表示。
所以,回答你的问题:
换句话说,从源代码到汇编有一个1:多的映射,这意味着给定源代码的汇编代码有许多可能的排列,给定不同的编译器,编译器选项等。这意味着很难,如果不是不可能从纯对象代码派生源代码。因此,为了有效地调试c源代码,源代码必须可用于GDB,无论是嵌入还是原始.c形式。
相反,更接近于从汇编代码到目标代码的1:1映射,因为两者都或多或少代表相同的东西 - 创建给定程序所需的内存中指令的布局。因此,反汇编过程比任何潜在的“反编译”过程都要简单得多。