gpt4 book ai didi

c - objcopy:无法复制需要但不存在的特定部分 (`.rodata' [...])

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:50 26 4
gpt4 key购买 nike

我编译了一个 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。

失败,报告:

BFD: hello_new: symbol `.rodata' required but not present
objcopy:hello_new: No symbols

如何解决?

最佳答案

首先,您提到您只需要 .text 部分 - 用于运行时执行?这是不对的:如果那个 hello 函数在内部硬编码了字符串,那么所有这些字符串都将位于 .rodata 部分,所以你要忽略这个部分吗?

.eh_frame是debugger用的,.comment我觉得是不需要的,但是.data也是需要的。

另一件事是重定位表——如果函数要动态加载到某个任意内存区域,那么函数内部的很多区域可能需要修补......检查 objdump -r你的ELF,看看是否有任何重定位条目。如果没有,你是安全的。

此外,声明为“const”的函数内的任何内容也将进入 .rodata 部分 - 当然是全局数据。函数局部的变量或常量在堆栈上。所有全局数据都位于 .data 部分。

但回到最初的错误,原因是因为原始 URL 中的示例 3 没有交叉引用(.interp 部分),因此 objdump -s 不会有错误。你的情况 .text 确实有对 .rodata 部分的交叉引用,但是在你只提取了 .text 部分之后不可用.

关于c - objcopy:无法复制需要但不存在的特定部分 (`.rodata' [...]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com