美文网首页
iOS-atos-符号化系统动态库

iOS-atos-符号化系统动态库

作者: 笑破天 | 来源:发表于2022-09-27 23:16 被阅读0次

问题:使用atos不加-l参数时符号化失败,加-l符号化成功。
原因:系统动态库的slide值不是0x10000000

atos

atos -l 后面跟的是基地址
atos不加-l后面跟的是总偏移地址(=映射偏移+文件偏移,映射偏移是__TEXT起始地址,文件偏移是offset)

地址逻辑

symbol address = slide + stack address - load address
slide 值是 LC_SEGMENT __TEXT 中的 vmaddr 的值(大部分是0x10000000,64是0x10000000,32是0x0,系统动态库不定). 
运行命令otool -arch arm64 -l "APP_BUNDLE/APP_EXECUTABLE" | grep -B 3 -A 8 -m 2 "__TEXT"可得到具体值
代码中获取映射偏移:可以获取__TEXT的起始地址,或者text_addr = (uintptr_t)header - _dyld_get_image_vmaddr_slide(i)

demo

void test(void) {
    uint32_t count = _dyld_image_count();
    for (int i = 0; i < count; i++) {
        NSString *name = [[NSString stringWithUTF8String:_dyld_get_image_name(i)] lastPathComponent];
        intptr_t vmaddr_slide = _dyld_get_image_vmaddr_slide(i);
        const struct mach_header* header = _dyld_get_image_header(i);
        intptr_t text_addr = (uintptr_t)header - _dyld_get_image_vmaddr_slide(i);
        NSLog(@"---i:%d,name:%@,vmaddr_slide:%#lx,header:%p,text_addr:%#lx",i,name, vmaddr_slide,header,text_addr);
    }
}
// 打印可知:header = text_addr + vmaddr_slide
---i:0,name:SlideTest,vmaddr_slide:0x84000,header:0x100084000,text_addr:0x100000000
---i:1,name:substitute-inserter.dylib,vmaddr_slide:0x1001c4000,header:0x1001c4000,text_addr:0
---i:2,name:Foundation,vmaddr_slide:0xab84000,header:0x18b2c7000,text_addr:0x180743000
---i:3,name:libobjc.A.dylib,vmaddr_slide:0xab84000,header:0x18ad38000,text_addr:0x1801b4000

相关文章

  • iOS-atos-符号化系统动态库

    问题:使用atos不加-l参数时符号化失败,加-l符号化成功。原因:系统动态库的slide值不是0x1000000...

  • iOS---10--- _read_images 浅析 类的加载

    [toc] 前言 在iOS程序中会用到很多系统的动态库,这些动态库都是动态加载的。所有iOS程序共用一套系统动态库...

  • 10--- _read_images 浅析 类的加载

    [toc] 前言 在iOS程序中会用到很多系统的动态库,这些动态库都是动态加载的。所有iOS程序共用一套系统动态库...

  • 动态库截图保存

    testLib 是自制的动态库 WebKit 系统的动态库。 可以看到,系统的动态库存储路径是在系统目录中,自制的...

  • Swift 静态库调研

    一、关于库的背景知识1、静态库和动态库静态库动态库系统动态库Cocoa Touch Framework静态库 v....

  • golang调用c动态库

    golang调用c动态库 简介 golang调用c语言动态库,动态方式调用,可指定动态库路径,无需系统目录下 核心...

  • Dynamic & Static Libraries

    Dynamic Libraries 所有的系统库都属于动态库 动态库的后缀名为.dylib或.framework ...

  • iOS静态库开发制作

    库的种类 开源库 闭源库 闭源库分类 动态库链接时不复制,程序运行时由系统动态加载到内存中,供程序调用。系统只加载...

  • iOS 动态库(一)

    动态库是编译器链接的最终产物,系统的动态库是直接存放在手机里面的,一般为tbd格式,tbd文件里面存放了系统动态库...

  • JNI的静态注册和动态注册,及输出乱码解决

    [TOC] clang 生成动态链接库 命令介绍 不同操作系统的动态链接库后缀不相同 Windows里动态链接库后...

网友评论

      本文标题:iOS-atos-符号化系统动态库

      本文链接:https://www.haomeiwen.com/subject/ohkqartx.html