使用 clang 将多个目标文件合并为一个目标文件

问题描述

我们正在创建一个静态库,我们希望对其内部进行“混淆”。

在 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 (将#修改为@)