如何解读"jmp dword ptr [rel $ 00005e52]"?

Cha*_*ang 2 assembly

我试图在Win64平台中跟踪汇编代码:

当指令执行到:

0000000000402590 FF25525E0000     jmp dword ptr [rel $00005e52]
Run Code Online (Sandbox Code Playgroud)

跳转后,它会去地址:

00000000006B3F90 56               push rsi
Run Code Online (Sandbox Code Playgroud)

jmp指令如何检索跳转到的地址?[rel $ 00005e52]是什么意思?

Ale*_*nze 5

这个特殊的jmp(在文档中列为"FF/4 jmp r/m64")使用所谓的RIP相对寻址(ModR/M字节= 0x25:mod = 00b,reg/opcode = 100b,r/m = 101b;这意味着在32位模式下为disp32,在64位模式下为RIP + disp32).

它从0x402590 + 6(此jmp之后的指令的地址)+ 0x5E52(即0x4083E8)读取跳转地址(64位).0x4083E8(8字节)的存储器应该等于0x6B3F90.