Go程序启动的疑问?
来源:1-4 Go 程序是怎么跑起来的
拧壶冲
2021-05-24 11:48:00
曹大老师,按照本课的讲解和理解。
我们写的代码,通过编译,输出为二进制可执行程序。
在linux我们可以通过readelf下面查编译后的文件。
dlv我们可以查看程序启动后的执行情况。
问题描述:
编译的二进制文件,包含一系列指令和汇编代码, 所以当我们执行程序的时候,操作系统会将文件读入内存,执行对应的指令。操作系统读取二进制可执行文件,其中就包括划分内存区域,分配数据在内存中(可能包含静态的,动态的等等)。这个应该是程序的初始化,1. 这个理解对不对?
2. 在初始化完成后,操作系统会读到entry point address,因为初始化已经完成,这样读入entry point后实际就是开始执行程序的指令和数据了,对吗?
3. 有没有什么工具或者方法,能够查看或者分析操作系统如何初始化的过程?( readelf能查看吗?)
1回答
Xargin
2021-05-24
没什么问题
是的
在 linux 下执行 strace ./your_binary 能看到一些加载相关的系统调用
再细节的得去看 loaders 之类的知识了,这方面我个人不是特别感兴趣,你可以找找相关的书~比如国人写的那本《程序员的自我修养:链接、装载与库》或者国外的《linders and loaders》,这本在第二课的参考资料里我给出来了,参见 coding。
相似问题