【发布时间】:2016-08-08 17:26:44
【问题描述】:
我是一个非常偶然的汇编用户。所以我需要更专家的帮助来解码我必须处理的一小段代码。
0000: 48 ff 25 61 57 07 00 rex.W jmp QWORD PTR [rip+0x75761] # 0x75768
0007: cc int3
这是内存间接跳转到rip+0x75761 保存的 8 字节/64 位地址,因此加载跳转目标的绝对地址是 0007 + 0x75761 = 0x75768,对吧?
【问题讨论】:
-
是的,顺便说一下,REX.W 是多余的。
-
谢谢!不幸的是,该代码位于客户的 x64 Windows 10 安装中,用于 user32.dll 函数之一。不知道该代码是如何到达那里的,因为它不是标准的 MS 代码。所以我必须为此做出调整。
-
您确定这是 64 位机器码吗?如果将其反汇编为 32 位代码,则
0x48字节将是dec或inc。 (dec eax我认为)。 -
是的,绝对是 64 位。该代码是从 64 位进程内部提取的。不能从 64 位进程调用 32 位 dll 函数。用户可能有一些非常旧的代码覆盖了 API。这是蹦床的东西之一。
-
@user118708 可以从 64 位进程调用 32 位代码,反之亦然,您必须进行远跳转才能更改模式,然后才能调用该进程。它不受官方支持,但你可以做到。
标签: assembly x86 x86-64 disassembly machine-code