diff --git a/README.md b/README.md
index 9211b76..19358ae 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
- [一、基础知识篇](doc/1_basic.md)
- [1.1 ctf 介绍](doc/1.1_ctf.md)
- - [1.2 打造虚拟机](doc/1.2_vm.md)
+ - [1.2]
- [1.3 Linux基础](doc/1.3_linux_basic.md)
- [1.4 Web 安全基础](doc/1.4_web_basic.md)
- [1.5 逆向工程基础](doc/1.5_reverse_basic.md)
@@ -12,14 +12,20 @@
- [1.5.4 Windows PE](doc/1.5.4_pe.md)
- [1.5.5 静态链接](doc/1.5.5_static_link.md)
- [1.5.6 动态链接](doc/1.5.6_dynamic_link.md)
+ - [1.5.7 内存与虚拟内存](doc/1.5.7_memory.md)
+ - [1.6 密码学基础](doc/1.6_crypto_basic.md)
+ - [1.7 Android安全基础](doc/1.7_android_basic.md)
- [二、工具篇](doc/2_tools.md)
- - [2.1 gdb/peda](doc/2.1gdb&peda.md)
- - [2.2 ollydbg](doc/2.2_ollydbg.md)
- - [2.3 windbg](doc/2.3_windbg.md)
- - [2.4 radare2](doc/2.4_radare2.md)
- - [2.5 IDA Pro](doc/2.5_idapro.md)
- - [2.6 pwntools](doc/2.6_pwntools.md)
+ - [2.1 VM](doc/2.1_vm.md)
+ - [2.1 gdb/peda](doc/2.2_gdb&peda.md)
+ - [2.2 ollydbg](doc/2.3_ollydbg.md)
+ - [2.3 windbg](doc/2.4_windbg.md)
+ - [2.4 radare2](doc/2.5_radare2.md)
+ - [2.5 IDA Pro](doc/2.6_idapro.md)
+ - [2.6 pwntools](doc/2.7_pwntools.md)
+ - [2.8 zio](doc/2.8_zio.md)
+ - [2.9 metasploit](doc/2.9_metasploit.md)
- [三、分类专题篇](doc/3_topics.md)
- [3.1 Reverse](doc/3.1_reverse.md)
@@ -32,6 +38,7 @@
- [四、技巧篇](doc/4_tips.md)
- [五、高级篇](doc/5_advanced.md)
+ - [5.1 Fuzz 测试](doc/5.1_fuzz.md)
- [六、附录](doc/6_appendix.md)
- [6.1 更多 Linux 工具](doc/6.1_Linuxtools.md)
diff --git a/doc/1.3_linux_basic.md b/doc/1.3_linux_basic.md
index eb126ce..892e0a9 100644
--- a/doc/1.3_linux_basic.md
+++ b/doc/1.3_linux_basic.md
@@ -1,6 +1,9 @@
# Linux 基础
-## 常用基础命令
+- [常用基础命令](#command)
+- [字节序](#order)
+
+## 常用基础命令
```text
ls 用来显示目标列表
@@ -27,3 +30,17 @@ nano / vim / emacs 字符终端的文本编辑器
```text
管道命令符 "|" 将一个命令的标准输出作为另一个命令的标准输入
```
+
+
+## 字节序
+目前计算机中采用两种字节存储机制:大端(Big-endian)和小端(Little-endian)。
+
+>MSB (Most Significan Bit/Byte):最重要的位或最重要的字节。
+>
+>LSB (Least Significan Bit/Byte):最不重要的位或最不重要的字节。
+
+Big-endian 规定 MSB 在存储时放在低地址,在传输时放在流的开始;LSB 存储时放在高地址,在传输时放在流的末尾。Little-endian 则相反。常见的 Intel 处理器使用 Little-endian,而 PowerPC 系列处理器则使用 Big-endian,另外 TCP/IP 协议和 Java 虚拟机的字节序也是 Big-endian。
+
+例如十六进制整数 0x12345678 存入以 1000H 开始的内存中:
+
+![](../pic/1.3_byte_order.png)
diff --git a/doc/1.5.1_c_basic.md b/doc/1.5.1_c_basic.md
index 28da748..e08018e 100644
--- a/doc/1.5.1_c_basic.md
+++ b/doc/1.5.1_c_basic.md
@@ -1 +1,52 @@
# C 语言基础
+
+## 从源代码到可执行文件
+我们以经典著作《The C Programming Language》中的第一个程序 “Hello World” 为例,讲解 Linux 下 GCC 的编译过程。
+
+```c
+#include
+main()
+{
+ printf("hello, world\n");
+}
+```
+
+```text
+$gcc hello.c
+$./a.out
+hello world
+```
+
+以上过程可分为4个步骤:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
+
+![](../pic/1.5.1_compile.png)
+
+### 预编译
+```text
+$gcc -E hello.c -o hello.i
+```
+
+预编译过程主要处理源代码中以 “#” 开始的预编译指令:
+- 将所有的 “#define” 删除,并且展开所有的宏定义。
+- 处理所有条件预编译指令,如 “#if”、“#ifdef”、“#elif”、“#else”、“#endif”。
+- 处理 “#include” 预编译指令,将被包含的文件插入到该预编译指令的位置。注意,该过程递归执行。
+- 删除所有注释。
+- 添加行号和文件名标号。
+- 保留所有的 #pragma 编译器指令。
+
+### 编译
+```text
+$gcc -S hello.c -o hello.s
+```
+编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。
+
+### 汇编
+```text
+$gcc -c hello.s -o hello.o
+或者
+$gcc -c hello.c -o hello.o
+```
+汇编器将汇编代码转变成机器可以执行的指令。
+
+### 链接
+目标文件需要链接一大堆文件才能得到最终的可执行文件。链接过程主要包括地址和空间分配(Address and Storage Allocation)、符号决议(Symbol Resolution)和重定向(Relocation)等。
diff --git a/doc/1.5.7_memory.md b/doc/1.5.7_memory.md
new file mode 100644
index 0000000..4cb6b34
--- /dev/null
+++ b/doc/1.5.7_memory.md
@@ -0,0 +1 @@
+# 内存与虚拟内存
diff --git a/doc/1.6_crypto_basic.md b/doc/1.6_crypto_basic.md
new file mode 100644
index 0000000..57dc05f
--- /dev/null
+++ b/doc/1.6_crypto_basic.md
@@ -0,0 +1 @@
+# 密码学基础
diff --git a/doc/1.7_android_basic.md b/doc/1.7_android_basic.md
new file mode 100644
index 0000000..2c724cc
--- /dev/null
+++ b/doc/1.7_android_basic.md
@@ -0,0 +1 @@
+# Android 安全基础
diff --git a/doc/1_basic.md b/doc/1_basic.md
index 5c6e859..94b6414 100644
--- a/doc/1_basic.md
+++ b/doc/1_basic.md
@@ -1,7 +1,7 @@
# 第一章 基础知识篇
- [1.1 CTF 介绍](1.1_ctf.md)
-- [1.2 打造虚拟机](1.2_vm.md)
+- [1.2 打造虚拟机](2.1_vm.md)
- [1.3 Linux基础](1.3_linux_basic.md)
- [1.5 逆向工程基础](1.5_reverse_basic.md)
- [1.5.1 C语言基础](1.5.1_c_basic.md)
@@ -10,3 +10,4 @@
- [1.5.4 Windows PE](1.5.4_pe.md)
- [1.5.5 静态链接](1.5.5_static_link.md)
- [1.5.6 动态链接](1.5.6_dynamic_link.md)
+ - [1.5.7 内存与虚拟内存](1.5.7_memory.md)
diff --git a/doc/1.2_vm.md b/doc/2.1_vm.md
similarity index 100%
rename from doc/1.2_vm.md
rename to doc/2.1_vm.md
diff --git a/doc/2.1gdb&peda.md b/doc/2.2_gdb&peda.md
similarity index 100%
rename from doc/2.1gdb&peda.md
rename to doc/2.2_gdb&peda.md
diff --git a/doc/2.2_ollydbg.md b/doc/2.3_ollydbg.md
similarity index 100%
rename from doc/2.2_ollydbg.md
rename to doc/2.3_ollydbg.md
diff --git a/doc/2.3_windbg.md b/doc/2.4_windbg.md
similarity index 100%
rename from doc/2.3_windbg.md
rename to doc/2.4_windbg.md
diff --git a/doc/2.4_radare2.md b/doc/2.5_radare2.md
similarity index 100%
rename from doc/2.4_radare2.md
rename to doc/2.5_radare2.md
diff --git a/doc/2.5_idapro.md b/doc/2.6_idapro.md
similarity index 77%
rename from doc/2.5_idapro.md
rename to doc/2.6_idapro.md
index b423c99..dabd2aa 100644
--- a/doc/2.5_idapro.md
+++ b/doc/2.6_idapro.md
@@ -1,6 +1,9 @@
# 2.5 IDA Pro
-#### 内存 dump 脚本
+- [内存 dump 脚本](#dump)
+
+
+#### 内存 dump 脚本
调试程序时偶尔会需要 dump 内存,但 IDA Pro 没有直接提供此功能,可以通过脚本来实现。
```python
import idaapi
diff --git a/doc/2.6_pwntools.md b/doc/2.7_pwntools.md
similarity index 100%
rename from doc/2.6_pwntools.md
rename to doc/2.7_pwntools.md
diff --git a/doc/2.8_zio.md b/doc/2.8_zio.md
new file mode 100644
index 0000000..d57e34f
--- /dev/null
+++ b/doc/2.8_zio.md
@@ -0,0 +1 @@
+# Zio
diff --git a/doc/2.9_metasploit.md b/doc/2.9_metasploit.md
new file mode 100644
index 0000000..6aa60c3
--- /dev/null
+++ b/doc/2.9_metasploit.md
@@ -0,0 +1 @@
+# MetaSploit
diff --git a/doc/2_tools.md b/doc/2_tools.md
index c8e7179..6499a2f 100644
--- a/doc/2_tools.md
+++ b/doc/2_tools.md
@@ -1,8 +1,8 @@
# 第二章 工具篇
-- [2.1 gdb/peda](2.1gdb&peda.md)
-- [2.2 ollydbg](2.2_ollydbg.md)
-- [2.3 windbg](2.3_windbg.md)
-- [2.4 radare2](2.4_radare2.md)
-- [2.5 IDA Pro](2.5_idapro.md)
-- [2.6 pwntools](2.6_pwntools.md)
+- [2.1 gdb/peda](2.2_gdb&peda.md)
+- [2.2 ollydbg](2.3_ollydbg.md)
+- [2.3 windbg](2.4_windbg.md)
+- [2.4 radare2](2.5_radare2.md)
+- [2.5 IDA Pro](2.6_idapro.md)
+- [2.6 pwntools](2.7_pwntools.md)
diff --git a/doc/5.1_fuzz.md b/doc/5.1_fuzz.md
new file mode 100644
index 0000000..0ebbd21
--- /dev/null
+++ b/doc/5.1_fuzz.md
@@ -0,0 +1 @@
+# Fuzz 测试
diff --git a/doc/5_advanced.md b/doc/5_advanced.md
index 864d78c..2624c72 100644
--- a/doc/5_advanced.md
+++ b/doc/5_advanced.md
@@ -1 +1,3 @@
# 第五章 高级篇
+
+- [5.1 Fuzz 测试](doc/5.1_fuzz.md)
diff --git a/doc/6.1_Linuxtools.md b/doc/6.1_Linuxtools.md
index a00c857..e7c7de2 100644
--- a/doc/6.1_Linuxtools.md
+++ b/doc/6.1_Linuxtools.md
@@ -2,6 +2,7 @@
- [file](#file)
- [edb](#edb)
+- [ldd](#ldd)
- [ltrace](#ltrace)
- [md5sum](#md5sum)
- [objdump](#objdump)
@@ -19,6 +20,10 @@
**edb**是一个同时支持x86、x86-64的调试器。它主要向 OllyDbg 工具看齐,并可通过插件体系进行功能的扩充。
+## ldd
+用于打印程序或者库文件所依赖的共享库列表。
+
+
## ltrace
**ltrace**命令用于跟踪进程调用库函数的情况。
@@ -118,7 +123,7 @@ ssdeep -bm hash.txt modified.elf
#### 重要参数
```text
--d --data Only scan the data sections in the file
+-a --all Scan the entire file, not just the data section [default]
-t --radix={o,d,x} Print the location of the string in base 8, 10 or 16
-e --encoding={s,S,b,l,B,L} Select character size and endianness:
s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
diff --git a/pic/1.3_byte_order.png b/pic/1.3_byte_order.png
new file mode 100644
index 0000000..666b9a4
Binary files /dev/null and b/pic/1.3_byte_order.png differ
diff --git a/pic/1.5.1_compile.png b/pic/1.5.1_compile.png
new file mode 100644
index 0000000..83e5ac1
Binary files /dev/null and b/pic/1.5.1_compile.png differ