- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在共享库 (linux x86_64) 的 readelf --segments
输出中,前几个程序头是:
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000984 0x0000000000000984 R E 200000
LOAD 0x0000000000000dc8 0x0000000000200dc8 0x0000000000200dc8
0x0000000000000280 0x0000000000000288 RW 200000
DYNAMIC 0x0000000000000de8 0x0000000000200de8 0x0000000000200de8
0x00000000000001d0 0x00000000000001d0 RW 8
这些 map 分别对应以下部分:
Segment Sections...
00 .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
01 .init_array .fini_array .jcr .data.rel.ro .dynamic .got .got.plt .data .bss
02 .dynamic
我正在使用 gnu 链接器 (binutils ld.bfd),并且想知道执行以下任一操作的黑魔法咒语:
.rodata
部分,这样我就可以拥有 .data
、.bss
和 .rodata
所有彼此靠近(而默认链接布局将我的 .rodata
~0x200000 字节远离我的 .data
).rodata
段内容与RW中的.data
和.bss
并置(二)加载段。最佳答案
想出如何做 2. 首先转储默认链接器脚本,将 -Wl,-verbose
传递给编译器驱动程序链接步骤,然后通过删除行来修改它:
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
.rodata1 : { *(.rodata1) }
然后将它们添加回 .data
部分:
.data :
{
*(.data .data.* .gnu.linkonce.d.*)
*(.rodata .rodata.* .gnu.linkonce.r.*)
*(.rodata1)
SORT(CONSTRUCTORS)
}
修改后的链接描述文件可以与-Wl,-T,pathToThatScript
一起使用
关于linux - 有没有办法将 .rodata 段映射到不同的程序头中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497349/
例如当我有: 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 是否有任何选项可以将所有字符
我是一名优秀的程序员,十分优秀!