有谁知道这个C ++内联汇编有什么作用?

时间:2013-10-07 11:01:08

标签: c++ assembly inline-assembly

我在名为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只是告诉我这会在代码中插入字节。我理解这一点,但我不明白这些字节是做什么的,它看起来不像说明。

任何人都可以解释,或者至少指出我在插入字节实际上做的正确方向吗?

2 个答案:

答案 0 :(得分:7)

确实这不是代码,它只是一个字符串。为了混淆目的,可能会像这样发出。

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

或许它必须嵌入代码部分并且内联asm不提供这样做的方法。另请注意,第一条指令会跳过整个字符串。

答案 1 :(得分:3)

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