Go程序启动的疑问?

来源:1-4 Go 程序是怎么跑起来的

拧壶冲

2021-05-24 11:48:00

曹大老师,按照本课的讲解和理解。

  1. 我们写的代码,通过编译,输出为二进制可执行程序。

  2. 在linux我们可以通过readelf下面查编译后的文件。

  3. dlv我们可以查看程序启动后的执行情况。


问题描述:

编译的二进制文件,包含一系列指令和汇编代码, 所以当我们执行程序的时候,操作系统会将文件读入内存,执行对应的指令。操作系统读取二进制可执行文件,其中就包括划分内存区域,分配数据在内存中(可能包含静态的,动态的等等)。这个应该是程序的初始化,1. 这个理解对不对?


2. 在初始化完成后,操作系统会读到entry point address,因为初始化已经完成,这样读入entry point后实际就是开始执行程序的指令和数据了,对吗?


3. 有没有什么工具或者方法,能够查看或者分析操作系统如何初始化的过程?( readelf能查看吗?)

写回答

1回答

Xargin

2021-05-24

  1. 没什么问题

  2. 是的

  3. 在 linux 下执行 strace ./your_binary 能看到一些加载相关的系统调用

再细节的得去看 loaders 之类的知识了,这方面我个人不是特别感兴趣,你可以找找相关的书~比如国人写的那本《程序员的自我修养:链接、装载与库》或者国外的《linders and loaders》,这本在第二课的参考资料里我给出来了,参见 coding。

0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程