自己変更プログラムのコードでダミーの絶対アドレスを宣言する必要があります。このポインタは、リンカの再配置と同様に機能します。命令内の適切なスペースのみを予約し、実行時に有効なアドレスで更新されます。これは、x86-32では問題なく機能しました。
movups xmm0, [0xDEADBEEF]
これは、実行時に期待どおりに組み立てられ、機能します。ただし、x86-64コードでこれを実行しようとすると、次のようになります。
movups xmm0, [0xDEADC0DEDEADBEEF]
次の警告とともに組み立てられます。
warning: dword data exceeds bounds
また、次の命令が残りのアドレスで上書きされるため、実行時にすぐにクラッシュします。これは、たまたま命令的にガベージになっています。
32ビットより長いアドレスは、警告なしにアセンブルできません。少なくとも32ビットより長いアドレスでも次のようになります。
movups xmm0, [0xADEADBEEF] ; 36-bit address
定数の絶対64ビットポインタを宣言するにはどうすればよいですか?または、それを回避する方法がなく、RIP相対の32ビットポインタをそこにドロップする必要がありますか?