13.程序员的自我修养---运行库实现
13.1 C 语言运行库13.1.1 开始1.程序运行的最初入口点不是 main 函数,而是由运行库为其提供的入口函数。它主要负责三部分工作:准备好程序运行环境以及初始化运行库,调用 main 函数执行程序主题,清理程序运行后的各种资源。2.运行库为所有程序提供的入口函数应该相同,在链接程序时必须指定该入口函数名。入口函数:void mini_crt_entry(void){//初始化部分int ret = main();//结束部分exit(ret);}这里的初始化主要负责准备好程序运行的环境,包括准备 main 函数的参数,初始化运行库,包括堆,IO等,结束部分主要负责清理程序运行资源。main 参数:我们知道 main 函数的原型为 : int main(int argc, char *argv[]);其中 argc 和 argv 分别是 main 函数的2个参数,它们分别表示程序运行时的参数个数和执行指向参数的字符串指针数组。在 Linux 下,当进程被初始化时,它的堆栈结构中就保存着环境变量和传递给 main 函数的参数,我们可以通过 ESP 寄存器获得这2个参数。但是一旦进入到 mini_crt_entry之后,ESP 寄存器就会随着函数的执行而被改变,我们知道EBP的内容就是进入函数后 ESP+4。那么可以推断 EBP-4 所执行的内容应该就是 argc,而 EBP-8 就是 argv。CRT 初始化:完成了获取 main 函数参数的代码后,还一个在入口函数里对 CRT 进行初始化。需要初始化的主要是堆和 IO 部分。结束部分:Mini CRT 的结束部分很简单,它要完成2项任务:一个就是由调用 atexit() 注册的退出回调函数;另外一个就是实现结束进程。13.1.2 堆的实现有了 CRT 的入口函数,exit()函数之后,下一步的目标就是实现堆操作,即 malloc()函数和 free() 函数。brk 系统调用可以设置进程的数据段边界,而 sbrk 可以移动进程的数据段边界。显然,如果将数据段边界后移,就相当于分配了一定量的内存。13.1.3 IO与文件操作13.1.4 字符串相关操作13.1.5 格式化字符串
13.1 C 语言运行库
13.2 如何使用 Mini CRT
13.3 C++ 运行库实现
13.4如何使用 Mini CRT++
13.程序员的自我修养---运行库实现相关推荐
- 【读书笔记】【程序员的自我修养 -- 链接、装载与库(三)】函数调用与栈(this指针、返回值传递临时对象构建栈、运行库与多线程、_main函数、系统调用与中断向量表、Win32、可变参数、大小端
文章目录 前言 介绍 内存 内存布局 栈与调用惯例 堆与内存管理 运行库 入口函数和程序初始化 C/C++运行库 运行库与多线程 C++全局构造与析构 fread 实现 系统调用与API 系统调用介绍 ...
- 腾讯朋友力荐书籍:程序员的自我修养:链接、装载与库
后台开发需要学习底层知识,只有底层知识掌握了,学一些中间件是信手捏来,中间件也是跑在底层的操作系统上.<<程序员的自我修养:链接.装载与库>>对学习底层知识非常有帮助,腾讯的朋 ...
- 程序员的自我修养—链接、装载与库 笔记
程序员的自我修养-链接.装载与库 笔记 内存管理 直接使用物理内存地址 虚拟内存-分段 虚拟内存-分页 分页和分段的主要区别 段页式 代码生成过程 预处理 编译 词法分析 语法分析 语义分析 源代码优 ...
- 【读书笔记】【程序员的自我修养 -- 链接、装载与库(二)】进程虚拟地址空间、装载与动态链接、GOT、全局符号表、共享库的组织、DLL、C++与动态链接
文章目录 前言 介绍 可执行文件的装载与进程 进程虚拟地址空间 装载方式 操作系统对可执行文件的装载 进程虚存空间分布 ELF文件的链接视图和执行视图 堆和栈 Linux 内核装载ELF & ...
- 《程序员的自我修养--链接、装载与库》学习笔记(一)
本系列文章是<程序员的自我修养–链接.装载与库>(电子工业出版社)一书的学习摘录笔记,本文是书中1.1至1.4部分. 文章目录 基础概念 硬件 软件 基础概念 #include <s ...
- 【《程序员的自我修养---链接装载于库》读书笔记】可执行文件的装载与进程
系列文章目录 [<程序员的自我修养-链接装载于库>读书笔记]初探ELF [<程序员的自我修养-链接装载于库>读书笔记]windows PE/COFF [<程序员的自我修养 ...
- 程序员的自我修养——链接、装载与库 笔记(一)
程序员的自我修养 悄咪咪的说一句,这篇文章可能需要对计算机有过系统的学习,不然看着可能一脸懵.如果有疑问的话,当然,很可能是我太菜了,写的不好,欢迎大家评论区留言指教!此笔记只是刚刚开始,后续我会 ...
- 程序员的自我修养--链接、装载与库笔记:总结
<程序员的自我修养----链接.装载与库>这本书是2009年出版的,书中有些内容的介绍可能已经过时,已不再适用于现在的C/C++开发,而且书中展示的结果均是在32位机上进行的操作,这里全部 ...
- 《程序员的自我修养—链接、装载与库》pdf书签,目录分享
在网上下载到<程序员的自我修养-链接.装载与库>pdf版本,拜读之后受益匪浅,但是因为下载的pdf没有书签,所以想要查找某一章的内容不是很方便,于是自己制作了一下书签文件,将书签文件导入p ...
- 《程序员的自我修养--链接、装载与库》笔记
写在前面:本文是我在阅读<程序员的自我修养–链接.装载与库>一书时做的笔记,所谓好记性不如烂笔头嘛,其中主要摘抄记录了本人着重阅读的章节:除此之外还有小部分本人对书中内容的个人理解.以及文 ...
最新文章
- macos终端快捷键
- link 标签的 rel 属性
- leetcode 398. Random Pick Index | 398. 随机数索引(Java)
- java与java ee_Java EE 7社区调查结果!
- 一步一步写算法(之排序二叉树删除-3)
- android usb虚拟串口,USB 虚拟串口简介
- ORACLE11g升级19c,报ORA-01017
- 【MM小贴士】SAP 批次双单位 CWM 的使用演示
- 成都百知教育关于Shopee 平台政策规则解读!
- 数字电视机顶盒ATSC制式详细介绍
- C/C++:long int与long long的区别
- php星空背景动态,纯CSS3炫酷3D星空动画特效
- 不可思议但又无处不在的漏洞,WEB安全基础入门—业务逻辑漏洞
- 纯HTML也能访问数据库
- 年度最火购车方式网上购车平台购车,强势来袭!
- react为什么要废弃三个生命周期?
- Kotlin基础学习 17
- Spark 练习测试题(答案仅供参考)
- linux断电分区表丢失,linux修复丢失的分区表
- Tomcat集群通过redis实现session共享