- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编译了一个 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/
例如当我有: const char mesg [] = "Hello World"; 它直接放在 .rodata 但是当我有: const char* mesg = "Hello World"; 直接
这是我的链接描述文件: ENTRY(__startup) SECTIONS { . = 0x0000; .text : { *(.text) } . = . + 0x4000;
我正在尝试为没有虚拟内存(或者更准确地说是操作系统)的机器编写一个 C 程序,并且我在 .rodata 部分,或者更准确地说是那里的东西遇到了一些困难。出现的问题是,尽管在链接期间这些节位于明确定义的
出于好奇,我今天尝试运行这段代码(使用 gcc -m32 1.c 编译): int main(void) { // EB is the opcode for jmp rel/8 //
我正在尝试使 .rodata 部分位置与其关联的函数内存位置保持一致。我正在使用带有 STM32L4A6 微 Controller 的 GNU 编译器/链接器、裸机、plain-jane c。 我有一
我已经为我的问题创建了一个最小示例。在 c 文件中,我初始化了一个包含 16 个元素的数组。然后我用数组指针及其大小作为参数调用一个函数。该功能本身有效,我已经使用反汇编文件验证了这一点。堆栈指针初始
我不得不完全改写这个问题及其标题,因为我的初步分析结果是错误的(感谢所有提示和建议!)。问题的旧标题是: GCC -O3 打乱二进制文件并产生数据垃圾 事实证明它与优化级别无关,我也不确定数据是否是垃
我编译了一个 Hello World C 文件,只需要其中的一个部分(只有 hello world 函数)。 编译后的文件格式为 elf32-i386,包含 4 个部分:.rodata、.text.h
目标是将大量常量数据放入 .rodata 部分,以允许从其他翻译单元访问它。据我所知,如果声明为 static const,GCC 会将数据放入只读部分。但是这样就不可能在其他文件中声明为extern
嘿 friend 我陷入严重的链接错误,我收到这样的错误 referenced in section .rodata' of xxx defined in discarded section .tex
在共享库 (linux x86_64) 的 readelf --segments 输出中,前几个程序头是: Program Headers: Type Offset
我正在 Gentoo 中为 ARM Cortex M3 (Maple Mini) 交叉编译 C++,但在链接 elf 文件时似乎遇到了内存资源问题 /usr/libexec/gcc/arm-none-
我有大量使用 constexpr 构造函数构造的静态常量对象,因此它们会立即存储在最终二进制文件中,而无需任何构造函数调用。 由于我在低 RAM 系统(STM32 MCU)上工作,我想减少这些对象的内
C语言中的代码 char *c = "Hello world!"; 在 rodata 中存储 Hello world!\0 并使用指向它的指针初始化 c。我怎样才能用字符串以外的东西来做到这一点? 具
所以测试平台是Linux 32位 我用gcc生成一个quickSort的obj文件是这样的: gcc -S quickSort.c 并且生成的quickSort.o是一个可重定位的ELF: #file
我已经看到 .rodata 和 .rdata 都被用作段。我应该使用哪一个,它们之间有什么区别? 最佳答案 RODATA 用于 ELF并且 RDATA 用于 COFF . Mach-O 中最接近的等价
尝试在 x86 AT&T 程序集中编译简单的字符串大小写交换函数时遇到此错误。 我尝试查看其他出现此错误的问题,但没有一个足够相似来帮助解决我的情况。大多数人都在不同的库和文件中处理事物,但这里的情况
我读了c++11 faq并找到这句话: Typically we want the compile-time evaluation guarantee for global or namespace
我有“const char *x”变量,编译后它应该分配在 rodata 区域中。但是当我看到变量 x 正在某个数据区域中分配时。任何人都可以告诉是否有任何命令使 const 变量在 rodata 区
在我的 x86-64 内核中,我试图将 .rodata ELF 部分映射为只读。但是所有的字符串文字都存储在特定于文件的部分中,例如.rodata.str1.8。 GCC 是否有任何选项可以将所有字符
我是一名优秀的程序员,十分优秀!