我该如何获取iOS应用的加载地址?

3

我希望我的应用程序可以提供通过电子邮件发送捕获的NSException堆栈跟踪的选项。但是,地址已经重新分配,因此我需要加载的基地址才能使跟踪有意义。是否有方法可以获取它?最接近的方法是获取已知函数的指针,这是一些东西(毕竟我可以从中计算出基地址),但是否有更简单的方法?


1
为什么不直接使用Crashlytics呢?你正在重新发明轮子。 - trojanfoe
我可能会考虑这个好建议,但是我仍然对此很感兴趣。 - Zsolt Szatmari
1个回答

10

我过去所做的是在日志文件中记录机器头地址,这样(基于服务器的)符号化工具就可以使用。日志文件包含了日志消息和崩溃日志。

// Dump the load addresses of AppName and libXxx.dylib to help tools/process_bug_reports.py
uint32_t numImages = _dyld_image_count();
for (uint32_t i = 0; i < numImages; i++) {
    const struct mach_header *header = _dyld_get_image_header(i);
    const char *name = _dyld_get_image_name(i);
    const char *p = strrchr(name, '/');
    if (p && (strcmp(p + 1, "AppName") == 0 || strcmp(p + 1, "libXxx.dylib") == 0)) {
        loginf(@"module=%s, address=%p", p + 1, header);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接