1.0.0 Summary
Tittle:【Assembly】-NO.88.Assembly.2.滴水逆向.1.002-【】-
Style:Java
Series:Log4j
Since:2018-02-09
End:2018-02-09
Total Hours:30+
Degree Of Diffculty:5
Degree Of Mastery:5
Practical Level:5
Desired Goal:5
Archieve Goal:3
Gerneral Evaluation:3
Writer:kingdelee
Related Links:
http://www.cnblogs.com/kingdelee/
1.进制的理解
3进制:
7进制:
2.进制的转换
2.1
八进制 +-*/ 1.加法---------------------------------- 277 + 333 ----------------- 7+3:12 ------进1,留2 ----------------- 7+3+1:13 ------加上前一个进1计算,仍旧进1,留3 ----------------- 2+3+1:6 ------留6 ----------------- 632 ------以上留位拼接 2.减法---------------------------------- 236 - 54 ----------------- 6-4:2 ------留2 ----------------- 3-5:6 ------借1位,即3+8=11,11-5=6,留6 ----------------- 2-1:1 ------被借1,即2-1=1. ----------------- 162 ------结果 3.乘法---------------------------------- 276 * 54 ----------------- 6*4=30 ------6+6=14+6=22+6=30,进3留0; 另一种算法:10:6*4=24, 24/8=3, 24+(24/8)*(10-8)=30;6+6=14+6=22+6=30 ----------------- 4*7+3=37 ------7+7=16+7=25+7=34,34+3=37,进3留7 ----------------- 4*2+3=15 ------4+4=10,10+3=13, 进1留3 ----------------- 1370 到276*5了; ----------------- 6*5=36 -------6+6=14+6=22+6=30+6=36 ----------------- 7*5+3=46 -------7+7=16+7=25+7=34+7=43,43+3=46 ----------------- 5*2+4=16 -------5+5=12+4=16 ----------------- 1666 1370 + 1666 ----------------- 0 ----------------- 6+7=15 ----------------- 3+6+1=12 ----------------- 1+6+1=10 ----------------- 1+1=2 ----------------- 20250 4.除法---------------------------------- 234 / 4 ----------------- 反推:4+4=10+4=14+4=20, x=20<23<20+4=24,所以 得4余3 ----------------- 反推:20+4=24+4=30+4=34 所以,得7整除 ----------------- 47 -----------------
3.16进制是2进制的简写形式
从0写到1111
EE,BE,96即
1111 1111,1011 1111, 1001 0110
4.计算机宽度
5.无符号数
6.有符号数
有符号数,为正数时,和无符号数规则一样
为负数时,
假设数据宽度为1 byte(8 bit)
假设数据宽度为 Doubleword(32Bit)
计算机是通过位运算实现 所有计算
4+5 的运算过程 ----------------------------- 0000 0100 0000 0101 + --------- 0000 1001 ----------------------------- 1)先得到异或结果,临时性的 0000 0100 ---------# 1.1 0000 0101 ---------# 1.2 异或 --------- 0000 0001 ---------# 1.3 2)再通过与运算 判断是否有进位 如果没有进位的情况下,异或的结果与加的结果一样 如果有进位,拿异或的结果与与的结果继续 异或 0000 0100 0000 0101 与 --------- 0000 0100 ---------# 1.4 有1应进位: 0000 1000 ---------#1.4 -> #1.5 结果 存在1不全是0,说明有进位 拿此结果与异或的结果相加 3)继续异或 拿异或的结果和与的结果 继续异或 0000 0001 --------- $ 1.3 0000 1000 --------- $ 1.5 异或 --------- 0000 1001 4) 判断3)的与 是否有进位 0000 0001 --------- $ 1.3 0000 1000 --------- $ 1.5 与 --------- 0000 0000 结果 全是0,没有进位。 则异或的结果就是按位加的最终结果 4-5 的运算过程 ----------------------------- 即 4+(-5) -5: 原码:1000 0101 反码:1111 1010 补码:1111 1011 用补码进行计算 1) 0000 0100 1111 1011 异或 --------- 1111 1111 2) 0000 0100 1111 1011 与 --------- 0000 0000 没有进位,异或的结果就是按位加的结果 即 4+(-5) 结果 16进制:FF,10进制 -1, 2进制:1111 1111 ----------------------------- x*y 乘法的本质 就是y个x相加 x/y 除法的本质 就是x能减去?个y -------------------------------------------------------------------
ollydbg:
反汇编窗口-寄存器
内存窗口-堆栈
--------------------------------------------------------------
寄存器
mov 指令
mov eax,1
mov ebx,1
1.立即数到内存
mov byte ptr ds:[内存地址], 1
mov指令: 1.立即数到内存 2.寄存器到内存 3.内存到寄存器 1.立即数到内存 mov byte ptr ds : [0019FF99], 0x12 mov word ptr ds : [0019FF99], 0x1234 mov dword ptr ds : [0019FF99], 0x12345678 2.寄存器到内存 mov dword ptr ds : [0019FF99], EAX mov word ptr ds : [0019FF99], AX mov byte ptr ds : [0019FF99], AL 3.内存到寄存器 mov eax, dword ptr ds : [0019FF99] tip:每个编号对应的是一个字节 读取内存的值 mov eax, dword ptr ds: [0019FF99] 向内存中写入数据 mov dword ptr ds:[0019FF99], eax 内存地址的5种表示形式: 1. [0x13FFC4] 2. [EAX] mov dword ptr ds : [EAX], 0x12345678 3. [reg + 立即数] 读取内存的值: mov ecx, 0x13FFD0 mov eax, dword ptr ds:[ecx + 4] 向内存中写入数据: mov edx, 0x13FFD8 mov dword ptr ds:[edx+0xC], 0x87654321 4. [reg + reg*{1,2,4,8}] 读取内存的值 mov eax, 13FFC4 mov ecx, 2 mov edx, dword ptr ds:[eax + ecx * 4] 向内存中写入数据: mov eax, 13FFC4 mov ecx, 2 mov dword ptr ds:[eax + ecx*4], 87654321 5. [reg + reg*{1,2,4,8} + 立即数] 读取内存的值 mov eax, 13FFC4 mov ecx, 2 mov edx, dword ptr ds:[EAX + ECX*4 + 4] 向内存中写入数据: mov eax, 13FFC4 mov ecx, 2 mov dword ptr ds:[eax + ecx*4 + 4], 87654321
存储模式
查看内存地址
db 内存地址,一个字节
dw 内存地址,看两个字节
dd 内存地址,四个字节看
add eax, ecx