有时候,从C或C ++等高级语言中理解反汇编是有用的。阅读有关汇编的书籍显然是理解编译器输出的必要部分,但根据我的经验,从头开始编写汇编代码与阅读和理解编译器生成的操作码完全不同。我在汇编时所知道的书籍并没有很好地涵盖那部分,我相信如果你接触过汇编,那么主要是通过尝试理解编译器输出。
您是否了解有关如何解释编译器输出的深入教程(或书籍)?
我的想法是介绍常见的高级语言习语,以及它们如何被普通编译器(msvc和gcc)翻译成汇编。
答案 0 :(得分:4)
关于SO的许多类似问题:
大多数海报的目标与你相同,即阅读汇编代码而不是写新代码。
答案 1 :(得分:2)
我知道有关读取x86程序集的所有内容,我通过在反汇编视图中单步调试调试器来学习。同时打开操作码参考是有用的,但说实话,你可以在没有大部分时间的情况下生活,因为只要编译器没有进行太多优化,你就知道它从C源实际上做了什么,变量的内容等。
[*]嗯,大多数事情。
答案 2 :(得分:0)
您可以编译一些c,c ++文件并保留汇编器输出(我认为是-s选项),并将生成的输出与源文件进行比较。
这可以帮助您理解生成的汇编代码并识别重复模式(方法/函数调用,返回,循环,初始化等)。不要启用优化,这会转换生成的代码并使其更难理解。