1,加载器创建了存储器映像,将可执行文件的相关内容拷贝到了代码和数据段。
接下来加载器跳转到程序的入口点:_start的地址。
_start处的启动代码是在目标文件ctrl.o中定义的,对所有的C程序都是一样的。
0x080480c0 <_start>:
call _libc_init_first
call _init
call atexit
call main
call _exit
首先从.text和.init节中调用初始化例程,启动代码调用atexit例程,它注册了一系列在调用exit函数时应该调用的程序。
然后启动代码调用应用程序的main程序,开始执行我们的c代码。在应用程序返回之后,启动代码调用_exit程序,它将控制返回给操作系统。
实例代码:
#include <stdio.h>
#include <stdlib.h>
void exit_1(void)
{
printf("exit1 called!\n");
}
void exit_2(void)
{
printf("exit2 called!\n");
}
int main(void)
{
atexit(exit_1);
atexit(exit_2);
printf("main called!!!\n");
exit(0);
}
2,静态库的生成和使用:
源文件addvec.c和multvec.c生成静态库libvector.a
gcc -c addvec.c multvec.c
ar rcs libvector.a addvec.o multvec.o
主函数:
gcc -O2 -c main2.c
链接:
gcc -static -o staticp2 main2.o ./libvector.a
执行:
./staticp2
size staticp2
text data bss dec hex filename
507269 1928 6948 516145 7e031 staticp2
3,动态库的生成和使用:
源文件addvec.c和multvec.c生成静态库libvector.so
gcc -shared -fPIC -o libvector.so addvec.c multvec.c
主函数:
gcc -O2 -c main2.c
链接:
gcc -o sharedp2 main2.o ./libvector.so
执行:
./sharedp2
size sharedp2
text data bss dec hex filename
1246 292 16 1554 612 sharedp2
注:明显比静态库小很多。
源文件:
addvec.c :
void addvec(int *x, int *y,
int *z, int n)
{
int i;
for (i = 0; i < n; i++)
z[i] = x[i] + y[i];
}
multvec.c:
void multvec(int *x, int *y,
int *z, int n)
{
int i;
for (i = 0; i < n; i++)
z[i] = x[i] * y[i];
}
vector.h:
void addvec(int *x, int *y, int *z, int n);
void multvec(int *x, int *y, int *z, int n);
main2.c:
#include <stdio.h>
#include "vector.h"
int x[2] = {1, 2};
int y[2] = {3, 4};
int z[2];
int main()
{
addvec(x, y, z, 2);
printf("z = [%d %d]\n", z[0], z[1]);
return 0;
}
- 大小: 27.5 KB
- 大小: 40.7 KB
- 大小: 76.7 KB
分享到:
相关推荐
关于链接器的相关内容讲解,包含相关文档说明,供大家学习使用!
项目Calculate和项目ExTestCal,分别用于创建和使用静态链接库; 项目CalSquare和项目ExTestCalSquare,分别用于创建和使用规则动态链接库; 项目CalGCD和项目ExTestCalGCD,分别用于创建和使用扩展动态链接库。
k60技术资源--PMC 包括内部电压调节器,上电复位(POR)以及低电压检测系统。 模式控制器控制PMC,本节主要的内容包含设备的所有复位。
以下是关于链接器的详细解释: 定义: 链接器是一个系统程序,它的主要功能是将一个或多个由编译器或汇编器生成的目标文件(这些文件包含机器码和链接器可用的信息)以及库文件链接为一个可执行文件。 功能: 解析...
针对链接挖掘中网络的结构难以预测这个难点问题,提出了一个关于链接预测的新型半监督学习方法——基于快速共轭梯度方法和链接相似性传递增殖原理的链接预测算法,利用节点相似性等辅助信息去预测未知结构。...
比较顺序存储和链接存储两种存储结构的有缺点。 1. 分别用顺序存储和链接存储实现线性表的基本操作; 2. 比较两者的优缺点,并说明两者的适用场合。
这里是关于链接器链接知识的相关资源。包含我做实验的所有源代码。
关于链接器和加载器方面的内容,这是被很多人遗忘的角落。不过很多时候还是很有用的~
关于flash链接的一些代码,可能对大家有用哦!
以下是一个关于磁力链接的详细示例和解释磁力链接(Magnet URI scheme)是一种特殊类型的统一资源标识符(URI),它包含了通过特定散列函数(如SHA-1)得到的文件内容的散列值,而不是基于位置或名称的引用。...
关于 React 常见问题链接集合
本博客为初学者提供了一个关于磁力链接的全面教程。从磁力链接的定义和基本使用方法开始,逐步介绍了磁力链接的高级功能、注意事项、安全性以及未来的发展。此外,博客还强调了加入磁力链接社区的重要性。通过这个...
此资源是我一手查找和积累而成;关于用请链接发布更多平台
•Check Here To Hide The Above Categories:选中则隐藏上述分类,这是关于上面这个填空题的后续选项 •Set Links To Nofollow:告诉搜索引擎别管这些链接,不要让这些链接影响你的网站的评级。 •Separate Links ...
关于链接工具 Link Tools是 1.8的插件。它提取了到您论坛中的帖子中的链接(URL),然后为您提供了三个新功能: 链接预览。在每个帖子的底部显示了该帖子中每个链接的位置。支持自定义“链接预览器”以为不同类型的...
本资源提供了关于链接场景的教程,涵盖了gotoAndStop、gotoAndPlay等函数的使用方法。 6. 文本框控制 本资源提供了关于文本框控制的教程,涵盖了文本框的创建、删除、修改等操作。 7. Fscommand指令 本资源提供...
这个小程序是MFC中有关于链接方面的,希望可以通过这个小程序可以对你在MFC中编程,实现按钮的超链接有所帮助。。。。。。
描述了关于IAR 中的链接文件的作用及程序内存分配方式
10.模版修改管理:分类页面模板、首页页面模板、关于本站页模板、联系本站页模板、使用帮助页模板、公益活动页模板、网址推荐页模板、友情连接页模板、常用软件页模板、竞价推荐页模板等修改/删除 11.生成静态页...
MC_dll.h关于matlab与C语言之间的动态链接库头文件