RamadhanAdam/c-reversing-and-malware-analysis
GitHub: RamadhanAdam/c-reversing-and-malware-analysis
一个系统化复习 C 语言核心概念的练习与笔记仓库,为逆向工程和恶意软件分析奠定语言基础。
Stars: 0 | Forks: 0
# C 练习
我整理这个项目是为了复习 C 语言。我已经很久没碰过它了,需要重新回顾指针、内存管理、struct 和位级别的操作,主要是因为我的论文工作涉及阅读原始的 PE 二进制文件,最终还要进行恶意软件分析,而如果没有扎实的 C 语言基础,你就无法做好这些工作。
`practice/module_*/` 是我针对 mooc.fi C-MOOC 练习编写的实践代码。
`tutorials/` 是我在学习过程中记录的关于每个主题的笔记。
当我忘记某些东西时,我也会把这个仓库当作快速参考,比如 `realloc` 的行为或指针优先级规则。
相关项目:[raw-pe](https://github.com/RamadhanAdam/raw-pe),在这个项目中我使用 NASM 手动构建了一个 PE 可执行文件。
## 如何使用
每个模块文件夹都包含实践代码,通常每个练习对应一个 .c 文件。要编译并运行某个文件:
```
make practice/module_1_intro_and_basics/array_sum
./practice/module_1_intro_and_basics/array_sum
```
或者不使用 Makefile 直接编译:
```
gcc -Wall -g -o array_sum practice/module_1_intro_and_basics/array_sum.c
./array_sum
```
检查内存错误:
```
valgrind --leak-check=full ./array_sum
```
## 结构
| 文件夹 | 主题 |
|---|---|
| `practice/module_1_intro_and_basics/` | 循环、条件判断、指针和数组入门 |
| `practice/module_3_data_structures/` | Struct、指向 struct 的指针、ADT、链表(`vector/` 包含动态数组和链表) |
| `practice/module_4_arrays_and_bits/` | Union、enum、多维数组、位运算(`bit_operations/` 子文件夹) |
| `practice/module_5_advanced_features/` | 文件 I/O、预处理器、varargs、函数指针 |
| `tutorials/` | 每个模块的笔记和练习描述 |
没有 `module_2/` 文件夹。在实践中,指针、数组和字符串最终被放在了 `practice/module_1_intro_and_basics/` 中,尽管该主题的笔记是一个单独的文件(`02_pointers_arrays_strings.md`)。文件夹编号与我实际构建的内容相对应,而不是课程本身的编号。
每个模块都有自己的 README,列出了其中的内容。
## 参考
`C_CHEATSHEET.md` 包含编译器标志、valgrind 用法以及我总是忘记的陷阱。
## 致谢
练习和课程结构来自 mooc.fi。这里的所有内容都是我自己的实践代码和笔记。
## 许可证
MIT,详见 `LICENSE`。仅涵盖我的代码和笔记,不包括 mooc.fi 的材料。
标签:位运算, 学习笔记, 客户端加密, 指针与内存, 数据结构, 编程练习