2 lveer lveer 于 2016.02.01 11:09 提问

汇编和反汇编相关的问题

最近学习android原生逆向分析,需要掌握看懂c语言反汇编的知识,请问我需要按照顺序学习那些东西,谢谢!

1个回答

caozhy
caozhy   Ds   Rxr 2016.02.02 07:57

需要学习的是根据反汇编代码模式匹配还原成高级语言的能力。这要你对编译器是如何将高级语言的代码编译和展开成汇编程序的有很深的功底。

看反汇编代码的能力不在于一行一行去读它是什么意思,而是看到某几行代码,马上能想出对应的高级语言代码怎么写——特别是在变量名缺失,并且编译器对上下文优化的情况下。如果你能通过它更进一步看出算法层面的思路,那就更好了。当然也更难。
另一方面,你应该积累足够多的软件开发的经验。有时候,你拿到一个软件,你如果能想到,如果这个软件我来写,有几个算法,或者几种方式,再去看汇编程序,那么就如同做选择题了,一旦你的思路和作者的思路对上,那就一通百通。

这需要很多的经验和很好的智力——如同给你一个拼图,它包含的信息有限,有的人马上能知道它是原图的哪一块,这样的模式匹配、分析和判断的能力。

当然,一开始,如果你真的想学,那么,先把基础打好。调试工具、反编译工具用得很熟,一些反编译工具可以得到很不错的伪高级语言代码。一些网上的教程往往使用了很多术语,写得非常简略,如果你连概念都没有,就算有找到文献都不知道怎么看。
其次,反编译的功底不在于反编译本身,而是在于程序设计,这个需要非常多的基础和经验,不可能速成。你要有思想准备,你是打算深入研究还是仅仅因为某天想起来要破解个程序而头脑一热来学的。后者我并不建议你去学。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!