真实的cpu
python3
到底是个啥?
which python3 ll /usr/bin/python3
直接运行
/usr/bin/python3.8
python3.8
就在硬盘里呆着复制
#把/usr/bin/python3这个py文件的解释器拷贝到~(当前用户文件夹) #cp的意思是copy cp /usr/bin/python3 ~ #确认python3已经拷到~(当前用户文件夹) #ls的意思是list ls ~/python3.8 #查看python3文件细节 ls -lah ~/python3.8
研究 python3
#用vi打开这个刚拷贝过来的python3 vi ~/python3.8
cpu
以字节形式观察python3.8
vi ~/python3.8
:%!xxd
我们可以看到这个文件的二进制形态%
是指的对于所有行的范围!是执行外部命令
xxd
指的是转化为 16 进制形式xxd
:xxd –r
可以还原回去 :%!xxd
转成字节形态:%!xxd –r
转回文本形态另存为python3.8hex
汇编语言助记符
#先把~/python3对应的机器语言输出为汇编指令形式(反汇编) objdump -d python3.8 > python3.8.asm vi python3.8.asm
对比
vi -o python3.8hex python3.8.asm
找到了
/48 83
找到上下的对应关系查找对应关系
423000
就是初始化(init)的 cpu 开始执行指令的地址指令集
x86-64
arm
、MIPS
、RISC-V
也是常用的指令集回到代码
section
模块init
initialization
48 83 ec 08
查看指令集
搜索
查询x86_64指令集
逐步搜索
48 83 ec 08
对应sub $0x8,%rsp
各种cpu指令
移植 port
不移植
架构师
python3 执行过程
python3 执行的过程大致是这样
先编译
hello.py
这个需要执行的程序加载到内存解释执行
换句话说
python3
一个参数hello.py
python3
这个解释器来解释执行hello.py
hello.py
中的语句一句句地依次解释执行架构的层次
跨架构跨平台原理
跨架构跨平台原理
/usr/bin/python3.8
本身是二进制文件python3.8
构建了一个运行时环境python语句
python语句
翻译成系统能读懂输入输出python3
的程序是一个 5.3M 的可执行文件python3
里面全都是 cpu 指令objdump -d ~/python3 > python3.asm
uname -a
可以查询指令集python3
这个可执行文件python3
一个参数hello.py
python3
对于hello.py
一句句的解释执行hello world
python3
执行完毕hello.py
的过程hello world
开始呢?