对凌乱的标题感到抱歉!基本上这就是我想知道的。
这听起来可能有点傻,但是,如果您有反汇编的指令,请说:
jz 0x8048e1a
并且您还有源代码,您如何弄清楚该指令与源代码相关的内容?
我应该提到我使用英特尔的 PIN 作为吐出这些反汇编指令的应用程序,所以我知道这些指令属于哪个函数/例程,我只是想更精确一点。
感谢您的任何帮助/提示。
对凌乱的标题感到抱歉!基本上这就是我想知道的。
这听起来可能有点傻,但是,如果您有反汇编的指令,请说:
jz 0x8048e1a
并且您还有源代码,您如何弄清楚该指令与源代码相关的内容?
我应该提到我使用英特尔的 PIN 作为吐出这些反汇编指令的应用程序,所以我知道这些指令属于哪个函数/例程,我只是想更精确一点。
感谢您的任何帮助/提示。
如果您有源代码(以及编译它的方法),则不应使用反编译器。编译器已经在原始源代码和汇编指令之间生成映射;这就是调试信息的。
查看它运行的最简单方法是在调试器中启动程序,设置一个断点,当该断点命中时,切换到反汇编视图。这将向您显示说明,以及导致它们的源代码行。(如果编译器启用了优化,两者之间不会总是有很好的对应关系,但您至少可以看到基本原理。)
您还可以告诉编译器在代码生成阶段后停止,并输出汇编文件而不是目标代码。根据编译器的不同,您也可以使用源代码行注释程序集;这将产生与您在调试器的反汇编视图中看到的类似的信息。
你如何做这一切的细节完全取决于你的 IDE。阅读其文档。
如果您使用 GCC 工具链,您可以使用 objdump 来反汇编和混合源代码:
objdump -S executable > disasm.txt
有关更多选项和信息,请参阅 objdump 手册页。
如果您使用不同的工具链,请参阅该工具链的文档。
jz 0x8048e1a
if, for, do/while或三元表达式 ( ?:)