gpt4 book ai didi

c - .rodata 搬迁相关问题

转载 作者:行者123 更新时间:2023-12-04 10:55:31 25 4
gpt4 key购买 nike

我正在尝试为没有虚拟内存(或者更准确地说是操作系统)的机器编写一个 C 程序,并且我在 .rodata 部分,或者更准确地说是那里的东西遇到了一些困难。出现的问题是,尽管在链接期间这些节位于明确定义的地址,但当程序开始执行时,它正在被重新定位。

例如:假设我的程序开始链接到从 0x1000 开始,当它被执行时,应该在 0x1000 的内容被重新定位在 0xff1000。

话虽如此,我的问题是通常进入 .rodata 的内容是由编译器(gcc)“硬编码”的,并且由于重定位和 gcc 对它们的地址进行硬编码,我有点丢失了内存中的 .rodata 常量,因此它们获得绝对偏移量而不是相对偏移量。

有没有一种方法可以让 .rodata 常量具有相对偏移量而不是绝对偏移量。相对,我的意思是相对于任何事件的进程寄存器?

最佳答案

根据架构,.rodata 可能会被任意重定位到特定的内存区域(例如 ROM)。此类信息可在您的机器数据表中找到。
如果是这种情况,您必须使用链接描述文件告诉链接将您的 .rodata 部分放在正确的区域中。
可以在此处找到有关 GCC 链接器脚本如何工作的一个很好的概述:

http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html

此外,您可以在 Internet 上轻松找到许多特定于体系结构的链接脚本。

希望有帮助!

关于c - .rodata 搬迁相关问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7090791/

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