问题描述
我们正在创建一个静态库,我们希望对其内部进行“混淆”。
在 GCC 中,我们通过将所有单独的目标文件合并为一个目标文件来实现这一点,通过将目标文件传递给 GCC,传递 list
标志并指定类似于:-r
的输出。
之后,我们重命名所有“本地”符号,以便在目标文件上运行 -o super_object.o
时,只有我们专门设置了可见性的函数仍具有其原始名称。
在 clang 中,我们正在尝试做同样的事情。我们使用相同的命令,但我们调用 clang(具体来说是德州仪器的 nm
)而不是 gcc。这是有效的,但如果我们用 tiarmclang
列出所有部分,我们仍然可以看到原始目标文件的所有名称,甚至(部分)函数的名称。
某些部分的名称类似于 objdump -h
甚至 .text:my_internal_stuff.c.obj
。
我们在用 GCC 创建的组合目标文件中没有看到这些部分。我们还尝试使用标志 .rel.text.MyInternalFunctionThatShouldBeHidden:my_internal_stuff.c.obj
和 -fno-function-sections
运行 clang,但这没有任何区别。
我们可以尝试删除部分中的这些信息吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)