程序的机器表示
程序编码
gcc -Og -o hello hello.c
命令使用gcc编译器将hello.c 输出为hello
-Og表示对c代码编译为机器代码的优化等级 等级越高 产生的代码变形越严重 可读性越差
-
gcc中指定优化级别的参数有:-O0、-O1、-O2、-O3、-Og、-Os、-Ofast。
-
在编译时,如果没有指定上面的任何优化参数,则默认为 -O0,即没有优化。
-
参数 -O1、-O2、-O3 中,随着数字变大,代码的优化程度也越高,不过这在某种意义上来说,也是以牺牲程序的可调试性为代价的。
-
参数 -Og 是在 -O1 的基础上,去掉了那些影响调试的优化,所以如果最终是为了调试程序,可以使用这个参数。不过光有这个参数也是不行的,这个参数只是告诉编译器,编译后的代码不要影响调试,但调试信息的生成还是靠 -g 参数的。
-
参数 -Os 是在 -O2 的基础上,去掉了那些会导致最终可执行程序增大的优化,如果想要更小的可执行程序,可选择这个参数。
-
参数 -Ofast 是在 -O3 的基础上,添加了一些非常规优化,这些优化是通过打破一些国际标准(比如一些数学函数的实现标准)来实现的,所以一般不推荐使用该参数。
vim以二进制打开文件
vim -b fileName 以二进制打开文件
在命令模式下输入 :%!xxd
使用-S 参数 可以将c语言代码输出为汇编指令
所有以.开头的指令都是用于指导连接器和编译器工作的伪指令 一般可以忽略这些代码
编译不链接
gcc -Og -c hello.c
-c 参数表示编译并汇编但不链接 关于gcc编译周期第一章有将 执行语句后会生产一个.o文件
反汇编
机器代码不能直接查看 需要反汇编程序叫机器代码反汇编为汇编代码才可以查看
使用objdump即可完成这个操作
objdump -d main.o
反汇编.o文件
虽然道路是曲折的,但前途是光明的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律