看课程可能是最简单的组成原理知识,可能对pwn帮助不大,权当复习吧
加 INC -编译器-> 0100 0000
减 DEC 0100 0100
乘 MUL 0100 1000 0100 1000
除 DIV 0100 1000 1100 1000
想法:运用自己的进制写编译器,来进行从根源加密
位运算加减乘除
用或与非异或实现加法
1.异或运算(如果不考虑进位,异或可以直接出结果)
2.与运算(用于判断进位,若结果为0(即所有数都为0),则没有进位)
3.将与运算的结果左移一位
4.第三步的结果和第一步的结果异或
5.确认结果,将第四步的两个数与运算,判断是否有0(判断是否有进位)
(步骤:
1.A xor B -> C
2.A and B -> D
3.if(D==0) print(C)
else D<<(D左移一位)
4.C xor D -> C
5.C and D -> D
6.if(D==0) print(C)
else D<<(D左移一位)
……
减法(转负数相加后走上面的步骤)
乘除就是按照组原的补码移位那一套使用加法就好了
汇编
1.最好从vc6开始学各种东西来了解底层
2.ollydbg
通用寄存器:
32位的通用寄存器只有8个
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
存值范围0-FFFFFFFF
16位:FFFF
AX
CX
DX
BX
SP
BP
SI
DI
8位:FF
AL
CL
DL
BL
AH
CH
DH
BH
8位:L低八位,H高八位
指令:
MOV:
mov 目的地址,立即数
mov 目的地址,取数地址
内存:
每个应用程序都有4GB的内存空间(可以理解为虚拟机的预设磁盘大小?虽然预设40G,但是虚拟机本身往往都没有40G)
说是二进制,但是对于内存,寄存器还有汇编的知识都不是很具体(不过比我的组原老师讲的好太多了)