问题标签 [objcopy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
strip - 是否有任何类似于 objcopy 的命令可以从共享对象文件中删除符号?
是否有任何类似于 objcopy 的命令可以从 linux 平台上的共享对象文件中删除符号?
linux - 重写编译对象的共享库 undef 符号版本
我正在尝试编译和链接与共享库(在本例中为 libcryto 和 libssl,但实际库不相关)链接的程序(我们称之为 myprog)。我在Centos 5.5上构建它,但希望相同的二进制文件在其他类似RHEL的发行版(例如 CloudLinux)上运行。两者都具有相同库的版本SO_NAME
(即DT_NEEDED
版本对应)。
我的问题是这个。当我在 Centos 上编译时,我看到:
效果很好,因为:
但是,在 CloudLinux 上:
请注意 SSL 符号的版本已从 更改libssl.so.10
为Base
。
这意味着当我运行二进制文件时,我得到:
我知道这“只是一个警告”,但我想摆脱它。
我想要的是让我的二进制文件在 cloudlinux 和 centos 上运行而不会发出警告。据我所知,openssl 库的 ABI 至少在我使用的位上是相同的。现在我无法更改共享库,因为myprog
它可以在任何 cloudlinux 或 centos 库上运行。我会接受一个在安装时修复符号(以某种方式)的解决方案,例如使用objcopy
.
一种方法是引入一个弱符号,SSL_new@libssl.so.10
它的别名是SSL_new@Base
. 显然,这将适用于 ssl 库中的每个符号(因此包装器不合适)。但是我无法获取符号的-Wl,--defsym=x=y
值x
和符号。y
@
另一种可行的方法是简单地从二进制文件中删除符号版本信息(即libssl.so.10
从每个 ssl 符号中删除版本,并依赖DT_NEEDED
名称中的版本信息)。这似乎是一个简单的请求,但我也不知道该怎么做。有objcopy
什么咒语吗?
更糟糕的是,在 Centos 上构建一个可以在 CloudLinux 上运行的(单独的)版本就可以了。我尝试这样做:
但是,在链接抱怨SSL_new@Base
是未定义符号时失败(在 Centos 上它是,因为 Centos.so
没有该符号)。
有没有办法解决这个问题?
linux - 如何将 .obj 转换为 .coff(在 cygwin 平台上)
使用 objcopy 命令将 .obj 转换为 .coff 文件时遇到问题。目前我正在尝试通过使用 OBJCOPY 命令来解决这个问题。我试过命令objcopy -I input.O -O 输出。 输出将被转换为COFF 格式,输入为.O 对象格式。但它不起作用。
c++ - 如何从 C 中的可执行文件中检索平面二进制文件
如何从可执行文件中的 .text 部分检索二进制块?
我知道 objcopy 可以通过以下方式提供帮助:
但是,如果我可以在使用 BFD 库的函数调用中实现相同的目标,那就更好了。有没有办法使用函数调用来调用 objcopy?
c - Objcopy --writable-text 不使精灵二进制文本部分可写?
我试图.text
使用. 该命令正常执行,没有任何错误。elf
objcopy --writable-text executable_name
通过检查部分权限,readelf
我可以看到文本部分仍然只有读取和执行权限。
在浏览objcopy
此特定选项的手册页时,提到该选项对所有二进制格式都没有意义。(这是我不能这样做的原因吗?)。
谁能指出我在这里缺少的东西。
谢谢
(Ubuntu x86_64 位机器,GNU objcopy(用于 Ubuntu 的 GNU Binutils)2.22.90.20120924)
macos - 在 osx 上编辑目标文件(cf objcopy)
如何在 osx 上编辑目标文件?例如,重命名或删除目标文件中的符号。我试过 binutil 的 gobjcopy:
这似乎有效,但ld
在链接 foo2.o 时会抱怨(它没有抱怨 foo.o)。这也以最简单的形式 ( gobjcopy foo.o foo2.o
) 发生。
背景:我正在尝试删除在 2 个目标文件中定义的重复符号。
c - 指向“未定义”函数的函数指针
所以,这就是问题所在。
我使用 编译了一些目标文件,gcc -c
并使用obj-copy
. 如果初始对象文件的 a 函数名为foo()
,则克隆对象中生成的函数名称为:
foo1(); foo2(); foo3();
然后,我将这 3 个对象与另一个包含 main 方法的文件链接起来,我可以使用 eg 调用每个函数变体foo2();
。这项工作非常好!
但是,如果我尝试使用以下方法创建一个指向这些函数的函数指针:
functionPtr=&foo1; \\ tried also w/o the &
然后,我得到:
error: 'foo2' undeclared (first use in this function)
有任何想法吗?这与链接有关吗?
android - android NDK:objcopy --rename-sym 不起作用(需要重命名 .so 文件中的函数)
我无法objcopy --rename-sym
工作。
在一个新的 Android 项目中,我创建了目录 jni 和文件 stub.c:
命令~/an/ndk-build -j 4
说:
(有链接:
)
然后我做
并获得一个相同的libTest-x.so。我当然试过~/ay/*objcopy
了,结果是一样的。我没有收到错误消息。而且myfunc()仍然存在,没有ourfunc()。
如何重命名 .so 文件中的函数?
android - Using clang's objcopy with input file returns: "File format not recognized"
I am using the following command arm-linux-androideabi-objcopy --redefine-syms mysyms obj1.o obj2.o
.
The binary is from the clang3.3 toolchain, which I built using the Android NDK
.
The mysyms file contains value pairs in the format of
It works perfectly when using the gcc toolchain, but with the clang
toolchain i get "File format not recognized".
Is the file format different?
I am using OSX, but I tried on an Ubuntu VM to re-create the mysyms file, just to be sure that the line endings are not messed up.
Cheers
c - objcopy:无法复制特定部分(`.rodata' 需要但不存在 [...])
我编译了一个 Hello World C 文件,只需要它的一个部分(只有 hello world 函数)。
编译后的文件格式为 elf32-i386,包含 4 个部分:.rodata
, .text.hello
, .comment
, .eh_frame
.
我尝试使用 objcopy 仅提取.text.hello
部分:http ://www.thegeekstuff.com/2013/01/objcopy-examples/示例 3。
它失败了,报告:
如何解决?