1.程序在内存在如何存储?
二进制存储
进制运算:
8进制加法
用加法表
|
|
|
|
|
| |
1+2=3 | 2+2=4 |
|
|
|
|
|
1+3=4 | 2+3=5 | 3+3=6 |
|
|
|
|
1+4=5 | 2+4=6 | 3+4=7 | 4+4=10 |
|
|
|
1+5=6 | 2+5=7 | 3+5=10 | 4+5=11 | 5+5=12 |
|
|
1+6=7 | 2+6=10 | 3+6=11 | 4+6=12 | 5+6=13 | 6+6=14 |
|
1+7=10 | 2+7=11 | 3+7=12 | 4+7=13 | 5+7=14 | 6+7=15 | 7+7=16 |
乘法表
1*1=1 |
|
|
|
|
|
|
1*2=2 | 2*2=4 |
|
|
|
|
|
1*3=3 | 2*3=6 | 3*3=11 |
|
|
|
|
1*4=4 | 2*4=10 | 3*4=14 | 4*4=20 |
|
|
|
1*5=5 | 2*5=12 | 3*5=17 | 4*5=24 | 5*5=31 |
|
|
1*6=6 | 2*6=14 | 3*6=22 | 4*6=30 | 5*6=36 | 6*6=44 |
|
1*7=7 | 2*7=16 | 3*7=25 | 4*7=34 | 5*7=43 | 6*7=52 | 7*7=61 |
二进制与十六进制的映射
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F
二进制:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
2.从整体上了解一个EXE程序
任何一个在Windows上运行的可执行文件都要遵守一定的格式,这个格式就是PE文件结构,比如exe,dll,部分sys.
为什么要了解PE文件结构?
想要分析一个程序,那么有几件事情必须做:
第一:程序从哪里开始执行?
第二:代码存在哪里?
第三:数据存在哪里?
3.数据宽度和逻辑运算
一:数据宽度:由于受硬件的制约,数据都是有长度限制的(超过最多宽度的数据会被丢弃。)
二:4位宽度表示:(假设计算机只能存储4位2进制数){则最多能存16个数}
实例1:4位宽度表示:(假设计算机只能存储4位2进制数){则最多能存16个数}
(1).无符号数:0 1 2 3 4 5 6 7 8 9 A B C D E F
(2).有符号数:
实例2:8位宽度表示:(假设计算机只能存储8位2进制数)(2个16进制数){则最多能存256个数}
无符号数:0 1 2 3 4 5……FF(十进制255)
有符号数:
正数:0 1 2 3 4 5……7F
负数:-1 -2 -3 -4 -5……-128
FF FE FD FC FB……80
(三).几个重要的计量单位:
BYTE 字节 =8bit
WORD 字 =2字节=16bit
DWORD 双字=4字节=32bit
(四).逻辑运算
1011000101
or 1001100110
--------------------------
1011100111
(2).与(and &):两个都为1才是1
(3).异(xor ^): 不一样为1
(4).非(not !):!1是0,!0是1
逻辑运算的具体应用:
(1).cpu是如何计算2+3=?
容器X(存2):0010
容器Y(存3):0011 容器R(存异或的结果):0001
先来异或(xor)
0010
xor 0011
------------------
0001
如何确定上面计算是否结束(用 与&),然后让结果左移1位
0010
& 0011
------------------
0010
左移:(原来)0010 << 1(左移1位)==0100
若左移的结果为0000,则R中存的就是计算结果;否则把R赋值给X,把左移运算的结果赋值给Y
X:0001
Y:0100 R:0101
0001
xor 0100
------------------
0101
0001
& 0100
------------------
0000
0000 <<1==0000,所以运算结束,R:0101就是结果 (0101)2=(5)10
(2).如果想获取某一个值得第N位的值是多少?
如:8F(想知道它的第4位,是0还是1)
10001111
and 00001000
------------------------
10001111
所以第4位是1
(3).最简单的加密算法(异或^ ):
要加密的数据:(2015)16
密钥:(54)16(两位密钥,所以两位两位的加密) 54:01010100
加密过程:
20 15
00100000 00010101
^ 01010100 ^ 01010100
--------------------- -------------------------------
01110100 01000001
加密后的结果: 74 41
解密过程:
74 41
01110100 01000001
^ 01010100 ^ 01010100
--------------------- -------------------------------
00100000 00010101
解密后的结果: 20 15