- 博客(11)
- 收藏
- 关注
原创 Makefile基础
编译源代码文件可能很累人,尤其是当您必须包含多个源文件并在。是简化此任务的解决方案。Makefile 是特殊格式的文件,可帮助。在Linux环境下,当我们输入命令时,它就在当前目录查找一个名为Makefile的文件,然后,根据这个文件定义的规则,自动化地执行任意命令,包括编译命令。Makefile这个单词,顾名思义,就是指如何生成文件。
2025-12-01 19:12:11
547
原创 C Run-Time Library
C运行时库(CRT)是一组包含启动例程、初始化代码、标准库支持代码,有时还包括系统调用封装函数的集合,它们共同构成了 C 程序的执行环境。这些代码大多并不存在于应用程序自身的源代码中,而是由编译器驱动程序(例如 gcc 或 clang)自动链接到程序中。
2025-11-29 18:37:20
872
原创 动态链接##
(1)静态链接对计算机内存和磁盘空间浪费严重。例如:一个程序使用了glibc标准库,现在计算机中同时运行着该程序的100个进程。那么,每个进程中都会有一份glibc,操作系统需要在真实的物理内存中加载100份glibc,浪费了很多内存。(2)静态链接不利于程序的更新。 动态链接库又叫共享库(Shared Library),相信大部分做软件开发的人都很熟悉。简单地说,库是对一系列程序的封装,静态库是会在链接时与可执行程序合并的库,而动态库则在链接后仍然与可执行文件分离,直到运行时才动态加载。显然
2025-10-24 14:49:40
573
原创 可执行文件的装载与进程
这时候我们前面提到的装载过程的第二步建立的数据结构起到了关键的作用,操作系统将查询这个数据结构,然后找到空页面所在的VMA,计算出相应的页面在可执行文件中的偏移,然后在物理内存中分配一个物理页面,将进程中该虚拟页与分配的物理页之间建立映射关系,然后把控制权再返回给进程,进程从刚才页错误的位置重新开始执行。我们知道进程在执行的时候它还需要用到栈(Stack)和堆(Heap)等空间,事实上它们在进程的虚拟空间中的表现也是以VMA的形式存在的,很多情况下,一个进程中的栈和堆分别都有一个对应的VMA。
2025-09-27 16:35:22
653
原创 -静态链接-
在重定位的过程中,每个重定位的入口都是对一个符号的引用,那么当链接器需要对某个符号的引用进行重定位时,他就要确定这个符号的目标地址。对于每个要被重定位的ELF段都有一个对应的重定位表,而一个重定位表往往就是ELF文件中的一个段,所以其实重定位表也可以叫重定位段,也可以统称为重定位表。存在问题:输出文件将会有很多零散的段。举个栗子:假设a.o中的main函数相对于a.o的.text段的偏移是X,但是经过链接合并后a.o的.text段位于虚拟地址0x401000,那么main的地址应该是0x401000+X。
2025-09-26 17:07:20
964
原创 目标文件有什么
这些重定位的信息都记录在ELF文件的重定位表里面,对于每个须要重定位的代码段或数据段,都会有一个相应的重定位表。:(1)在目标文件中,如果是符号的定义且该符号不是”COMMON块“类型的,则st_value表示符号在段中的偏移。段的名字只在链接和编译的过程中有意义,但它不能真正的表示段的类型,对于编译器和链接器来说,主要决定段的属性是段的类型(sh_type)和段的标志位(sh_flags)。,该表描述了在ELF文件包含的所有段信息,比如每个段的段名、段的长度、在文件中的偏移、读写权限以及其它属性。
2025-09-24 22:12:25
702
原创 汇编语言第七章-第十章大实验总结
编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中。问题描述:显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能。运行结束后tabel表信息:(debug时使用-p 可以运行到此次loop结束的地方)问题描述:将Power idea公司的数据按照下图所示格式在屏幕显示出来。问题描述:编程,将data段中的数据以十进制的形式显示出来。图18 数值显示的运行结果。图9 书中提供的材料信息。
2024-06-21 22:09:46
412
原创 从拓扑结构看网络发展
搭建局域网需要选择合适的网络拓扑结构和网络设备,并进行安装和配置。同时需要配置共享资源和测试网络连接和传输速度。在局域网的搭建过程中,需要注意安全性和稳定性,并根据不同的需求选择合适的网络设备和拓扑结构。
2024-03-07 23:40:29
2684
原创 C语言goto用法
goto用法在大学课堂里老师往往会一笔带过,同时很多书籍都建议“谨慎使用,或者根本不用,goto 语句使程序的静态结构和动态结构不一致,从而使程序难以理解,难以查错。但我参加工作后发现goto语句常被用于异常和错误处理。很多人建议废除C++/C的goto语句,以绝后患。但实事求是地说,错误是程序员自己造成的,不是 goto 的过错。goto 语句至少有一处可显神通,它能从多重循环体中一下子跳到外面,用不着写很多次的break语句。for(....){// 如何冲出重重包围?break;
2023-10-11 23:05:09
438
原创 二维数组和指针的调用
二维数组和指针的调用二维数组和指针经常用于形参和实参的相互转化或者用于输出二维相互转化(例如用指针调用数组中的元素)。因此我们有许多固定的格式转换,但如果我们不了解其中的原理的话,我们很难熟练掌握运用,就和记物理公式一样只知道公式不知道原理是很难 取得好成绩的。要理解指针和二维数组的关系我们首先要记住最重要的一点:二数组就是一维数组!!!我们要学着将二维数组看成一维数组(其实所以的二维数组元...
2020-03-14 12:06:23
2362
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅