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

发布于 2022-08-25 00:45:07 字数 162 浏览 14 评论 0

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

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

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

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

RT,求指导~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

┊风居住的梦幻卍 2022-09-01 00:45:07

倒是可以暴力去搜索这个头,根据自己的函数地址,对其一下然后看是否是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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文