当前位置: 首页 > news >正文

硬编码(一)经典定长指令

硬编码概述

当一个程序编译完以后,它就转化成了二进制文件,其内部只有二进制数据,而这二进制数据可以分为数据和机器指令两个部分,它们都有各自的格式。在实际中,数据和机器指令并没有严格的区分,如果数据的格式是机器指令的格式,那么该数据也会被当做机器指令执行,但是会出错。其中机器指令就是硬编码。

逆向分析分为两个阶段:1.C代码和汇编的转换。2.汇编和硬编码的转换。因此要想学习好逆向分析的第二个阶段,就需要好好学习硬编码

在我们常用的软件,如VS,IDA,都可以将我们所写的代码翻译成汇编代码,而这都是由软件自带的反汇编引擎将硬编码转化成汇编代码而实现的。

硬编码的格式如下图所示,其由六部分组成,本质上取决于计算机的CPU类型:

通常不同的硬编码的字节数都有所不同,其组成部分也不同,主要取决于该硬编码实现的功能,但必须有Opcode部分,字节数在1-15之间浮动

经典定长指令

接下来我们观察一个汇编代码:PUSH EAX,其中PUSH为操作码,EAX为操作数,这是最简单的汇编代码,同样由最简单的一字节的硬编码相对应:50

接下来我们将列举常见的经典定长指令:

//INC/DEC
//INC:加1,DEC:减1
40: INC EAX
41: INC ECX
42: INC EDX
43: INC EBX
44: INC ESP
45: INC EBP
46: INC ESI
47: INC EDI
48: DEC EAX
49: DEC ECX
4A: DEC EDX
4B: DEC EBX
4C: DEC ESP
4D: DEC EBP
4E: DEC ESI
4F: DEC EDI

//PUSH/POP
//PUSH:压栈;POP:出堆
50: PUSH EAX
51: PUSH ECX
52: PUSH EDX
53: PUSH EBX
54: PUSH ESP
55: PUSH EBP
56: PUSH ESI
57: PUSH EDI
58: POP EAX
59: POP ECX
5A: POP EDX
5B: POP EBX
5C: POP ESP
5D: POP EBP
5E: POP ESI
5F: POP EDI

//MOV Rb, XX
//MOV:数据传送。
B0 XX: MOV AL, XX
B1 XX: MOV CL, XX
B2 XX: MOV DL, XX
B3 XX: MOV BL, XX
B4 XX: MOV AH, XX
B5 XX: MOV CH, XX
B6 XX: MOV DH, XX
B7 XX: MOV BH, XX
B8 XX: MOV EAX, XX
B9 XX: MOV ECX, XX
BA: MOV EDX, XX
BB: MOV EBX, XX
BC: MOV ESP, XX
BD: MOV EBP, XX
BE: MOV ESI, XX
BF: MOV EDI, XX

//XCHG EAX, ERX
//XCHG:内容交换
//只有EAX可以和其他寄存器交换
90: NOP(XCHG EAX, EAX)
91: XCHG EAX, ECX
92: XCHG EAX, EDX
93: XCHG EAX, EBX
94: XCHG EAX, ESP
95: XCHG EAX, EBP
96: XCHG EAX, ESI
97: XCHG EAX, EDI

经典定长指令要背会!!

注意:在32位程序下,寄存器只有8位和32位两种类型。通过在指令前添加前缀的方式,在不改变指令的情况下,可以将32位寄存器切换成16位寄存器,同样的方式可以将16位寄存器切换成8位寄存器

 

http://www.dtcms.com/a/26299.html

相关文章:

  • 用Deepseek查询快证API-物流查询-实名认证-企业实名认证
  • layui 远程搜索下拉选择组件(多选)
  • PCL AlphaShape算法曲面重建
  • 如何查询网站是否被百度蜘蛛收录?
  • 路由基础 | 路由引入实验 | 不同路由引入方式存在的问题
  • CF1801D
  • DateFormat与日期处理
  • CRTP在项目优化中的使用
  • Compose常用UI组件
  • WIN系统服务器如何修改远程端口?
  • Spring Bean 生命周期
  • 14 命令(Command)模式
  • 【STM32H743IIT6】正点原子阿波罗TFTLCD移植
  • C# ConcurrentQueue 使用详解
  • 14-二叉树最小深度-广度优先(BFS)
  • 帆软报表FineReport入门:简单报表制作[扩展|左父格|上父格]
  • Coze插件之基于IDE创建插件
  • 八股文-C++语言部分
  • 意图识别概述
  • 剑指 Offer II 024. 反转链表
  • 【Day44 LeetCode】图论问题 Ⅱ
  • javaSE学习笔记23-线程(thread)-总结
  • 伪类选择器
  • 修改项目的一些前端记录(自用)
  • JavaScript中判断元素是否在可视区域内
  • linux有名管道的文件描述符3和4
  • 个人简历html网页模板,科技感炫酷html简历模板
  • DeepSeek API调用 Python
  • Hive中的分区和桶的概念及其作用
  • 网络工程师 (47)QOS