成为漏洞研究员之路 第一天:编写我的首批 C 语言程序并探究为何 printf 是一把武器

发布日期:2026-05-16 10:03:01   浏览量 :0
发布日期:2026-05-16 10:03:01  
0

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

**

今日所学

今天是我使用克尼汉和里奇编写的《C 程序设计语言》(即由该语言创造者所著之书)开启 C 语言学习之旅的第一天。

我在 WSL2 Ubuntu 环境中设置了工作目录,并从头开始手动编写了前三个 C 语言程序,随后在终端中进行了编译和运行。

程序一:你好,世界

这是经典的入门程序。我了解到 #include <stdio.h> 会引入标准库,main() 是程序执行的起点,并且即使这个看似简单的六行程序,在使用 strace 工具运行时也会触发超过 30 次内核操作。printf 函数在最基本的层面上会转化为直接与内核通信的 write() 系统调用。

程序二:算术运算

学习了整数除法与浮点数除法的区别。最大的收获是:在 C 语言中,10 / 3 的结果是 3,而不是 3.333333。当对整数进行除法运算时,C 语言会完全舍弃小数部分。这被称为整数截断,如果开发人员对除法结果做出错误假设,可能会导致实际的安全漏洞。

还学习了格式说明符。%d 用于整数,%f 用于浮点数,%s 用于字符串,%x 用于十六进制数。使用错误的格式说明符不仅会导致输出错误,在特定条件下还会导致栈内存泄漏。这就是格式化字符串漏洞的来源。

程序三:内存地址

开始探索 C 语言如何暴露原始内存。& 运算符可以获取变量的实际内存地址,而 %p 用于打印该地址。这是接下来要学习的指针操作的基础。

今日使用的工具:gcc、nano、WSL2 Ubuntu

遇到并解决的错误:缺少 #include 指令、引号错误、格式说明符错误、文件名中误用逗号代替点号、在创建文件之前进行编译。**

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部