c-重命名web程序集二进制文件中的符号



我需要一种方法来重命名WebAssembly二进制存档文件中的某些符号,这些符号是由emscripten从C文件编译的
使用gcc时,我可以使用objcopy --redefine-sym命令,但这会给我objcopy: libname.bc: file format not recognized
我也尝试过llvm-objcopy,但这给了我llvm-objcopy: error: unsupported object file format
然而,运行llvm-nm确实有效
运行file会产生libname.bc: WebAssembly (wasm) binary module version 0x1 (MVP)

tldr;我不确定今天有什么简单的方法可以做到这一点。

在源代码中重命名并重新编译是我能想到的唯一方法,你可能有什么原因不能做到这一点?

llvm objcopy中对WebAssembly的支持只是部分的,并且是最近才添加的:https://reviews.llvm.org/D70970.因此,objcopy的某些部分可能可以使用,但您需要llvm 11。

然而,我不相信--redefine-sym已经实现了,即使是在树的顶端。

如果这是一个普通的WebAssembly二进制文件,你可以将其转换为wat,编辑它,然后再转换回来,但遗憾的是,wasm对象文件是额外的自定义部分,无法在往返中幸存下来。

您可以在导出部分中更改名称

https://webassembly.github.io/spec/core/binary/modules.html#binary-出口秒

但是,如果二进制编辑很难,那么就把你的wasm翻译成wabt,然后你可以用文本编辑器进行更改,并从wabt转换回wasm

最新更新