反编译实例1:helloworld
来源:互联网 发布:java 支付宝订单查询 编辑:程序博客网 时间:2024/05/17 04:25
第一个helloworld程序:
#include <stdio.h>int main(int argc, char** argv){printf("hello world\n");return 0;}编译接生成可执行程序(armcc helloworld -o helloworld.axf):
默认生成的可执行文件为__image.axf,这里指定了生成的可执行文件名helloworld.axf,需要注意的是这一步同时生成了一个中间文件helloworld.o。
注意:直接运行.axf文件显然是行不通的,这里需要借助ads提供的调试工具AXD,当然在使用之前需要进行简单的配置,设定目标环境optition->Configure Target如图一:
然后File->Load Image选择helloworld.axf,如图二:
点击Go运行,执行结果如图三:
当然,在字符下运行程序也是可以的(armsd -ARMUL -EXEC helloworld.axf),运行结果如图四:
使用IDA打开helloworld.o,如图五:
我们可以非常简单的看到main函数以及printf函数,只不过printf是以_printf的形式出现,不过我们可能首先比较疑惑的一点就是:helloworld字符串在哪里?从调用_printf前的参数传递可以简单分析得出dword_14应该就是helloworld字符串的地址了,我们调整IDA的数据显示,把dword_14处的四字节数据改为单字节数据,显示结果如图六:
接下来,我们开始分析汇编文件(在分析汇编之前最好熟悉一下汇编指令,否则逢指令就查还是挺耽误时间的),通过指令查找分析每一步的作用,注释如图七:
因此我们可以可以进行简单的书写C源代码helloworldnew.c如下:
#include <stdio.h>int main(int argc, char** argv){printf("hello world\n");return 0;}
armcc helloworldnew.c -o helloworldnew.axf生成可执行文件,并用IDA打开对应的helloworldnew.o文件,导出.asm文件,与之前IDA打开的helloworld.o导出的helloworld.asm使用beyond compare进行对比,比较结果如图八:
执行结果如图九:
到这里,整个反编译过程基本就结束了。
当然,你可以尝试一下如下的操作:
1、新的C源代码定义一个字符串并把"hello world\n"赋给该字符串指针,查看编译生成的.o的汇编代码;
2、函数的返回只修改一下,查看汇编代码;
1- 反编译实例1:helloworld
- 反编译实例1补充
- 实例1:OSG的helloWorld
- PX4应用实例1:HelloWorld!
- 反编译实例2补充1
- 实例学习ansible系列(1)Helloworld
- Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】
- Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】
- Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】
- JMX HelloWorld实例
- CICS Helloworld实例
- JBossESB HelloWorld实例解析
- 简单jQuery实例--Helloworld
- readelf实例----helloworld
- hexdump实例--helloworld
- readelf -h 实例 ---helloworld
- readelf -l实例 ---helloworld
- readelf -s实例 ---helloworld
- myeclipse中的classpath
- 关于完美主义和拖沓症
- Swing——用户界面设计
- MySQL: "Warning: MySQL server has gone away"
- 技术规划
- 反编译实例1:helloworld
- C++ 二义性问题
- MISC
- ocs NG +GLPI安装和基本配置
- 深入VBS类与对象
- IMAGE控件出错代替图片的JS
- CArchive的使用
- NSURLRequest详解
- 编译器链接启动代码crtexe.c