《千鹤酱开发日记》:一段跨越次元的爱恋,一次触及灵魂的共鸣

核心内容摘要

igao视频
18岁成人网站

川渝“嗓门”大比拼:是“bbbb”的魔音穿耳,还是“bbbbb”的浑厚有力?

文章目录

从C代码到机器码:零基础全流程实操(基于Ubuntu

24.

本章导言

1 核心概念预热:零基础必知的基础术语

2 环境准备:Ubuntu

2

04下的工具验证

2.

1 工具验证命令

2.

2 预期输出(需与之一致)

2.

3 工具安装(若缺失)

3 步骤1:编写基础C程序——程序的“起点”

2.

1 编写C代码

2.

2 代码解析(零基础重点)

4 步骤2:C代码→汇编代码——高级语言到中间语言的转换

2.

1 生成ATT语法汇编(Ubuntu默认)实操命令命令参数解析生成的ATT汇编代码(带逐行解析)

2.

2 生成Intel语法汇编(更易读)实操命令生成的Intel汇编代码(与ATT对比)

2.

3 ATT与Intel语法的核心区别(基础必记)

5 步骤3:汇编代码→目标文件——中间语言到机器码的转换

2.

1 生成目标文件实操命令命令参数解析

2.

2 查看目标文件关键说明

6 步骤4:反汇编目标文件——机器码与汇编指令的对应

2.

1 反汇编命令

2.

2 反汇编结果解析(核心对照表)

2.

3 拓展:main函数的栈帧布局(直观理解变量存储)

7 步骤5:查看原始机器码——CPU真正执行的“指令”

2.

1 查看原始机器码命令

2.

2 输出结果解析关键解读

8 基础

常见问题:实操中的“避坑指南”

9 章节小结与拓展思考

2.

1 章节小结

2.

2 拓展思考(巩固基础)本章习题(基础巩固)

从C代码到机器码:零基础全流程实操(基于Ubuntu

24.

本章导言

1 核心概念预热:零基础必知术语

2 环境准备:Ubuntu

2

04下的工具验证

2.

1 工具验证命令

2.

2 预期输出(需与之一致)

2.

3 工具安装(若缺失)

3 步骤1:编写基础C程序——程序的“起点”

2.

1 编写C代码

2.

2 代码解析(零基础重点)

4 步骤2:C代码→汇编代码——高级语言到中间语言的转换

2.

1 生成ATT语法汇编(Ubuntu默认)实操命令命令参数解析生成的ATT汇编代码(带逐行解析)

2.

2 生成Intel语法汇编(更易读)实操命令生成的Intel汇编代码(与ATT对比)

2.

3 ATT与Intel语法的核心区别(基础必记)

5 步骤3:汇编代码→目标文件——中间语言到机器码的转换

2.

1 生成目标文件实操命令命令参数解析

2.

2 查看目标文件关键说明

6 步骤4:反汇编目标文件——机器码与汇编指令的对应

2.

1 反汇编命令

2.

2 反汇编结果解析(核心对照表)

2.

3 拓展:main函数的栈帧布局(直观理解变量存储)

7 步骤5:查看原始机器码——CPU真正执行的“指令”

2.

1 查看原始机器码命令

2.

2 输出结果解析关键解读

8 基础

常见问题:实操中的“避坑指南”

9 章节小结与拓展思考

2.

1 章节小结

2.

2 拓展思考(巩固基础)本章习题(基础巩固)

从C代码到机器码:零基础全流程实操(基于Ubuntu

24.

本章导言本章将以一个基础C程序为例,带你完成“C代码→汇编代码→机器码”的完整转换流程。

通过实操+概念解析+细节拆解,你将掌握:高级语言(C)与机器指令的“中间桥梁”——汇编代码的生成与解读;机器码的本质(CPU可执行的二进制指令)与查看方式;Ubuntu

2

04环境下编译、汇编、反汇编工具的基础用法;栈帧、寄存器、小端序等底层基础概念的实际应用。

1 核心概念预热:零基础必知的基础术语在实操前,先明确5个核心术语(后续会反复用到):术语通俗解释汇编代码介于C语言(高级)与机器码(二进制)之间的“中间语言”,人类可读、CPU不可直接执行机器码CPU能直接识别的二进制指令(通常用十六进制表示),是计算机最终执行的“指令”目标文件(.o)编译后的二进制文件,包含机器码,但未关联系统库,不能直接运行栈帧函数执行时的“临时工作区”,由rbp(基址寄存器)和rsp(栈顶寄存器)维护,变量通常存储于此小端序数据在内存中的存储规则:低字节存低地址,高字节存高地址(CPU会自动处理转换)

2 环境准备:Ubuntu

2

04下的工具验证本章所有操作基于Ubuntu

2

04 LTS,需先验证工具是否就绪(若缺失,按步骤安装)。

2.

1 工具验证命令打开终端,执行以下命令:#

验证GCC编译器(编译/汇编核心工具)gcc --version#

验证objdump(反汇编工具,属binutils工具集)objdump --version#

验证系统版本cat/etc/os-release

2.

2 预期输出(需与之一致)# GCC版本 gcc (Ubuntu

13.

3.

ubuntu2~

24.

04)

13.

0 # objdump版本 GNU objdump (GNU Binutils for Ubuntu)

42 # 系统版本 PRETTY_NAME="Ubuntu

24.

0

3 LTS" VERSION_ID="

2

04"

2.

3 工具安装(若缺失)若提示“command not found”,执行以下命令安装:# 安装GCCsudoaptinstallgcc# 安装binutils(包含objdump)sudoaptinstallbinutils

3 步骤1:编写基础C程序——程序的“起点”我们以一个两数相加的基础C程序为例,这是理解流程的最简案例。

2.

1 编写C代码在终端中执行vim add.c,输入以下代码(按Esc+:wq保存退出):// add.c:两数相加的基础C程序#includestdio.h// 引入标准输入输出库(符合C语言规范,本示例暂未直接使用)intmain(){// 程序入口函数:C程序必须包含main函数,是操作系统执行程序的起点inta=5;// 定义int型变量a(占4字节),赋值为5(变量:存储数据的“容器”)intb=3;// 定义int型变量b,赋值为3intc=a+b;// 算术运算:将a与b的和存入变量creturnc;// 函数返回值:将c的值返回给操作系统(main函数的返回值表示程序退出状态)}

2.

2 代码解析(零基础重点)main()函数:C程序的“入口”,操作系统会从main()开始执行代码;int类型:表示“整型”,在x

架构下占4字节(可存储-231~

的整数);return语句:用于返回函数结果,main()函数的返回值会传递给操作系统(通常return 0表示程序正常结束)。

4 步骤2:C代码→汇编代码——高级语言到中间语言的转换汇编代码是C代码与机器码的“桥梁”,GCC默认生成ATT语法汇编,也可指定生成更易读的Intel语法汇编。

2.

1 生成ATT语法汇编(Ubuntu默认)ATT是GCC的默认汇编语法,需掌握其基础规则(后续会对比Intel语法)。

实操命令# 生成无优化的ATT语法汇编文件gcc -S -O0 add.c -o add-noopt.s命令参数解析参数作用-S仅编译(将C代码转为汇编代码),不进行后续的汇编和链接-O0关闭所有优化(核心!

保留原始代码逻辑,新手可直观看到“C代码与汇编的对应关系”)-o指定输出文件(add-noopt.s:noopt表示“无优化”,.s是汇编文件的标准后缀)生成的ATT汇编代码(带逐行解析)执行cat add-noopt.s查看输出,核心代码如下(过滤编译器辅助指令):.file "add.c" // 记录源文件名称(编译器自动添加) .text // 代码段:存储程序指令的核心区域 .globl main // 声明main函数为全局可见(操作系统能找到入口) .type main, @function // 标记main是函数 main: // main函数的入口(核心逻辑开始) pushq %rbp // 核心:保存旧栈帧→将rbp寄存器的值压入栈 movq %rsp, %rbp // 核心:建立新栈帧→将rsp(栈顶)的值赋给rbp(新基址) movl $5, -4(%rbp) // 核心:变量a=5→将立即数5存入栈地址[rbp-4] movl $3, -8(%rbp) // 核心:变量b=3→将立即数3存入栈地址[rbp-8] movl -4(%rbp), %edx // 核心:加载a→将[rbp-4]的值(a)存入edx寄存器 movl -8(%rbp), %eax // 核心:加载b→将[rbp-8]的值(b)存入eax寄存器 addl %edx, %eax // 核心:计算a+b→将edx与eax的值相加,结果存入eax movl %eax, -12(%rbp) // 核心:变量c=结果→将eax的值存入栈地址[rbp-12](c) movl -12(%rbp), %eax // 核心:准备返回值→将c的值存入eax(x

约定:返回值存eax) popq %rbp // 核心:销毁栈帧→从栈中恢复rbp的旧值 ret // 核心:函数返回→跳回操作系统,传递返回值

2.

2 生成Intel语法汇编(更易读)Intel语法更符合多数人的思维习惯(“目的在前,源在后”),适合零基础入门。

实操命令# 生成Intel语法汇编文件gcc -S -O0 add.c -o add-intel.s -masm=intel生成的Intel汇编代码(与ATT对比)执行cat add-intel.s查看输出,核心代码如下:.file "add.c" .intel_syntax noprefix // 启用Intel语法,不显示寄存器前缀% .text .globl main .type main

黄油触摸-黄油触摸应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123