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,直接加上去。

相关推荐
千里马-horse7 小时前
Building a Simple Engine -- Mobile Development -- Platform considerations
android·ios·rendering·vulkan
systeminof17 小时前
全新MacBook发布:苹果公司将 iPhone 芯片带入笔记本时代
ios·iphone
pop_xiaoli18 小时前
effective-Objective-C 第四章阅读笔记
笔记·ios·objective-c·cocoa·xcode
前端不太难1 天前
Flutter 适合什么团队?RN / iOS 各自的边界在哪?
flutter·ios
带娃的IT创业者2 天前
解密OpenClaw系列10-OpenClaw系统要求
人工智能·macos·ios·objective-c·ai智能体·智能体开发·openclaw
systeminof2 天前
iOS 26.4 更新前瞻:Siri 架构级重构与上线时间预测
ios·重构
刮涂层_赢大奖2 天前
我给MAC做了一个 Windows 任务栏,用了之后再也回不去 Dock 了
windows·macos·ios
疯笔码良3 天前
【swiftUI】实现自定义的底部TabBar组件
ios·swiftui·swift
松叶似针4 天前
Flutter三方库适配OpenHarmony【secure_application】— iOS 端原生模糊遮罩实现分析
flutter·ios·cocoa