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

相关推荐
SunshineBrother5 小时前
shell脚本,怎么查找项目中的重复图片
ios
月未央5 小时前
HarmonyOS Next 开发系列:Provider和Consumer状态修饰器实践
ios·harmonyos
北京自在科技1 天前
【Find My功能科普】防盗黑科技如何改变生活?
科技·ios·生活·findmy
水木姚姚2 天前
图形界面控件编程(iOS)
人工智能·python·macos·ios·xcode
书弋江山2 天前
Flutter 调用原生IOS接口
flutter·ios·cocoa
q567315232 天前
使用ASIWebPageRequest库编写Objective-C下载器程序
android·开发语言·macos·ios·objective-c·iphone
星海拾遗2 天前
debug_unpack_ios failed: Exception: Failed to codesign 解决方案(亲测有效)
flutter·ios
水木姚姚2 天前
视频软件编程(iOS)
macos·ios·objective-c·音视频·xcode
L_Jason先生2 天前
iOS 聊天 IM 消息收发管理工具
前端·ios·设计模式·cocoa·责任链模式·适配器模式
北京自在科技3 天前
苹果Siri升级遇阻,国行iPhone或将引入阿里、百度AI自救
百度·ios·ai·iphone·阿里