如何在 RiscV64 程序集中加载大于 0x7FFFFFFFF 的符号的绝对地址

问题描述

我正在编写一个内核,我需要在 0x7FFFFFFFF 上自我重定位。为此,我需要使用绝对寻址引用内核的开头和结尾以及一个符号,在重定位后继续执行。我一直无法想出任何方法来做到这一点。可以做到吗?有解决方法吗?

解决方法

我发现的唯一方法是获取加载地址并从目标地址中减去它。然后您可以将此偏移量添加到任何相对地址以获得绝对地址。