第4章-程序的链接ppt课件
合集下载
C语言程序设计第4章选择结构程序设计ppt课件
8
printf("grade is E" );
9 else if (score >=60 && score<70 )
10
printf( "grade is D");
11 else if (score >=70 && score<80 )
12
printf( "grade is C");
13 else if (score>=80 && score<90 )
printf("a,b="); scanf("%d,%d",&a,&b); if (a>b) max=a; else max=b; printf("max=%d\n",max); }
结束
8
3.if-else if-else语句
(1)语句格式:
if (表达式1) 语句1
else if (表达式2) 语句2
不再判断,顺序执 行下面的语句
21
4.2 switch语句
switch (表达式) {case 常量表达式1:语句1 case 常量表达式2:语句2 …… case 常量表达式n:语句n [default:语句n+1] }
注意:
1. <表达式>可以是整型或字 符型表达式; 2. case后面必须是常量表达 式,不能包含变量; 3. 每个常量表达式的值应互 不相同; 4. case语句先后顺序随意; 5.若从上至下没有找到与表 达式的值相匹配的case,含有 default子句时,执行语句n+1。
C语言程序设计课件 第4章 循环结构.ppt
10
while语句
语法形式:
while (表达0(式假)) 表达式?循环体;
非0(真) 循环体
后续语句
11
执行过程:
step1:求解表达式,若 为0(假),则退出循 环执行后续语句。若 为非0(真),则执行 循环体。
step2: 转回step1继续 判断。
while语句应用实例
【例4.3】从键盘上读入一个非0的整数,统计该数的
语句功能
{count++; number=number/10;
?
}
printf ("It contains %d digits.\n",count);
}
12
while语句应用实例
【例4.4】计算表达式a+aa+aaa+…+aaa…a,其中a与x的值从 键盘上输入。
int a,x;
long sum=0,n=1,tn;
scanf("%d,%d", &a,&x);
tn=a; while(n<=x) {sum+=tn; tn=tn*10+a; n++;
循环次数 第1次 第2次 第3次 第4次
循环条件 1<=4为真 2<=4为真 3<=4为真 4<=4为真
}
第5次
5<=4为假
sum值
tn值
n值
0+2
2*10+2
2
2+22
C语言程序设计
第4章 循环结构
本章主要内容
1. 循环结构设计理念 2. for循环语句 3. while循环语句 4. do…while循环语句 5. 循环嵌套 6. 流程控制语句
while语句
语法形式:
while (表达0(式假)) 表达式?循环体;
非0(真) 循环体
后续语句
11
执行过程:
step1:求解表达式,若 为0(假),则退出循 环执行后续语句。若 为非0(真),则执行 循环体。
step2: 转回step1继续 判断。
while语句应用实例
【例4.3】从键盘上读入一个非0的整数,统计该数的
语句功能
{count++; number=number/10;
?
}
printf ("It contains %d digits.\n",count);
}
12
while语句应用实例
【例4.4】计算表达式a+aa+aaa+…+aaa…a,其中a与x的值从 键盘上输入。
int a,x;
long sum=0,n=1,tn;
scanf("%d,%d", &a,&x);
tn=a; while(n<=x) {sum+=tn; tn=tn*10+a; n++;
循环次数 第1次 第2次 第3次 第4次
循环条件 1<=4为真 2<=4为真 3<=4为真 4<=4为真
}
第5次
5<=4为假
sum值
tn值
n值
0+2
2*10+2
2
2+22
C语言程序设计
第4章 循环结构
本章主要内容
1. 循环结构设计理念 2. for循环语句 3. while循环语句 4. do…while循环语句 5. 循环嵌套 6. 流程控制语句
第4章程序设计语言-PPT课件
(3)PAD图(问题分析图)
D=0
是 显示无解 或无穷解
4.2.2 算法表达
(4)伪码
4.2.2 算法设计
算法:解决问题的方法和步骤。 算法设计涉及三个方面:程序功能、应用界面和数据结构。 鸡兔同笼的通用算法
列出一般二元一次方程组
a x + b y = c 1 1 1 a x + b y = c 2 2 2
( 1 ) ( 2 )
若a1b2-a2b1≠0,方程组ቤተ መጻሕፍቲ ባይዱ惟一解。
c1b2 - c2b1 x= a1b2 - a2b1
4.2.2 算法表达
常用算法描述工具
图4-1所示:流程图(程序框图)
流程图,N-S图,PAD图, 伪码等。
(1)流程图(程序框图)
最常用的一种表示法, 是描述计算机一步一步 完成任务的图表,直观 地描述程序执行的控制 流程。 1)方框表示“处理” ; 2)菱形框表示“判 断” ; 3)有向线段表示“控制 流”。
大学IT(第五版) 中国石油大学出版社
4.1.3 程序设计语言
语言分类:自然语言、人工语言。 计算机语言是属于人工语言,是人与计算机传递信息的媒 介。 程序设计语言是随着计算机的出现而出现的,并且向着易 学、易用、描述问题的能力也越来越强的方向发展着。 发展经历了三个阶段:机器语言、汇编语言和高级语言。 机器语言是计算机能直接执行的二进制形式的语言;汇编 语言是符号化的机器语言;高级语言更接近自然语言和数 学语言,不能直接被计算机识别,必须经过转换才能被执 行,它的下一个发展目标是面向应用,如VB、C++、Java、 Perl等均属高级语言。
第4章 计算机程序设计与语 言
主要内容 程序设计的基本概念 模型的建立、算法的设计和表达 程序的编写、测试和维护 程序文档的建立 程序设计语言的应用
第4章 Keil MDK-ARM集成开发环境 ppt课件
录执行的每条 Coprptte课x-件M 指令
5
Keil MDK-ARM简介
有关程序执行的完整代码覆盖率信息 执行性能分析器和性能分析器支持程序优化 大量示例项目可帮您快速熟悉 MDK-ARM 强大的内置功能 符合CMSIS,Cortex微控制器软件接口标准
在ARM公司的网站()注册、下载最新 的Keil MDK-ARM开发工具软件, MDK-Lite版:受限制的 32K编译、链接、部分模块功能。
Logic Analyzer
Watch Window
Memory
15
Window
1、 File 菜单
新建、保存源程序文件
芯片数据库 Licenses注册管理
ppt课件
16
2、 Edit 菜单
ppt课件
17
Edit菜单-Configuration
编辑器设置菜单:
代码编辑 器设置
颜色与字 用户关 快捷键
ppt课件
8
3.2 Keil MDK-ARM安装
ppt课件
9
Keil MDK-ARM安装
软件安装后,会自动打开Pack Installer包安装向导,选 择相应芯片的驱动包进行在线安装、或下载包离线安装。
包含了软件包、例子、接口驱动、板子驱动等。
ppt课件
10
Keil MDK-ARM安装
。都提供C/C++开发环境,专业版包括丰富的中间件库。
ppt课件
3
Keil MDK-ARM简介
PC、IDE开发环境、仿真器、开发板 Keil MDK-ARM
宿主机 IDE开发环境
仿真器
ppt课件
开发板
逻辑分析4仪
操作系统第4章ppt课件
THANKS
感谢观看
P/V操作
对信号量进行加减操作,实现进程同 步与互斥。
经典同步问题及其解决方法
1 2
生产者-消费者问题
通过两个信号量分别控制生产者和消费者进程, 确保生产者和消费者之间的同步与互斥。
哲学家进餐问题
通过引入资源分级法或信号量集机制,避免死锁 的发生,确保哲学家进餐过程中的同步与互斥。
3
读者-写者问题
。
多线程模型比较分析
01
多对一模型Leabharlann 将多个用户级线程映射到一个内核级线程上。该模型下,线程管理在用
户空间完成,线程的调度采用非抢占式调度,由线程库负责。
02
一对一模型
将每个用户级线程都映射到一个内核级线程上。该模型下,线程的创建
、撤销和同步等都在内核中实现,线程的调度由内核完成。
03
多对多模型
将多个用户级线程映射到少数但不止一个内核级线程上。该模型结合了
前两种模型的优点,允许多个用户级线程映射到不同的内核级线程上运
行。
线程同步与互斥机制
互斥锁
采用互斥对象机制,只有拥有互斥对象的线程才有访问公共 资源的权限。因为互斥对象只有一个,所以能保证公共资源 不会同时被多个线程同时访问。
信号量
信号量是一个整型变量,可以对其执行down和up操作,也 就是常见的P和V操作。信号量初始化为一个正数,表示并发 执行的线程数量。
死锁避免:银行家算法是一种典型的 死锁避免算法。该算法通过检查请求 资源的进程对资源的最大需求量是否 超过系统可用资源量来判断是否分配 资源给该进程。如果分配后系统剩余 资源量仍然能够满足其他进程的最大 需求量,则分配资源,否则不分配资 源。
死锁检测:通过定期运行死锁检测算 法来检测系统中是否存在死锁。常见 的死锁检测算法有资源分配图算法和 银行家算法等。如果检测到死锁发生 ,则需要采取相应措施来解除死锁, 例如通过撤销部分进程或抢占部分资 源来打破死锁状态。
《C语言程序设计(第五版)》第4章选择结构程序的设计 PPT课件
►(b*b-4*a*c)>=0
b*b-4*a*c>=0
►z= (x>y+3)
z= x>y+3
►(a>b)= = c
a>b= =c
►a=(b!=c)
a=b!=c
当然为提高程序的可读性、可维护性你不妨多使用 括号,因为C语言中的有些优先级很容易让你不小心犯 错。
C语言程序设计
第4章 选择结构程序设计
第10页
“>”的结果为“假”,即条件不成立。
C语言程序设计
第4章 选择结构程序设计
第5页
4.1 关系运算及关系表达式
4.1.1 关系运算符及其优先次序
运算符
含义
> 大于
优先级
结合性
>= 大于或等于 这些关系运算符等优
< 小于
先级,但比下面的优 先级高
左结合性
<= 小于或等于
== 等于 != 不等于
这些关系运算符等优 先级,但比上面的优 先级低
C语言程序设计
第4章 选择结构程序设计
第4页
4.1 关系运算及关系表达式
所谓“关系运算”实际上就是“比较运算”, 即将两个数据进行比较,判定两个数据是否符合 给定的关系。例如,
► “x>y+3”中的“>”表示一个大于关系运算。 ➢如果a的值是5,b的值是1,则大于关系运算
“>”的结果为“真”,即条件成立; ➢如果a的值是2,b的值是1,则大于关系运算
因为按照自左至右的结合方向,先执行关系运算
“a>b”得值为1(“真”),再执行关系运算“1>c”, 得值为0(“假”),因此y为0。
C语言程序设计
第4章Java网络应用ppt课件全
out=new DataOutputStream(mysocket.getOutputStream( ));
//通过out向“线路”写入请求连接的信息
out.writeUTF(“我是客户机,向你请求连接。”);
//通过循环,是使用in读取服务器放在“线路”里的信息
while(true)
{ s=in.readUTF( );
•{
• ServerSocket serverS=null;
• Socket
youS=null;
• String
s=null;
• DataOutputStream out=null;
• DataInputStream in=null;
• //创建Server的套接字,设定其端口为4321
• try{ serverS=new ServerSocket(4321);}
• * 程序文件名称:SClient.java
• * 功能:客户端程序,使用套接字连接服务器
• ******************************************/
• import java.io.*;
• import .*;
• public class SClient
•{
• public static void main(String args[ ])
•{
• String
s=null;
• Socket
mysocket;
• DataInputStream in=null;
• DataOutputStream out=null;
• try{
• //创建一个可以连接到Server的套接字,其端口为4321
网页制作ppt课件第4章超链接
超链接的重要性
总结词
超链接在网页制作中起着至关重要的作用,它能够提高用户体验、增强网站导航、增加网站流量和提升搜索引擎 排名。
详细描述
超链接是网页中不可或缺的一部分,它能够提高用户体验,使用户能够方便地浏览和获取信息。通过设置合理的 超链接,可以增强网站的导航结构,使用户更容易找到所需内容。同时,超链接还可以增加网站的外部链接数量, 提高网站的权重和流量,从而提升搜索引擎排名。
问。
图片链接
总结词
图片链接是指将一张图片设置为超链接 ,当用户点击这张图片时,会跳转到指 定的片链接,首先需要插入一 张图片,然后选中这张图片,选择“插入 ”菜单中的“超链接”选项。在弹出的对 话框中,输入要链接到的网址或文件路径 ,并设置好显示的文字和颜色等属性。点 击确定后,选中的图片就会变成超链接, 用户可以直接点击访问。
确保超链接指向的内容合法、合规, 不涉及任何违法、侵权或不良信息。
避免在超链接中传递任何误导、虚假 或欺诈信息,以免引起法律纠纷和不 良后果。
在使用外部链接时,尊重原网站的版 权和隐私政策,避免侵犯他人的权益。
06
案例分析
优秀超链接案例一
01
案例名称
旅游网站导航栏
02 03
描述
该网站通过超链接将各个旅游景点的页面相互连接,使用户可以轻松跳 转到感兴趣的景点页面,同时每个景点页面都提供了返回主页的超链接, 方便用户浏览。
使用链接管理工具或插件来检 测和清除死链,提高网站的用 户体验和搜索引擎优化效果。
优化用户体验
确保超链接的文本清晰、简洁, 易于理解,避免使用过于复杂或
难以理解的链接描述。
合理规划超链接的位置和布局, 使其符合用户的浏览习惯和阅读
《面向对象程序设计》课件——第四章 程序流程控制
请输入一个百分制成绩: 80 对应的五分制成绩是: B
4、判断条件及组合
判断条件及组合
分支结构中的判断条件可以使用任何能够产生True或False的 语句或函数。 形成判断条件最常见的方式是采用关系操作符。
判断条件及组合
>>> 4 < 5 True >>> 0 == False True >>> "" == True False
# 判断用户输入数字的某个属性 s = eval(input("请输入一个整数: "))
if s %3 ==0 and s % 5 == 0: print("这个数字既能被3整除, 又能被5整除")
print("输入数字是: ", s)
>>> 请输入一个整数: 123 输入数字是: 123
>>> 请输入一个整数: 150 这个数字既能被3整除,又 能被5整除 输入数字是: 150
1 遍历循环: for 2 无限循环: while 3 循环控制: break和continue
1、遍历循环: for
遍历循环: for
✓ 根据循环执行次数的确定性,循环可以分为确定次 数循环和非确定次数循环。
✓ 确定次数循环指循环体对循环次数有明确的定义, 循环次数采用遍历结构中元素个数来体现。 Python通过保留字for实现“遍历循环” 。
1.Python分支结构
目录
1 单分支结构: if 2 二分支结构: if-else 3 多分支结构: if-elif-else 4 判断条件及组合
1、单分支结构: if
单分支结构: if Python的单分支结构使用if保留字对条件进行判断。
《计算机应用基础教程》课件第4章
图4-22 浮动工具栏
3. 使用“字体”对话框设置 单击【开始】选项卡中【字体】功能组区的对话框启动 器可以打开“字体”对话框,如图4-23所示。
图4-23 “字体”对话框
4. 格式刷 在实际操作中可能会反复对某些不连续的文字设置相同 的格式。
4.4.2 段落格式的设置 1. 段落的对齐方式 段落的对齐包括:左对齐、右对齐、居中对齐、两端对
用【开始】选项卡中【段落】功能组区中的“
”按钮
打开“全部”列表。在全部工具清单中选择为段落设置的多
级编号。自行设置多级类表的步骤和上面两项的设置过程类
似,这里不再重复叙述。用户在输入段落时可以用Tab键来降
低现有编号的级别,用Shift + Tab组合键来提升现有编号的级
别。
4.4.5 主题 对文档的格式化时经常要考虑文档的主题或主旨,为了
快捷的方法是:单击【开始】选项卡中【段落】功能组区中
的“
”按钮,快速对行间距进行设置。
4.4.3 特殊格式的设置 1. 设置分栏显示 分栏是将文档中完整的一行或多行文字设置成若干列的
显示修饰效果,这种修饰效果在杂志中特别常见。先选中要 分栏显示的段落。在【页面布局】选项卡的【页面设置】功 能组区中单击“分栏”下栏按钮,如图4-27所示。
图4-27 分栏工具
图4-28 “分栏”对话框
2. 首字下沉 首字下沉格式一般位于每段的第一行第一个字,是一种 特殊的修饰效果常见于报刊和杂志。
图4-29 首字下沉
3. 拼音指南 拼音指南功能是指在文字的上方显示该文字的拼音和音 调,但是该功能的使用要求计算机系统中必须安装较高版本 微软拼音输入法才可以使用。
图4-17 剪贴板任务窗格
4.3.6 撤销操作 使用“快速访问”工具栏中的“ ”按钮或者使用
精品课件-单片机原理及应用系统设计-第4章
;
PUSH
DPL
;
保护现场, 将主程序中
; DPTR的低八位放入堆
MOV
DPTR, #TABLE
; 在子程
第四章 单片机程序设计语言
恢复现场,
MOVC A, @A+DPTR
POP
DPL
将主程序中DPTR
; ;
;的低八位从堆栈中弹出
POP 场, 将主程序中DPTR
DPH
; 恢复现
;的高八位从堆栈中弹出
图 4-8 循环程序的典型形式
第四章 单片机程序设计语言
【例 4-4】 冒泡程序。假设有N个数, 它们依次存放 于LIST地址开始的存储区域中, 将N个数比较大小后, 使它 们按照由小到大的顺序排列,
编写该程序的方法: 依次将相邻两个单元的内容作比较, 即第一个数和第二个数比较,第二个数和第三个数比 较, ……, 如果符合从小到大的顺序则不改变它们在内存 中的位置,否则交换它们之间的位置。如此反复比较, 直到 数列排序完成为止。
LJMP MAIN
;
MAIN: MOV A, X
XRL A, Y
; (X)与(Y)进行异或操作
JB ACC.7, NEXT1
; 累加器A的第7位
为1, 两个数
;符号不同, 转移到
第四章 单片机程序设计语言
MOV
CJNE
转移到NEQUAL
CLR
P1.0置0
S
MOV DXCE1COUNTER, #00H
; 将DXCE1COUNTER赋值为0
而如下的注释则给出了额外有用的信息:
JNZ PC Comm_Err
;
第四章 单片机程序设计语言
(2) 注释应与其描述的代码相近, 对单条语句的注释应 放在其上方或右方相邻位置, 不可放在下面, 如放于上方
《计算机与互联网》课件—第4章 程序设计基础35
程序设计语言即计算机语言是人 和机器交流的工具,它是一些可 用符号和严格规则的总和。
程序设计语言 PROGRAMMING LANGUAGE
4.3.2 程序设计语言的组成
数据
描述程序所涉及的数据对象。
控制
描述程序的操作流程控制结构。
程序设 计语言
运算
描述程序中应该执行的数据操作。
传输
表达程序中数据的输入和输出
流 程 图 : 本 金 为 10000 , 日 利 息 为 8‰ , 月 利 息 为 24% 。 用 计 算 机 进 行 计 算 的具体过程如右图所示。
叁
PROGRAMMING LANGUAGE
4.3 程序设计语言
程序设计语言 PROGRAMMING LANGUAGE
4.3.1 程序设计语言的概念
算法 ALGORITHM
2、传统流程图描述算法
⑴流程图的符号
Symbol
Name Start/End
Arrows
Input/output Process Decision
Function An oval represents a start or end point. A line is a connector that shows relationship
N-S流程图
PAD图
计算机语言
伪代码
算法 ALGORITHM
1、自然语言描述
例:求输入数的绝对值。
Step1:把数据输入到一个存储空间中; Step2:判断存储空间内的值,如果大于等于0,转Step4,否则转Step3; Step3:将存储空间的内容取它的负数后,放回到存储空间内; Step4:输出存储空间的值; Step5:结束。
程序设计语言 PROGRAMMING LANGUAGE
4.3.2 程序设计语言的组成
数据
描述程序所涉及的数据对象。
控制
描述程序的操作流程控制结构。
程序设 计语言
运算
描述程序中应该执行的数据操作。
传输
表达程序中数据的输入和输出
流 程 图 : 本 金 为 10000 , 日 利 息 为 8‰ , 月 利 息 为 24% 。 用 计 算 机 进 行 计 算 的具体过程如右图所示。
叁
PROGRAMMING LANGUAGE
4.3 程序设计语言
程序设计语言 PROGRAMMING LANGUAGE
4.3.1 程序设计语言的概念
算法 ALGORITHM
2、传统流程图描述算法
⑴流程图的符号
Symbol
Name Start/End
Arrows
Input/output Process Decision
Function An oval represents a start or end point. A line is a connector that shows relationship
N-S流程图
PAD图
计算机语言
伪代码
算法 ALGORITHM
1、自然语言描述
例:求输入数的绝对值。
Step1:把数据输入到一个存储空间中; Step2:判断存储空间内的值,如果大于等于0,转Step4,否则转Step3; Step3:将存储空间的内容取它的负数后,放回到存储空间内; Step4:输出存储空间的值; Step5:结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• swap();
/* 引用符号swap */
• int *xp = &x; /* 定义符号 xp, 引用符号 x */
– 编译器将定义的符号存放在一个符号表( symbol table)中.
– 符号表是一个结构数组
– 每个表项包含符号名、长度和位置等信息
– 链接器将每个符号的引用都与一个确定的符号定义建立关联
Section header table
可执行目标文件格式
• 与.o文件稍有不同:
– ELF头中字段e_entry给出执 行程序时第一条指令的地址 ,而在可重定位文件中,此 字段为0
– 多一个.init节,用于定义 _init函数,该函数用来进行 可执行目标文件开始执行时 的初始化工作
.
/* main.c */ int add(int, int); int main( ) {
return add(20, 13); }
/* test.c */ int add(int i, int j) {
int x = i + j; return x; }
00000000 <add>: objdump -d test.o
目标文件格式 符号解析与重定位 共享库与动态链接
可执行文件的链接生成
• 主要教学目标
– 使学生了解链接器是如何工作的,从而能够养成良好的程序 设计习惯,并增加程序调试能力。
– 通过了解可执行文件的存储器映像来进一步深入理解进程的 虚拟地址空间的概念。
• 包括以下内容
– 链接和静态链接概念
– 三种目标文件格式
链接视图
节(section)是 ELF 文件中具有相 同特征的最小可处 理单位
.text节: 代码 .data节: 数据 .rodata: 只读数据 .bss: 未初始化数据
.
执行视图
由不同的段( segment)组 成,描述节如 何映射到存储 段中,可多个 节映射到同一 段,如:可合 并.data节和 .bss节,并映射 到一个可读可 写数据段中
– 第三讲:动态链接 • 动态链接的特性、程序加载时的动态链接、程序运行时的 动态链接
.
一个典型程序的转换处理过程
经典的“ hello.c ”C-源程序
1 #include <stdio.h> 2 3 int main() 4{ 5 printf("hello, world\n"); 6}
hello.c的ASCII文本表示
0: 55
push %ebp
1: 89 e5 mov %esp, %ebp
3: 83 ec 10 sub $0x10, %esp
6: 8b 45 0c mov 0xc(%ebp), %eax
9: 8b 55 08 mov 0x8(%ebp), %edx
c: 8d 04 02 lea (%edx,%eax,1), %eax
• 可执行目标文件 (.a file) – 包含的代码和数据可以被直接复制到内存并被执行 – 代码和数据地址为虚拟地址空间中的地址
• 共享的目标文件 (.so file) – 特殊的可重定位目标文件,能在装入或运行时被装入到内 存并自动被链接
– Windows 中称其为 Dynamic Link Libraries (DLLs)
可执行文件的生成
• 使用GCC编译器编译并链接生成可执行程序P: – unix> gcc -O2 -g -o p main.c swap.c – unix> ./p
GCC 编译 器的 静态 链接 过程
main.c
swap.c
Source files
Translators (cpp, cc1, as)
.data .bss
虽然是sw.ap的本地符号,也需在.bss节重定位
使用链接的优点
链接带来的好处1:模块化 (1)一个程序可以分成很多源程序文件 (2)可构建公共函数库,如数学库,标准C库等
链接带来的好处2:效率高 (1)时间上,可分开编译
只需重新编译修改的源程序文件,然后重新链接 (2)空间上,无需包含共享库所有代码
.data section .bss section .symtab section
✓ 只读数据,如 printf 格式串、switch 跳转表等
.data 节 ✓ 已初始化的全局变量
.rel.txt section .rel.data section .debug section
.bss 节
.strtab section
define. d in main.c and swap.c)
引用符号的地址需要重定位
可重定位目标文件
System code System data
.text .data
可执行目标文件
0 Headers
System code
main()
.text
main.o main()
int buf[2]={1,2}
本学期考核方法
• 本学期平时分占60%,期末考试占40% • 小测试共2次,每次6分,共20分 • 作业加考勤基础分20分,少一次扣4分,作业不交加考勤
不到场超过5次将取消考试资格。 • 实验课有两个实验,每次10分,共20 • 各种加分,回答问题,实验提前做完等。 • 期末考试形式为闭卷考试
.
第四章 程序的链接
.text .data
swap.o
swap()
.text
int *bufp0=&buf[0] .data static int *bufp1 .bss
swap()
More system code
System data int buf[2]={1,2} int *bufp0=&buf[0]
int *bufp1 .symtab .debug
可重定位目标文件格式
ELF 头
0
ELF header
✓ 占16字节,包括字长、字节序(大端/ 小端)、文件类型 (.o, exec, .so)、机 器类型(如 IA-32)、节头表的偏移、 节头表的表项大小及表项个数
.text 节
✓ 编译后的代码部分
.rodata 节
.text section .rodata section
功能:输出“hello,world”
不能,需要转换为机器语言 代码! 即:编译、汇编等
计算机能够直接识 别hello.c源程序吗
?
.
一个C语言程序举例
main.c
int buf[2] = {1, 2}; void swap();
int main() {
swap(); return 0; }
swap.c
80483e6: 8b 45 fc mov -0x4(%ebp), %eax
80483e9: c9
leave
80483ea: . c3
ret
Executable and Linkable Format (ELF)
• 两种视图 – 链接视图:Relocatable object files – 执行视图:Executable object files
f: 89 45 fc mov %eax, -0x4(%ebp)
12: 8b 45 fc mov -0x4(%ebp), %eax
15: c9
leave
16: c3
ret
080483d4 <add>: objdump -d test
80483d4: 55
push %ebp
80483d5: 89 e5 mov %esp, %ebp
✓ 未初始化全局变量,仅是占位符,不占 据任何实际磁盘空间。目标文件格式区 分初始化和非初始化是为了空间. 效率
.line section Section header table
可重定位目标文件格式
.symtab 节 ✓ 存放函数和全局变量 (符号表)信息 , 它不包括局部变量条目
.rel.text 节 ✓ .text节的重定位信息,用于重新修改代 码段的指令中的地址信息
Translators (cpp, cc1, as)
main.o
swap.o
Linker (ld)
Separately compiled relocatable object files
p
Fully linked executable object file (contains code and data for all functions
– 符号及符号表、符号解析
– 使用静态库链接
– 重定位信息及重定位过程
– 可执行文件的存储器映像
– 可执行文件的加载
– 共享(动态)库链接
.
程序的链接
• 分以下三个部分介绍
– 第一讲:目标文件格式 • 程序的链接概述、链接的意义与过程 • ELF目标文件、重定位目标文件格式、可执行目标文件格式
– 第二讲:符号解析与重定位 • 符号和符号表、符号解析 • 与静态库的链接 • 重定位信息
.debug 节
.rel.data section
✓ 调试用符号表 (gcc -g) strtab 节
✓ 包含symtab和debug节中符号及节名 Section header table(节头表)
.debug section .strtab section
.line section
✓ 每个节的节名、偏移和大小 .
# i n c l u d e <sp> < s t d i o . 35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 h > \n \n i n t <sp> m a i n ( ) \n { 104 62 10 10 105 110 116 32 109 97 105 110 40 41 10 123 \n <sp> <sp> <sp> <sp> p r i n t f ( " h e l 10 32 32 32 32 112 114 105 110 116 102 40 34 104 101 108 l o , <sp> w o r l d \ n " ) ; \n } 108 111 44 32 119 111 114 108 100 92 110 34 41 59 10 125