编辑
真实的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
开始呢?🤔
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。