码迷,mamicode.com
首页 > 移动开发 > 详细

iOS可执行文件格式初探

时间:2014-12-13 15:02:06      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   for   java   on   文件   

Mach-O (Mach object) file format?

这种格式的中文资料很少,最详细的还是苹果的官方文档,本文不重复解释mach-o文件格式的内容,只叙述在用ida逆向ios应用程序时的经验。

mach-o详细文档参考:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/index.html

?mach-o格式可以包含多个目标平台的可执行代码,比如同时包含arm64与arm7的可执行代码。

?

实验1:我们首先生成一个包含2中平台的app,通过对比对同一个app 加载不同的架构代码进行对比分析。

当用多目标平台生成一个ios应用程序后,将其拖入到ida中,如下图所示:

bubuko.com,布布扣

?

?

?ida识别到两种架构的代码。

先让ida加载arm7平台的代码

?

bubuko.com,布布扣?

?在右面的十六进制窗口可以看到mach-o文件的魔数。在左下角的位置显示魔数在文件偏移4000的位置,可以知道可执行文件从偏移4000的位置开始将文件映射到内存(从0开始)。

然后打开段窗口查看文件映射到内存的布局

 bubuko.com,布布扣

从ida段窗口可以清楚的看到各个可执行文件各个节的加载情况。

然后我们关闭ida,重新选择arm64加载可执行文件。

bubuko.com,布布扣

加载后我们可以知道 arm64架构的代码从文件偏移14000开始的位置映射到内存。

bubuko.com,布布扣

(两种架构的段,可以发现有一些不一样的地方,就是arm64架构多了一个got节。这个节的作用待补充。)

好了,我们现在知道文件偏移4000-14000的位置属于 arm7架构部分,14000-end 属于arm64架构部分,那么0-4000位置存放的是什么内容呢?

用16进制编辑器打开文件:

bubuko.com,布布扣

CAFEBABE?是不是很熟悉?是java的魔数,至于0-4000的内容到底是什么,带着疑问继续学校mach-o文件。

实验2:生成一个单一平台的应用,查看其文件组织形式。

步骤如实验1所示,将生成的app拖到ida。

bubuko.com,布布扣

?

?

?由此我们可以得出一个结论,就是单平台的ios 应用文件 没有实验1中文件的0-4000数据。

iOS可执行文件格式初探

标签:blog   http   io   ar   os   for   java   on   文件   

原文地址:http://www.cnblogs.com/famer/p/4161288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!