我正在构建一个iOS项目,其中包含一个子项目,我希望从该产品的.dSYM DWARF文件中排除其符号。
情况是,子项目(静态库)包含有价值的专有代码,我不希望攻击者能够符号化这些代码,即使他们有用于重新符号化整个应用程序崩溃报告的dSYM文件。这个子项目涵盖了一个非常特定的领域,并且经过了独立的良好测试,所以我并不担心无法在该代码中重新标记堆栈跟踪。然而,我确实需要能够为应用程序的其余部分重新解析崩溃报告,所以我需要一个dSYM (因为使用应用程序分发符号不是一个选项)。
我已经设法确保从二进制文件中剥离了所有相关的符号,并且设置GCC_GENERATE_DEBUGGING_SYMBOLS=NO从dSYM中删除了很多东西,但是我仍然在dSYM文件中看到类私有的C++方法名。作为参考,我使用clang。
我如何才能在不影响这个子项目的符号的情况下为我的应用程序生成一个dSYM?
发布于 2014-05-22 14:13:32
使用bog标准的Xcode工作流,这可能很困难。你可以在dSYM脚本阶段做一些事情,将静态库移动到一个不同的文件名(“隐藏”它),然后在你的主应用程序二进制文件上运行dsymutil来创建shell。因为dsymutil找不到静态库,所以它不能包含这些函数的任何调试信息。或者,您可以创建静态库的no-debug-info版本,尽管这需要更多的脚本。静态库实际上是对象(.o)文件的压缩文件--您需要创建一个目录,解压缩.o文件(ar x mylib.a),剥离.o文件,然后创建一个新的静态库(我认为是ar q mylib-nodebuginfo.a *.o),并在运行dsymutil之前将其放置到位。
但是,我不知道如何在dSYM创建后有选择地从它中删除调试信息。这是可能的,但我认为没有人写过这样的工具。
https://stackoverflow.com/questions/23794665
复制相似问题