emit指令分析
2021/7/28 23:10:52
本文主要是介绍emit指令分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、emit指令的作用
1.编译器不认识的指令,拆成机器码来写
2.插入垃圾字节来反跟踪,又称花指令
用emit就是在当前位置直接插入数据(实际上是指令),一般是用来直接插入汇编里面没有的特殊指令,多数指令可以用asm内嵌汇编来做,没有必要用emit来做,除非你不想让其它人看懂你的代码。
_EMIT伪指令相当于MASM中的DB,但一次只能定义一个字节
VC里面使用用的,与汇编里的DB一样。
VC里没有DD及DW之类的内联汇编指令,只有用这个_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
}
若是x86 的16bit, jmp只有短跳和长跳是以距离表示,比如
jmp short xxxx 机器码是 EB XX ;XX是相对距离,负值是跳前,正值是跳后
jmp xxxx 机器码是 E9 XX XX ;XX XX 是相对距离,负值是跳前,正值是跳后
其他的JMP就不以距离表示,比如
JMP 3000:100 机器码 EA00010030 ; EA后是段:偏移地址
JMP FAR [0200] 机器码 FF2E0002 ; FF 2E 后是内存地址
JMP FAR [EAX] 机器码 FF 28 ;没有地址FF 28本身就表示 JMP FAR [EAX]
https://www.cnblogs.com/sunt/archive/2010/11/25/1887657.html
https://tieba.baidu.com/p/5640387168?red_tag=1052818969
这篇关于emit指令分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南