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

Zso*_*ari 2 ios

我想在我的应用程序中提供通过电子邮件发送捕获的NSException堆栈跟踪的选项。但是,地址已重定位,因此我需要加载的基地址才能使跟踪有意义。有办法吗?我得到的最接近的是采用已知函数的指针,这是某种东西(毕竟我可以从中计算基址),但是还有更简单的方法吗?

tro*_*foe 7

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

// 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);
    }
}
Run Code Online (Sandbox Code Playgroud)