diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md
index ea42b0b..4bc05cc 100644
--- a/CONTRIBUTION.md
+++ b/CONTRIBUTION.md
@@ -18,7 +18,7 @@
├── pic
│ ├── 1.3_byte_order.png
├── README.md
-└── source
+└── src
├── Crypto
├── Misc
├── Pwn
@@ -32,7 +32,7 @@
- `CONTRIBUTION.md`:合作与贡献的相关内容。
- `doc`:该文件夹包含书全部内容的 Markdown 文件。(文字)
- `pic`:该文件夹包含所有 Markdown 中引用的所有图片文件。(图片)
-- `source`:该文件夹包含书中示例和练习的二进制文件或源代码,分专题保存。(代码)
+- `src`:该文件夹包含书中示例和练习的二进制文件或源代码,分专题保存。(代码)
##### 注意事项
- 在开始编写某一个内容之前,请先在下面的表格里注明,以避免重复和冲突。如果是已经完成的章节,则可以直接进行修改。
diff --git a/README.md b/README.md
index 928ad84..219d377 100644
--- a/README.md
+++ b/README.md
@@ -38,6 +38,7 @@
- [四、技巧篇](doc/4_tips.md)
- [4.1 AWD模式](doc/4.1_AWD.md)
+ - [4.2 Linux 命令行技巧](doc/4.2_Linux_terminal_tips.md)
- [五、高级篇](doc/5_advanced.md)
- [5.1 Fuzz 测试](doc/5.1_fuzz.md)
diff --git a/doc/1.3_linux_basic.md b/doc/1.3_linux_basic.md
index 892e0a9..dc2560d 100644
--- a/doc/1.3_linux_basic.md
+++ b/doc/1.3_linux_basic.md
@@ -1,9 +1,11 @@
# Linux 基础
-- [常用基础命令](#command)
-- [字节序](#order)
+- [常用基础命令](#常用基础命令)
+- [字节序](#字节序)
+- [输入输出](#输入输出)
-## 常用基础命令
+
+## 常用基础命令
```text
ls 用来显示目标列表
@@ -32,7 +34,7 @@ nano / vim / emacs 字符终端的文本编辑器
```
-## 字节序
+## 字节序
目前计算机中采用两种字节存储机制:大端(Big-endian)和小端(Little-endian)。
>MSB (Most Significan Bit/Byte):最重要的位或最重要的字节。
@@ -44,3 +46,15 @@ Big-endian 规定 MSB 在存储时放在低地址,在传输时放在流的开
例如十六进制整数 0x12345678 存入以 1000H 开始的内存中:
![](../pic/1.3_byte_order.png)
+
+
+## 输入输出
+- 使用命令的输出作为可执行文件的输入参数
+ - ```$ ./vulnerable 'your_command_here'```
+ - ```$ ./vulnerable $(your_command_here)```
+- 使用命令作为输入
+ - ```$ your_command_here | ./vulnerable```
+- 将命令行输出写入文件
+ - ```$ your_command_here > filename```
+- 使用文件作为输入
+ - ```$ ./vulnerable < filename```
diff --git a/doc/1.5.1_c_basic.md b/doc/1.5.1_c_basic.md
index 25da7a0..d32b884 100644
--- a/doc/1.5.1_c_basic.md
+++ b/doc/1.5.1_c_basic.md
@@ -1,8 +1,8 @@
# C 语言基础
-- [从源代码到可执行文件](#compile)
+- [从源代码到可执行文件](#从源代码到可执行文件)
-## 从源代码到可执行文件
+## 从源代码到可执行文件
我们以经典著作《The C Programming Language》中的第一个程序 “Hello World” 为例,讲解 Linux 下 GCC 的编译过程。
```c
diff --git a/doc/4.2_Linux_terminal_tips.md b/doc/4.2_Linux_terminal_tips.md
new file mode 100644
index 0000000..89cbfd1
--- /dev/null
+++ b/doc/4.2_Linux_terminal_tips.md
@@ -0,0 +1,9 @@
+# Linux 命令行技巧
+
+- [重定向输入字符](#重定向输入字符)
+
+
+## 重定向输入字符
+有时候我们需要在 shell 里输入键盘上没有对应的字符,如 `0x1F`,就需要使用重定向输入。下面是一个例子:[源码](../src/Others/4.2_0x1f.c)
+
+![](../pic/4.2_0x1f.png)
diff --git a/doc/6.1_Linuxtools.md b/doc/6.1_Linuxtools.md
index b694d60..63d3754 100644
--- a/doc/6.1_Linuxtools.md
+++ b/doc/6.1_Linuxtools.md
@@ -171,9 +171,9 @@ strings [executable] | grep -i upx
```
#### 练习
-[strings_crackme](../source/Reverse/strings_crackme)
+[strings_crackme](../src/Reverse/strings_crackme)
-[flag_pwnablekr](../source/Reverse/flag_pwnablekr)
+[flag_pwnablekr](../src/Reverse/flag_pwnablekr)
## xxd
@@ -193,4 +193,4 @@ xxd -g1
```
#### 练习
-[xxd_crackme](../source/Reverse/xxd_crackme) (使用 *strings* 再做一次)
+[xxd_crackme](../src/Reverse/xxd_crackme) (使用 *strings* 再做一次)
diff --git a/pic/4.2_0x1f.png b/pic/4.2_0x1f.png
new file mode 100644
index 0000000..a7f4b7c
Binary files /dev/null and b/pic/4.2_0x1f.png differ
diff --git a/src/Others/4.2_0x1f.c b/src/Others/4.2_0x1f.c
new file mode 100644
index 0000000..27fa408
--- /dev/null
+++ b/src/Others/4.2_0x1f.c
@@ -0,0 +1,14 @@
+#include
+#include
+void main() {
+ char data[8];
+ char str[8];
+ printf("请输入十六进制为 0x1f 的字符: ");
+ sprintf(str, "%c", 31);
+ scanf("%s", data);
+ if (!strcmp((const char *)data, (const char *)str)) {
+ printf("correct\n");
+ } else {
+ printf("wrong\n");
+ }
+}
diff --git a/source/Reverse/flag_pwnablekr b/src/Reverse/flag_pwnablekr
similarity index 100%
rename from source/Reverse/flag_pwnablekr
rename to src/Reverse/flag_pwnablekr
diff --git a/source/Reverse/strings_crackme b/src/Reverse/strings_crackme
similarity index 100%
rename from source/Reverse/strings_crackme
rename to src/Reverse/strings_crackme
diff --git a/source/Reverse/xxd_crackme b/src/Reverse/xxd_crackme
similarity index 100%
rename from source/Reverse/xxd_crackme
rename to src/Reverse/xxd_crackme