3

我在一个名为DM2的开源 Windows 工具中看到了以下代码。

#define OEP_ASM __asm jmp OEP \
__asm _emit 0x5B __asm _emit 0x66 __asm _emit 0x6C \
__asm _emit 0x79 __asm _emit 0x66 __asm _emit 0x61 \
__asm _emit 0x6E __asm _emit 0x63 __asm _emit 0x79 \
__asm _emit 0x26 __asm _emit 0x57 __asm _emit 0x65 \
__asm _emit 0x69 __asm _emit 0x72 __asm _emit 0x64 \
__asm _emit 0x5D __asm _emit 0x00 __asm OEP: 

没有评论和搜索互联网我仍然不明白这是做什么的?!MSDN只是告诉我这会将字节插入代码中。我明白这一点,但我不明白这些字节的作用,它看起来不像指令。

谁能解释一下,或者至少指出我正确的方向,插入字节实际上做了什么?

4

2 回答 2

7

事实上,这不是代码,它只是一个字符串。可能出于混淆目的而像这样发出。

$ echo $'\x5B\x66\x6C\x79\x66\x61\x6E\x63\x79\x26\x57\x65\x69\x72\x64\x5D'
[flyfancy&Weird]

或者它可能必须嵌入到代码部分中,而内联 asm 没有提供这样做的方法。还要注意第一条指令跳过了整个字符串。

于 2013-10-07T11:07:41.393 回答
3

它只是[flyfancy&Weird]嵌入到代码中的以 null 结尾的 ASCII 字符串(正如评论所建议的那样)。该jmp OEP指令跳过该字符串。

于 2013-10-07T11:10:39.760 回答