我正在尝试为没有虚拟内存(或者更准确地说是操作系统)的机器编写一个 C 程序,并且我在 .rodata 部分,或者更准确地说是那里的东西遇到了一些困难。出现的问题是,尽管在链接期间这些节位于明确定义的地址,但当程序开始执行时,它正在被重新定位。
例如:假设我的程序开始链接到从 0x1000 开始,当它被执行时,应该在 0x1000 的内容被重新定位在 0xff1000。
话虽这么说,我的问题是,通常进入 .rodata 的内容是由编译器(gcc)“硬编码”的,并且由于重定位和 gcc 对它们的地址进行硬编码,我有点丢失了内存中的 .rodata 常量,因此它们获得绝对偏移量而不是相对偏移量。
有没有一种方法可以让 .rodata 常量具有相对偏移量而不是绝对偏移量。相对,我的意思是相对于任何活动的进程寄存器?