我想知道处理器如何在x64应用程序中从较低内存区域跳转到更高内存区域,反之亦然。
远程跳转的默认助记符是x86中的E9 XXXXXXXX'以及x64位应用。 在x86上进行远程跳转很容易,因为您可以将目标地址直接放在' E9'比特,像这样:
Far call
Address Hex dump Command Comments
002957A1 E8 F15B2900 CALL Cam_Surveillance.00295BF1 ; above current code
002957A6 E9 3C562900 JMP Cam_Surveillance.0029563C ; below current code
Or the short call for comparison
Address Hex dump Command Comments
002957A1 E8 4B040000 CALL Cam_Surveillance.00295BF1 ; above current code
002957A6 E9 91FEFFFF JMP Cam_Surveillance.0029563C ; below current code
您还可以使用代码段来创建指针。
但是,当使用x64位应用程序时,您无法覆盖40位的限制。因此,为了进行远程调用或跳转到(硬编码的)64位地址,您需要64位。
例如RIP指向' 00FF7A0B.002957A1'。 RIP设置为指向&00; 00000000.003967B1'哪些指令? 或者这是否意味着你无法远程跳跃或打电话?