将JP / JNP汇编为C代码

时间:2011-09-11 06:52:48

标签: c assembly

2 个答案:

答案 0 :(得分:4)

这绝对是混淆代码。看看跳跃的目的地:

    jp      short near ptr loc_41FA2B+2
loc_41FA2B:
    mov     eax, 104E8B00h

请注意,跳转的目标是下一条指令的2个字节。这意味着您应该查看的实际指令开始输入两个字节。mov指令的机器代码为B8 00 8B 4E 10。如果跳过前两个字节,则为8B 4E 10。这个的反汇编是:

mov ecx,[esi+16]

jp指令之前的计算必须具有已知结果,以便使用正确的指令。由于NOPing失败,我将假设计算应该导致奇偶校验标志被设置。这意味着您可以通过NOPing jp指令和mov指令的前2个字节来获得正确的结果。

第二个片段是相同类型的事物,除了计算结果应该清除奇偶校验标志。跳过前两个字节后,反汇编为:

mov eax,[esi+28]

答案 1 :(得分:0)

英特尔文档说,如果设置了奇偶校验标志,jp会跳转。如果奇偶校验标志设置,则jnp跳转。如果前一条指令的结果的最低有效字节包含偶数个1位,则设置奇偶校验标志。

有关详细信息,请参阅英特尔订单号24319002。