![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译器
文章平均质量分 84
wuguinianjing
这个作者很懒,什么都没留下…
展开
-
运行时加载动态库
一个程序从源文件编译生成可执行文件的步骤:预编译 --> 编译 --> 汇编 --> 链接(1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开、处理条件编译指令、处理#include指令等。(2)编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。(3)汇编是将汇编代码转变成二进制文件。(4)链接将二进制文件链接成一个可执行的命令,主要是把分散的数据和代码收集并合成一个单一的可加载并可执行的的文件。原创 2021-11-02 00:36:17 · 1837 阅读 · 0 评论 -
链接----桩打桩
桩打桩代理模式真是无处不在,谁想,运行时动态链接也是,哈哈,当然也是看了腾讯的libco,协程库,再来研究研究其运行时动态链接目标**目标:**截获来自共享库的调用,以及出于某种原因截获它们后做一些事情,我们通常想要做的是截获一个共享库的函数调用,你可以追踪对某个特殊库函数的调用次数,验证和追踪它的输入和输出,或者甚至把它替换成一个完全不同的实现。也许是记录一些统计数据或做一些错误检测,libco协程里的也很有意思,将系统调用截获,然后按照预期调用实际的函数。基本思想给定一个需要打桩的目标函原创 2021-04-18 17:43:40 · 321 阅读 · 0 评论 -
编译的相关环境变量
编译的相关环境变量PS:此处的编译指的是完整的编译链接过程。LD_LIBRARY_PATH改变共享库查找路径最简单的方法就是使用LD_LIBRARY环境变量,这个方法可以临时改变某个应用程序的共享路径查找路径,而不会影响系统中的其他程序。动态库的查找过程/ lib 和/usr/lib是一些很常用的、成熟的,一般系统本身所需要的库;/usr/local/lib是非系统所需的第三方程序的共享库基于Glibc的操作系统,如所有的LINUX系统,动态链接的ELF可执行程序在启动时同时,还好启动原创 2021-04-17 18:03:42 · 221 阅读 · 0 评论 -
链接的相关知识
链接链接的任务链接的两个基本任务符号解析一个程序会定义和引用符号,汇编器(as)会将符号定义存储在目标文件中(形成符号表),每个符号对应一个结构数组,包含了该有关该符号的信息。而符号解析就是在链接器链接过程中,链接器将每个符号引用与一个符号定义相关联(此时,链接器必须决定将其中的某个定义用于所有后续引用),一旦链接器和一个独一无二的的目标建立联系,每个引用都会有一个唯一的符号定义,所以就存在一种情况,多个模块中存在多个符号定义,就有相应的强弱符号规则(如果只有单个模块,编译器当然能确定出来,但原创 2021-04-17 17:29:50 · 532 阅读 · 0 评论 -
符号修饰与函数签名(编译时避免冲突)
1.引入目的约在20世纪70年代以前,编译器编译源代码产生目标文件时,符号名与相应的变量和函数的名字是一样的。比如一个汇编源代码里面包含了一个函数foo,那么汇编器将它编译成目标文件以后,foo在目标文件中的相对应的符号名也是 foo。当后来UNIX平台和C语言发明时,已经存在了相当多的使用汇编编写的库和目标文件。这样就产生了一个问题,那就是如果一个C程序要使用这些库的话,C语言中不可以使用这些库中定义的函数和变量的名字作为符号名,否则将会跟现有的目标文件冲突。比如有个用汇编编写的库中定义了-个函数叫做原创 2020-11-23 22:54:49 · 439 阅读 · 0 评论 -
编译器的工作
编译器的编译顺序?编译器从上到下顺序扫描程序。sizeof() 编译时计算出来 ++运行时才进行原创 2020-11-14 22:03:00 · 117 阅读 · 0 评论