一、程序
程序按一定格式编辑的好的文件(如linux elf)。操作系统可以通过加载此文件执行。程序中一般包含程序格式,协议,入口地址,各段的位置。
1、ELF文件种类
- exec可执行文件
- rel 可重定位文件
- 共享目标文件 (动态库文件)
- core dump文件
2、elf文件以及结构
- 基本都有代码段和数据段
- elf文件结构 elf header
- .text 代码
- .data 数据
- .rodata 只读
- .bss 未初始化
- 。。。
- 相关指令
file 获取文件了类型
readelf 查看elf文件的信息
objdump 查看elf文件的具体信息
type 命令的类型
二、如何启动一个程序
操作系统lib exec系列函数库。加载程序并执行。
运行起来的程序就是进程
1、启动进程的过程
- 程序加载器。 program loader
- 调用exec加载一个可执行文件,同时给他传递 命令行参数(argv之类的) 和环境参数表
- 使用 strace 查看过程,size查看程序大小
三、php解释器工作原理
先加载php解释器,然后传入脚本名称,php解释器解释执行。
- os加载php解释器
- php脚本传入给php解释器
- php解释器读取php脚本内容,解释执行
- 退出程序,运行到最后,或者exit。通过echo $? 可以获取退出状态码
print_r($argv);
echo 123;
exit(12);