【发布时间】:2012-04-06 14:39:53
【问题描述】:
对JMP机器指令的十六进制码转换有疑问。我有我想跳转到的绝对地址,比如“JMP 0x400835”。 首先,这是允许的吗?如果是,那么对应的十六进制代码是什么? 如果没有,我可以先将地址存储在某个寄存器中,比如 EAX,然后输入“JMP EAX”吗? 我正在研究 x86(64b) 架构。
我尝试从gdb中的diassem输出中打印出十六进制代码,但是没有一致性,即在十六进制代码中看不到目的地址。
我是十六进制代码和机器指令的新手,请原谅我的无知。
【问题讨论】:
-
相关:How to write an absolute target for a near direct relative call/jmp in MASM。如果跳转目标在范围内,则某些工具链(例如 Linux 上的 NASM +
ld)会将 jmp 组装+链接到绝对地址,作为来自已知地址的相对 jmp(在与位置相关的代码中)。
标签: assembly hex x86-64 machine-code