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,分别用于创建和使用扩展动态链接库。
链接器是软件开发过程中的重要工具,它负责将编译器生成的多个目标文件(.o 或 .obj 文件)合并成一个可执行文件或者库。在这个过程中,链接器执行了一系列关键任务,包括符号解析、重定位和节区组合等。下面我们将...
“ppt课件制作的高级技巧.ppt”、“幻灯片制做技巧.ppt”和“Excel制作.ppt”则是具体的教程资料,它们可能包含更多关于链接技巧和其他多媒体制作的详细指导。 总之,掌握多媒体制作中的链接技巧能让你的演示文稿更...
通常,一个关于链接管理的源码包可能包含以下几类文件: 1. **源代码文件**:可能包含`.php`、`.js`、`.html`或其它编程语言的文件,是实现链接管理功能的核心部分。 2. **数据库文件**:如`.sql`文件,用于存储和...
锚文本可以提供关于链接目的和相关性的线索。如果锚文本多样化且相关,搜索引擎可能会认为你的网站具有广泛的相关性,从而提高排名。 在使用反向链接查询工具时,要注意避免链接质量低下或被标记为“垃圾链接”的...
以下是关于链接设计的一些关键知识点: 1. **链接标签**:链接标签应具有意义,直接反映链接的目的,且要避免使用模糊的标签如“点击这里”。用户需要能够通过链接标签快速理解点击后会跳转到什么内容。一致性也很...
很可能是详细讲解了链接建设的各个方面,以及“下载说明.txt”提供下载和使用文件的指南,而“A5下载- 更全的站长资源平台.url”则可能指向一个丰富的站长资源库,可能包含更多关于链接建设的实用资料。 首先,我们...
4. 报告和统计工具:生成关于链接流量、点击率等信息的报告。 这个资源包对于那些想要了解早期互联网链接管理方式,尤其是使用CGI技术的人来说,是一个宝贵的资料库。它揭示了互联网发展初期,网站如何利用有限的...
5. **报告和监控**:平台会生成关于链接状态的报告,如链接增长趋势、丢失的链接等,便于跟踪和调整策略。同时,实时监控可以帮助及时发现并处理问题,如突然的大量外链损失可能表明遭遇了负面SEO攻击。 6. **自动...
- 统计报告:提供关于链接交换效果的统计信息,如链接数量、流量变化等。 3. 多风格版本 "多风格版"意味着该平台提供了不同的界面设计供用户选择,以满足不同用户群体的审美需求。实现多风格通常涉及以下步骤: -...
针对链接挖掘中网络的结构难以预测这个难点问题,提出了一个关于链接预测的新型半监督学习方法——基于快速共轭梯度方法和链接相似性传递增殖原理的链接预测算法,利用节点相似性等辅助信息去预测未知结构。...
用户可以通过系统界面进行查询,获取关于链接的各种信息。 系统设计上,LinkRecord采用了UTF-8编码,这是一种多字节的字符编码方案,能支持世界上几乎所有的文字,确保系统在全球范围内都能正常显示各种语言的链接...
这是易语言编译系统中用于配置链接器参数的重要文件,它包含了关于链接器路径、库路径、输入输出文件等一系列设置。当系统报出这个错误时,第一步应该是打开`tools\link.ini`,查看其中的配置信息。 1. **检查链接...
此时,在目录下就会生成一条关于链接的记录,这条记录包含了一个链接地址。以后,你只需点击这条记录,即可快速访问设定的链接。同时,操作对话框还会提供编辑或删除链接的选项。 5. 为了验证链接是否添加成功,你...
关于链接库中函数名的变化,当我们不使用`extern "C"`时,C++编译器会为函数生成一个唯一的、经过修饰的名称,以便处理重载和其他C++特性。但在跨语言或者需要动态链接的情况下,我们需要使用未修饰的函数名,因此`...
关于链接写入的速度,由于微博的反爬机制,爬取速度可能较慢。每爬取一百条链接大约需要18秒,处理大量转发时请耐心等待。在爬虫运行过程中,避免对指定的输入和输出文件进行任何修改,以免影响爬取进程。 总之,...
而“关于Flash链接”的主题,主要涉及如何在Flash内容中嵌入链接,使得用户可以通过点击Flash对象来访问其他网页或资源。下面将详细解释这一知识点。 一、Flash中的ActionScript ActionScript是Flash的核心编程...
关于创建和调用的具体步骤,文档中给出了示例代码。创建静态链接库需要新建一个Win32项目并选择创建静态库,然后添加对应的头文件和源文件。编译这个项目后,就会生成一个.lib文件。调用静态链接库时,则需要将静态...