【发布时间】:2012-05-01 06:00:50
【问题描述】:
今天我决定使用 IDA Pro 反编译一个用 Visual C++ 编写的简单“Hello world”程序。
根据我以前的知识,我确信我不会在可执行入口点找到对 printf 的立即调用,我是对的。 发现很多代码不是我写的,是编译器在编译过程中添加的。
我想更好地了解在编译过程中添加了哪些代码。 它有什么作用? 有没有什么“技巧”可以快速找到“main”,跳过反汇编生成的所有不必要的代码?
我能找到的最好的是在这篇文章中: http://www.codeproject.com/Articles/4210/C-Reverse-Disassembly, 说使用visual c++编译的可执行文件的执行顺序如下:
CrtlStartUp
主要
CrtlCleanUp
我能得到更详细的答案吗?
【问题讨论】:
-
非常特定于编译器和平台。我怀疑你会得到你想要的确切答案。
-
我推荐 this post 作为任何逆向工程师大师的路线图。
-
我没有逆向工程的经验,但是你不能简单地在 main 开始处设置一个调试器断点来获取相对地址吗?或者,或者,在可执行文件的对象转储中查找 main?
-
C++ 中的逆向工程?微软做了c++虚拟机还是什么?您可以从平台的本机代码进行逆向工程,用于生成代码的工具无关紧要。
标签: c++ compiler-construction reverse-engineering ida