我尝试理解《实用恶意软件分析》一书中Michael Sikorski的一个例子。其中有一个关于反汇编技术的例子我不是很理解。它说一个常见的技巧是创建两个条件指令,即跳转如果为零(JZ)和跳转如果不为零(JNZ),这两个指令结合起来实际上只是一个无条件指令(这对我来说很清楚)。下面是反汇编器创建的两种可能结果的图形。
以下引用涉及图 1:
“在这个例子中,紧随两条条件跳转指令之后的指令似乎是一个以 0xE8 字节开头的调用指令(call)。然而,事实并非如此,因为两条条件跳转指令实际上指向了 0xE8 字节之后的第 1 个字节。”
这是说,在这个例子中,两个条件跳转指令实际上跳过了一个字节,从而将目标地址指向了紧随其后的 call 指令。其中,jump location loc_4011C4+1 表示目标地址在 loc_4011C4 的基础上再加上 1 个字节,而在图 2 中,目标地址为 loc_4011C5。
希望这能对你有所帮助。
“在这个例子中,紧随两条条件跳转指令之后的指令似乎是一个以 0xE8 字节开头的调用指令(call)。然而,事实并非如此,因为两条条件跳转指令实际上指向了 0xE8 字节之后的第 1 个字节。”
这是说,在这个例子中,两个条件跳转指令实际上跳过了一个字节,从而将目标地址指向了紧随其后的 call 指令。其中,jump location loc_4011C4+1 表示目标地址在 loc_4011C4 的基础上再加上 1 个字节,而在图 2 中,目标地址为 loc_4011C5。
希望这能对你有所帮助。