

编辑
真实的cpu

编辑
python3 到底是个啥?
which python3
ll /usr/bin/python3
编辑
直接运行
/usr/bin/python3.8python3.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-64arm、MIPS、RISC-V 也是常用的指令集回到代码
section 模块initinitialization
编辑
48 83 ec 08查看指令集

编辑

编辑
搜索

编辑
查询x86_64指令集

编辑
逐步搜索

编辑
48 83 ec 08 对应sub $0x8,%rsp
编辑
各种cpu指令

编辑
移植 port

编辑
不移植

编辑
架构师

编辑
python3 执行过程

编辑
python3 执行的过程大致是这样

编辑
先编译
hello.py 这个需要执行的程序加载到内存
编辑
解释执行

编辑
换句话说
python3 一个参数hello.pypython3 这个解释器来解释执行hello.pyhello.py中的语句一句句地依次解释执行
编辑

编辑
架构的层次

编辑
跨架构跨平台原理

编辑
跨架构跨平台原理
/usr/bin/python3.8 本身是二进制文件
编辑
python3.8 构建了一个运行时环境python语句python语句翻译成系统能读懂输入输出python3 的程序是一个 5.3M 的可执行文件python3 里面全都是 cpu 指令objdump -d ~/python3 > python3.asmuname -a可以查询指令集python3这个可执行文件python3一个参数hello.pypython3对于hello.py一句句的解释执行hello worldpython3执行完毕hello.py的过程hello world开始呢?🤔
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。