iOS 二进制重排

cpp 复制代码
#include <stdint.h>
#include <stdio.h>
#include <sanitizer/common_interface_defs.h>
#include <dlfcn.h>

 void __sanitizer_cov_trace_pc_guard_init(uint32_t *start,
                                                    uint32_t *stop) {
    static uint64_t N;  // Counter for the guards.
    if (start == stop || *start) return;  // Initialize only once.
    printf("INIT: %p %p\n", start, stop);
    for (uint32_t *x = start; x < stop; x++)
        *x = ++N;  // Guards should start from 1.
}

 void __sanitizer_cov_trace_pc_guard(uint32_t *guard) {
     if (!*guard) return; 
     void *PC = __builtin_return_address(0);
     Dl_info info;
     dladdr(PC, &info);
     printf("guard:%p 开始执行:%s \n", PC, info.dli_sname);
}
  • 收集到符号信息后,可以把符号分行书写到自定义的order文件。

  • OC类函数**-[** 或**+[** 开头可以直接写入,其他的要额外加一个下划线_,info.dli_sname会少一个下划线。

cpp 复制代码
//order.order
-[ViewController viewDidLoad]
-[AppDelegate applicationSupportsSecureRestorableState:]
___29-[ViewController viewDidLoad]_block_invoke
__ZN1A4testEv
___29-[ViewController viewDidLoad]_block_invoke_2
  • 在build setting->Order file指定文件路径。

  • 注意!

  • +load因为触发时机比__sanitizer_cov_trace_pc_guard_init早,所以无法监听到,这个可以扫描mach-o文件查看哪些类有load,直接加上去。

相关推荐
SY.ZHOU1 天前
大型工程跨全平台实践总结
flutter·ios·安卓·鸿蒙
denggun123451 天前
Sendable 协议-Swift 结构化并发的核心安全保障
ios·swift
奶糖的次元空间1 天前
iOS 学习笔记 - 创建第一个APP
ios
for_ever_love__1 天前
Objective-C 学习 NSString 和 NSMutableString的基本功能详解
学习·ios·objective-c
@大迁世界1 天前
注意,苹果刚刚做出改变: iOS 26.4 系统强制所有设备开启“被盗设备保护”功能。
macos·ios·objective-c·cocoa
卢锡荣2 天前
LDR6021Q 车规级 Type‑C PD 控制芯片:一芯赋能,边充边传,稳驭全场景
c语言·开发语言·ios·计算机外设·电脑
2501_907136822 天前
iOS任意版本号APP下载
ios·软件需求
denggun123452 天前
结构化并发(Structured Concurrency)
开发语言·ios·swift
weixin_403810132 天前
EasyClick iOS USB版本蓝牙点击坐标代码
ios·自动化·代理模式
良逍Ai出海2 天前
Xcode 26来AI了:iOS独立开发者3步接入实测
人工智能·ios·xcode