深入理解计算机系统
TianBL2017
做一个能解决问题的人
展开
-
C语言->字符指针学习笔记
字符串常量是一个字符数组,例如:"abc123abc"在字符串的内部表示中,字符数组以空字符'\0'结尾,所以1.程序可以通过检查空字符找到字符数组的结尾;2.字符串常量占据的存储单元数也因此比双引号内的字符数大1;3.当类似于这样一个字符串出现在程序中时,实际上是通过字符指针访问该字符串的,也就是说,字符常量可通过一个指向其第一个元素的指针来访问。我们写一段代码:...原创 2020-04-19 17:33:03 · 304 阅读 · 0 评论 -
知识积累->目标文件里有什么(3)->使用MachOView解析一个可执行文件的文件头
我们可以使用MachOView查看可执行文件的结构;打开MachOView,使用MachOView打开之前的.o文件:我们可以清晰的看到这个文件的结构:原创 2019-11-04 22:36:56 · 334 阅读 · 0 评论 -
知识积累->目标文件里有什么(2)->解析一段代码
编译一段具有代表性的代码:int printf(const char *format,...);int global_init_var=84;int global_uninit_var;void func1(int i){ printf("%d\n",i);}int main(void) { static int static_var=85; int sta...原创 2019-11-03 18:08:18 · 106 阅读 · 0 评论 -
知识积累->目标文件里有什么(1)
程序源代码被编译后主要分成两种段:程序指令和程序数据,代码属于程序指令,而数据段和.bss属于程序数据。为什么程序指令和数据不混在在一起而是分开放?1.因为程序被装载后,数据和指令分别被映射到两个虚存区域。由于数据区域对于进程来说是可读写的。而指令区域对于进程来说是可读的。所以这两个虚存区域的权限可以分别被设置成可读写可只读,可以防止程序的指令被有意或无意地改写。2.对于现在的CP...原创 2019-10-27 19:47:50 · 156 阅读 · 0 评论 -
知识积累->目标文件里有什么(0)
编译器编译源代码后生成的文件叫做目标文件,目标文件从结构上讲,它已经是编译后可执行文件的格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执行文件结构上有所不同。目标文件的格式现在pc平台流行的可执行文件格式,主要是windows平台下的PE和Linux的ELF,它们都是COFF格式的变种。动态链接库文件都按照可...原创 2019-10-27 16:14:04 · 119 阅读 · 0 评论 -
深入理解计算机系统之静态库的链接运行(1)
链接链接是将各种代码和数据片段收集并组合为一个单一文件的过程。这个文件可以被加载到内存并执行。链接可以执行于编译时,也可以执行于加载时,甚至执行于运行时。在早期的计算机系统中,链接是手动执行的。在现代系统中,链接是由叫做链接器的程序自动执行的。静态链接像linuxLD程序这样的静态链接器,以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的,可以加载和运行的可执行...原创 2019-10-20 22:43:43 · 135 阅读 · 0 评论 -
深入理解计算机系统之静态库的链接运行(0)
最近的工作是为iOS平台封装算法库,借此机会在周末复习修炼一下“内功”,将深入理解计算机系统相关章节进行复习。先看一段最简单的C语言代码:#include <stdio.h>int main() { printf("Hello, World!\n"); return 0;}我们追踪这段程序运行的声明周期来开始系统的学习。这段程序的声明周期是从一个...原创 2019-10-20 16:17:53 · 107 阅读 · 0 评论