硬编码(一)经典定长指令
- 创业
- 2025-08-29 00:36:01

硬编码概述
当一个程序编译完以后,它就转化成了二进制文件,其内部只有二进制数据,而这二进制数据可以分为数据和机器指令两个部分,它们都有各自的格式。在实际中,数据和机器指令并没有严格的区分,如果数据的格式是机器指令的格式,那么该数据也会被当做机器指令执行,但是会出错。其中机器指令就是硬编码。
逆向分析分为两个阶段: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位寄存器
硬编码(一)经典定长指令由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“硬编码(一)经典定长指令”