网站默认首页设置,网站logo设计制作,电商推广方法有哪些,网站开发专业基础课程我们知道Windows下的文件都是PE文件#xff0c;同样在OS X和iOS中可执行文件是Mach-o格式的。 所以我们如果要进行逆向分析#xff0c;首先要熟悉Mach-o文件结构。 Mach-o包含三个基本区域#xff1a; 头部#xff08;header structure#xff09;。 加载命令#xff08;… 我们知道Windows下的文件都是PE文件同样在OS X和iOS中可执行文件是Mach-o格式的。 所以我们如果要进行逆向分析首先要熟悉Mach-o文件结构。 Mach-o包含三个基本区域 头部header structure。 加载命令load command。 段segment。可以拥有多个段segment每个段可以拥有零个或多个区域section。每一个段segment都拥有一段虚拟地址映射到进程的地址空间。 链接信息。一个完整的用户级Mach-o文件的末端是链接信息。其中包含了动态加载器用来链接可执行文件或者依赖库所需使用的符号表字符串表等等。 你也可以在这里找到Mach-o的官方资料。 一、我们先使用otool工具来查看Mach-o的头部看看都包含哪些信息。 头部的的结构如下32位 1 2 3 4 5 6 7 8 9    struct mach_header{     uint32_t    magic;     cpu_type_t  cputype;     cpu_subtype_t   cpusubtype;     uint32_t    filetype;     uint32_t    ncmds;     uint32_t    sizeofcmds;     uint32_t    flags; }  1.magic是mach-o文件的魔数0xfeedface代表的是32位0xfeedfacf代表64位 2.cputype和cupsubtype代表的是cpu的类型和其子类型例子中分别是c和9,定义如下 #define CPU_TYPE_ARM((cpu_type_t) 12) #define CPU_SUBTYPE_ARM_V7((cpu_subtype_t) 9 即为armv7 3.接着是filetype2代表可执行的文件 #defineMH_EXECUTE 0×2 4.ncmds 指的是加载命令(load commands)的数量例子中一共23个编号0-22 5.sizeofcmds 表示23个load commands的总字节大小 load commands区域是紧接着header区域的。 6.最后个flags例子中是0×00200085可以按文档分析之。 当然不用工具直接使用UE看也是一样的。按照定义的结构来就行了。 二、头部之后就是加载命令。加载命令的数目以及总的大小在header中已经给出。 1.cmd 是load command的类型,本文中值1就是LC_SEGMENT,LC_SEGMENT的含义是(将文件中的段映射到进程地址空间) 2.cmdsize 代表load command的大小(0×58个字节)。 3.segname 16字节的段名字当前是__PAGEZERO。 4.vmaddr 段的虚拟内存起始地址 5.vmsize 段的虚拟内存大小 6.fileoff 段在文件中的偏移量 7.filesize 段在文件中的大小 8.maxprot 段页面所需要的最高内存保护4r,2w,1x 9.initprot 段页面初始的内存保护 10.nsects 段中包含section的数量 11.flags 其他杂项标志位 三、接下来就是节了 结构如下 1 2 3 4 5 6 7 8 9 10 11 12 13    struct section {      char sectname[16];      char segname[16];      uint32_t addr;      uint32_t size;      uint32_t offset;      uint32_t align;      uint32_t reloff;      uint32_t nreloc;      uint32_t flags;      uint32_t reserved1;      uint32_t reserved2; };  1.sectname 第一个是__text ,就是主程序代码 2.segname 该section所属的 segment名第一个是__TEXT 3.addr 该section在内存的启始位置0xa588。 4.size 该section的大小0x84a 5.offset 该section的文件偏移28116   0x6dd4 6.align 字节大小对齐 4 7. reloff 重定位入口的文件偏移0 8.nreloc 需要重定位的入口数量0 9.flags 包含section的type和attributes S_REGULAR—This section has no particular type. The standard tools create a __TEXT,__text section of this type. 结构中的最后2项保留用。 段的命名规则是两个下划线紧跟着大写字母如__TEXT而section的命名则是两个下划线紧跟着小写字母__text。 下面列出段中可能包含的section __TEXT段: __text, __cstring, __picsymbol_stub, __symbol_stub, __const, __litera14, __litera18; __DATA段 __data, __la_symbol_ptr, __nl_symbol_ptr, __dyld, __const, __mod_init_func, __mod_term_func, __bss, __commom; __IMPORT段 __jump_table, __pointers; 其中__TEXT段中的__text是实际上的代码部分__DATA段的__data是实际的初始数据。 可以通过otool –s查看某segment的某个section。 可以通过otool –t直接查看代码段__TEXT的反汇编代码: 其它的大家参考官方文档就行了。 转载自http://www.blogfshare.com/ioss-mach-o.html