emit指令的作用:
- 编译器不认识的指令,拆成机器码来写。
- 插入垃圾字节来反跟踪,又称花指令。
用emit就是在当前位置直接插入数据(实际上是指令),一般是用来直接插入汇编里面没有的特殊指令,多数指令可以用asm内嵌汇编来做,没有必要用emit来做,除非你不想让其它人看懂你的代码。
_emit是伪指令
一个简单的例子
int main() {
__asm{
_emit 0xEA
_emit 0xAA
_emit 0xAA
_emit 0xAA
_emit 0xAA
_emit 0x08
_emit 0x0
}
return 0;
}
相当于
__asm
{
jmp FAR 0x08:0xAAAAAAAA
}
打开编译后的可执行文件的二进制流,可以看到数据直接插入在指令中,被当作机器码执行。