开发者社区> 问答> 正文

ios中怎么获得模块基址和模块长度?

ios中怎么获得模块基址和模块长度?

想做内存自校验,因为iOS架上app不支持动态链接库,所以就是想计算内存中可执行文件的SHA1~

所以想取得可执行文件的基址和长度~

或者要求再低点取得函数指针和函数在内存中的长度也行,做函数自校验也够用了~

RT,求指导~

展开
收起
a123456678 2016-07-20 14:55:32 2790 0
1 条回答
写回答
取消 提交回答
  • 倒是可以暴力去搜索这个头,根据自己的函数地址,对其一下然后看是否是Mach-o的头。

    可以参考:https://developer.apple.com/library/m...

    [Update]
    最近正好回头研究,发现还有更好的方法来做的。验证模块基址还是有其他简单方法的:
    
    static void baseaddr(const char *cls, const char *sel){
        Dl_info info;
        IMP imp= class_getClassMethod(objc_getClass(cls), sel_registerName(sel));
        if (dladdr(imp, &info)){
            printf("fbase: %s\n", info.dli_fbase);
        }
    }

    使用方法如下:

    baseaddr("NSURLConnection","initWithRequest:delegat:");
    可以期待我翻译的一个iOS相关安全书籍上市 XD

    2019-07-17 19:58:53
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载