データを含む位置相対コードを書きたいと思います。
つまり、printf の絶対アドレスを取得し、単純な文字列を出力する関数です。
パラメータ-fPICを指定してarm-none-eabi-gccを使用して ELF をコンパイルすることで、これを達成することができました。問題は、 objcopyを使用して ELF ファイルをフラット バイナリに変換することです。
objcopyは文字列をファイルの先頭に配置するため、関数の最後に文字列を残す代わりに、データが位置に依存しなくなり、プログラム カウンターによってアドレス指定されます。
何か不足していますか?objcopy が位置に依存しないデータでフラット バイナリを作成することは可能ですか?
編集:
添付の画像で、文字列が関数の最後ではなく関数の上の絶対アドレスにあり、PC によって指されていることがわかります。