美文网首页
AppOrderFiles如何使用,二进制重排

AppOrderFiles如何使用,二进制重排

作者: CodingTom | 来源:发表于2021-08-04 09:30 被阅读0次

    AppOrderFiles集成说明

    添加pod

    pod 'AppOrderFiles'
    

    在 PodFile最后面添加如下代码:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['OTHER_CFLAGS'] = '-fsanitize-coverage=func,trace-pc-guard'
          config.build_settings['OTHER_SWIFT_FLAGS'] = '-sanitize-coverage=func -sanitize=undefined'
        end
      end
    end
    

    didFinishLaunchingWithOptions 中调用如下代码:

    AppOrderFiles(^(NSString *orderFilePath) {
        NSLog(@"OrderFilePath:%@", orderFilePath);
    });
    

    生成Order File的原理

    基于 Clang SanitizerCoverage 的方案

    Clang 10 documentation 中可以看到 LLVM 官方对 SanitizerCoverage 的详细介绍。

    简单来说 SanitizerCoverage 是 Clang 内置的一个代码覆盖工具。

    它把一系列以 __sanitizer_cov_trace_pc_ 为前缀的函数调用插入到用户定义的函数里,借此实现了全局 AOP 的大杀器。其覆盖之广,包含 Swift/Objective-C/C/C++ 等语言,Method/Function/Block 全支持。

    开启 SanitizerCoverage 的方法是:

    在 build settings 里的 “Other C Flags” 中添加 -fsanitize-coverage=func,trace-pc-guard。

    如果含有 Swift 代码的话,还需要在 “Other Swift Flags” 中加入 -sanitize-coverage=func 和 -sanitize=undefined。

    所有链接到 App 中的二进制都需要开启 SanitizerCoverage,这样才能完全覆盖到所有调用。

    基于 Clang SanitizerCoverage iOS大神 写了个工具 AppOrderFiles

    CocoaPods 接入,一行调用生成 Order File。

    参考资料

    https://github.com/yulingtianxia/AppOrderFiles

    https://xiaozhuanlan.com/topic/6042819753

    http://yulingtianxia.com/blog/2019/09/01/App-Order-Files/

    https://clang.llvm.org/docs/SanitizerCoverage.html#tracing-pcs

    相关文章

      网友评论

          本文标题:AppOrderFiles如何使用,二进制重排

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