我需要在自修改程序的代码中声明一个虚拟绝对地址。该指针的工作方式类似于链接器的重定位 - 它仅在指令中保留适当的空间,并在稍后在运行时使用有效地址进行更新。这在 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 位指针?