答案 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。