Mach-O文件结构及MachOView使用

一、Mach-O是什么?

Mach-O(mach object file format)macOS上的可执行文件、目标代码、动态库的文件格式。

二、Mach- O文件结构

Mach-O文件结构分为Header、Load commands、Data。

1.Header

描述了二进制文件的一般信息,如:CPU类型、文件类型、加载命令的数量和大小等。可以快速确认一些信息,比如当前文件用于32位还是64位,对应处理器是什么,文件类型是什么。

2.Load commands

加载命令部分描述了需要内核加载器或者动态连接器等进行的操作指令,如加载数据段、加载动态库等(具体字段可参看mach-o/load.h文件)。在内存中load commands是紧跟在header之后的。

3.Data

Data是MachO文件中最大的部分,其中_TEXT段、_DATA段能给到很多信息。Data段分为多个Section,存放了各类代码、数据等。

三、MachOView安装

1.下载MachOView源码:https://github.com/gdbinit/MachOView
2.在Xcode上运行代码,报错的话先修改一下截图中的地方

image.png

3.运行成功后,将MachOView文件在finder中打开,拖入应用程序中


image.png

4.最后在应用程序中打开MachOView,就可以使用MachOView打开文件查看文件结构了。


image.png

5.如果有崩溃,可以修改下面两处代码后再重新运行,重复3、4步骤就可以了。
第一处是DataController.m中字符串为空的情况没有判断,改为下面的代码即可
- (void)writeString:(NSString *)str toFile:(FILE *)pFile
{
    if (str && str.length>0) {
        fwrite(CSTRING(str), [str length] + 1, 1, pFile);
    }
}

第二处是MVDocument.m中的handleThreadStateChanged:方法,有两段需要放到主线程中,改为下面的即可

- (void)handleThreadStateChanged:(NSNotification *)notification
{
    if ([notification object] == dataController)
    {
        NSString * threadState = [[notification userInfo] objectForKey:MVStatusUserInfoKey];
        if ([threadState isEqualToString:MVStatusTaskStarted] == YES)
        {
            if (OSAtomicIncrement32(&threadCount) == 1)
            {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [progressIndicator setUsesThreadedAnimation:YES];
                    [progressIndicator startAnimation:nil];
                    [stopButton setHidden:NO];
                });
            }
        }
        else if ([threadState isEqualToString:MVStatusTaskTerminated] == YES)
        {
            if (OSAtomicDecrement32(&threadCount) == 0)
            {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [progressIndicator stopAnimation:nil];
                    [statusText setStringValue:@""];
                    [stopButton setHidden:YES];
                });
            }
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转载自 http://www.blogfshare.com/ioss-mach-o.html[http://www...
    厨子阅读 586评论 0 1
  • 主要内容: 理解可执行文件 理解Mach-O文件 Mach-O文件结构 Mach Header Load Comm...
    梧雨北辰阅读 1,273评论 0 2
  • 上一篇说到源码经过预处理、编译、汇编之后生成目标文件,这一章介绍一下iOS、Mac OS中目标文件的格式Mach-...
    Tenloy阅读 2,225评论 2 9
  • 本文源码从苹果开源官网获得 什么是Mach-O Mach-O 为 Mach Object文件格式的缩写,是用于 i...
    Rimson阅读 602评论 0 0
  • Mach-o文件结构 Mach-o包含三个基本区域: 头部(header structure)加载命令(load ...
    介和阅读 522评论 0 0

友情链接更多精彩内容