仮想メモリ(またはより正確にはOS)のないマシン用のCプログラムを作成しようとしていますが、.rodataセクション、またはより正確にはそこにあるものでいくつかの問題に直面しています。リンク中にセクションが適切に定義されたアドレスに配置されていても、プログラムが実行されると、セクションが再配置されるという問題が発生します。
例: 私のプログラムの開始が 0x1000 で開始するようにリンクされているとしましょう。実行中に、0x1000 にあるはずのものが 0xff1000 に再配置されます。
これらは言われていますが、私の問題は、通常.rodataに入るものがコンパイラ(gcc)によって「ハードコード」されていることです。再配置とgccがアドレスをハードコーディングしているため、メモリ内の前述の.rodata定数が失われます。相対オフセットではなく絶対オフセットを取得します。
.rodata 定数に絶対オフセットではなく相対オフセットを持たせる方法はありますか? 相対とは、アクティブなプロセス レジスタとの相対を意味しますか?