问题标签 [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.

0 投票
1 回答
660 浏览

strip - 是否有任何类似于 objcopy 的命令可以从共享对象文件中删除符号?

是否有任何类似于 objcopy 的命令可以从 linux 平台上的共享对象文件中删除符号?

0 投票
2 回答
2806 浏览

linux - 重写编译对象的共享库 undef 符号版本

我正在尝试编译和链接与共享库(在本例中为 libcryto 和 libssl,但实际库不相关)链接的程序(我们称之为 myprog)。我在Centos 5.5上构建它,但希望相同的二进制文件在其他类似RHEL的发行版(例如 CloudLinux)上运行。两者都具有相同库的版本SO_NAME(即DT_NEEDED版本对应)。

我的问题是这个。当我在 Centos 上编译时,我看到:

效果很好,因为:

但是,在 CloudLinux 上:

请注意 SSL 符号的版本已从 更改libssl.so.10Base

这意味着当我运行二进制文件时,我得到:

我知道这“只是一个警告”,但我想摆脱它。

我想要的是让我的二进制文件在 cloudlinux 和 centos 上运行而不会发出警告。据我所知,openssl 库的 ABI 至少在我使用的位上是相同的。现在我无法更改共享库,因为myprog它可以在任何 cloudlinux 或 centos 库上运行。我会接受一个在安装时修复符号(以某种方式)的解决方案,例如使用objcopy.

一种方法是引入一个弱符号,SSL_new@libssl.so.10它的别名是SSL_new@Base. 显然,这将适用于 ssl 库中的每个符号(因此包装器不合适)。但是我无法获取符号的-Wl,--defsym=x=yx和符号。y@

另一种可行的方法是简单地从二进制文件中删除符号版本信息(即libssl.so.10从每个 ssl 符号中删除版本,并依赖DT_NEEDED名称中的版本信息)。这似乎是一个简单的请求,但我也不知道该怎么做。有objcopy什么咒语吗?

更糟糕的是,在 Centos 上构建一个可以在 CloudLinux 上运行的(单独的)版本就可以了。我尝试这样做:

但是,在链接抱怨SSL_new@Base是未定义符号时失败(在 Centos 上它是,因为 Centos.so没有该符号)。

有没有办法解决这个问题?

0 投票
0 回答
281 浏览

linux - 如何将 .obj 转换为 .coff(在 cygwin 平台上)

使用 objcopy 命令将 .obj 转换为 .coff 文件时遇到问题。目前我正在尝试通过使用 OBJCOPY 命令来解决这个问题。我试过命令objcopy -I input.O -O 输出。 输出将被转换为COFF 格式,输入为.O 对象格式。但它不起作用。

0 投票
1 回答
879 浏览

c++ - 如何从 C 中的可执行文件中检索平面二进制文件

如何从可执行文件中的 .text 部分检索二进制块?

我知道 objcopy 可以通过以下方式提供帮助:

但是,如果我可以在使用 BFD 库的函数调用中实现相同的目标,那就更好了。有没有办法使用函数调用来调用 objcopy?

0 投票
3 回答
1583 浏览

c - Objcopy --writable-text 不使精灵二进制文本部分可写?

我试图.text使用. 该命令正常执行,没有任何错误。elfobjcopy --writable-text executable_name

通过检查部分权限,readelf我可以看到文本部分仍然只有读取和执行权限。

在浏览objcopy此特定选项的手册页时,提到该选项对所有二进制格式都没有意义。(这是我不能这样做的原因吗?)。

谁能指出我在这里缺少的东西。

谢谢

(Ubuntu x86_64 位机器,GNU objcopy(用于 Ubuntu 的 GNU Binutils)2.22.90.20120924)

0 投票
1 回答
406 浏览

macos - 在 osx 上编辑目标文件(cf objcopy)

如何在 osx 上编辑目标文件?例如,重命名或删除目标文件中的符号。我试过 binutil 的 gobjcopy:

这似乎有效,但ld在链接 foo2.o 时会抱怨(它没有抱怨 foo.o)。这也以最简单的形式 ( gobjcopy foo.o foo2.o) 发生。

背景:我正在尝试删除在 2 个目标文件中定义的重复符号。

0 投票
1 回答
783 浏览

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)

有任何想法吗?这与链接有关吗?

0 投票
1 回答
1441 浏览

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 文件中的函数?

0 投票
1 回答
1625 浏览

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

0 投票
1 回答
1552 浏览

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。

它失败了,报告:

如何解决?