目标代码插桩需要重新编译程序吗
1. 编译是将整个源程序代码文件一次性翻译成目标程序代码,最终生成可执行文件,对么
正确。
编译(compilation , compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
2. 编译的目标代码
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。目标代码有三种形式:
① 可以立即执行的机器语言代码,所有地址都重定位;
② 待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
③ 汇编语言代码,须经过汇编程序汇编后,成为可执行的机器语言代码。
目标代码生成阶段应考虑直接影响到目标代码速度的三个问题:一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量。
3. 源代码有什么用
源代码的作用为:
1、生成目标代码,即计算机可以识别的代码。
2、对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。
注意:需要指出的是,源代码的修改不能改变已经生成的目标代码。如果需要目标代码做出相应的修改,必须重新编译。
(3)目标代码插桩需要重新编译程序吗扩展阅读:
源代码的版权分类:
1、自由源代码:自由源代码一般是不仅可以免费得到,而且公开源代码,任何用户只要想用都可以去借鉴、使用或者修改自由源代码。
2、非自由源代码:非自由源代码则是不公开源代码。所有一切通过非正常手段获得非自由软件源代码的行为都将被视为非法。所以如果未经源代码所有者私自使用源代码是侵犯版权的行为,严重的会被追究相应的法律责任。
4. 为什么c/c++开源库使用前需要编译
这样可以运行,但有两个问题:
每个新程序要使用开源库中的api,都需要重新编译部分甚至整个开源库源代码,这会浪费大量的时间;
如果有多个程序同时使用同一个库,每个程序都将生成一份这个库的二进制文件,这会浪费大量的磁盘空间;当这些程序同时运行时,每个程序的内存中都会装载一份库的二进制代码,这会浪费大量的内存空间。
因此,直接将第三方库的源代码包含到当前程序的代码中编译是效率非常低下的方式,实际中除非极特殊情况,不会考虑使用这种方式,而是将开源库源代码编译成二进制的动态链接库,其他程序要使用其中的API时,只需要指定动态链接库的入口点,程序运行时加载动态链接库 并找到其中的函数入口点就可以调用开源库API。并且,当有多个程序调用此动态链接库时,只会占用一份内存空间。
5. 为什么我每次编译都是全部重新编译
这里以 C 语言源程序为例,关于多个 C 语言源程序之间的编译顺序问题,这个是需要在 MAKEFILE 文本文件中写好多个 C 语言源程序的先后顺序,如果多个 C 语言源程序的先后顺序写得不正确,那么在使用 make 命令对 MAKEFILE 做相关的编译、链接工作时,就会把所有的 C 源程序都重新编译一遍(按理说:MAKEFILE 的最大好处就是:如果整个软件系统由多个 C 源程序组成,但是只有其中一个 C 源程序的代码做了改动,而其他的源代码没有做过任何改动,那么只需要编译这一个 C 源程序的目标文件,然后再和别的 C 源程序的目标文件相链接,生成最终的可执行文件即可,而不需要整个都重新编译一遍)
你再仔细把你的 MAKEFILE 文件中的各个 C 源程序的先后次序检查一下,看看是否写得有错误。写 MAKEFILE 文件也是需要仔细推敲的。
6. 修改了config文件,程序是否必须重新编译
不需要重编译的。
一般config文件记录一些结构化的配置信息。程序在执行的时候读取,再格式化后使用。配置文件跟执行代码是两部分,不需要重新编译。