首页
社区
课程
招聘
[原创]硬编码
2021-5-13 06:48 3812

[原创]硬编码

2021-5-13 06:48
3812

硬编码

前言

    该文章主要是包含了X86硬编码的基本概念。主要用作复习使用。所谓的硬编码在我看来就是CPU用什么样的方法来读取理解我们计算机当中的0,1。即不同的CPU有他们不同的方法来理解0,1的含义。这些方法就是所谓的硬编码。比如:X86CPU和ARM的硬编码就不一样 。如下图为X86硬编码结构图: 

一;前缀指令(Instruction Prefixes)

    前缀指令是可选的指令,可以为0个,其主要分为四组。也就是说,前缀指令最多只有四个且每组前缀指令只能有一个。

1.1;LOCK 和 REPEAT前缀指令

指令硬编码注释
LOCKF0
REPNE/REPNZF2
REP/REPZF3

1.2;段前缀指令

指令硬编码注释
CS2E
SS36
DS3E
ES26
FS64
GS65

1.3;操作数宽度前缀指令

指令硬编码注释

66改变操作数的默认位(16bit和32bit 切换)



1.4;地址宽度前缀指令

指令硬编码注释

67改变默认寻址宽度(16bit和32bit 切换)



二;定长指令和可变长指令

    定长指令是指出去前缀指令之后,指令的长度是不变的,与其相反可变的就是可变长指令。其中Opcode 位最少1个字节,最多3个字节。且Opcode决定了后续是否存在ModR/M,并且ModR/M决定了后面是否存在SIM。

2.1;经典定长指令

“5”系列的定长指令(一个字节硬编码)

指令硬编码指令硬编码
PUSH EAX0X50POP EAX0X58
PUSH ECX0X51POP ECX0X59
PUSH EDX0X52POP EDX0X5A
PUSH EBX0X53POP EBX0X5B
PUSH ESP0X54POP ESP0X5C
PUSH EBP0X55POP EBP0X5D
PUSH ESI0X56POP ESI0X5E
PUSH EDI0X57POP EDI0X5F






[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2021-5-17 20:46 被天象独行编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (2)
雪    币: 2421
活跃值: (2277)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
gtict 2021-5-13 09:58
2
0
期待大佬好文
雪    币: 299
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
QZ2019 2021-8-14 15:15
3
0
定长没什么好多的,主要是变长
游客
登录 | 注册 方可回帖
返回