_asm
{
call sub2
_emit 0xEB #emit就是在当前位置直接插入数据, 0xEB 对应的汇编指令是 jmp 指令
jmp label2
sub2:
add dword ptr[esp],1
retn
label2:
}
大概逻辑:call sub2函数 eip指向 0xeb, 后会将 eip 的值 push 入系统栈然后跳转到 sub2:[esp]也就是栈顶,栈顶的数值+1.所以reten之后直接执行jump labe12。
例子:
call指令和相应的函数以及call指令结束的下一字节都nop掉,变成