[oeasy]python0021_python虚拟机的位置_可执行文件_转化为字节形态
程序本质
回忆上次内容
\n
就是换行他对应着
ascii
字符的代码是(10
)10进制
他的英文是 LF,意思是
Line Feed
我们可以在《安徒生童话》中找到每个字符对应的字节形态

不光txt文件是文件
我们的python游乐场本质上也是一个二进制可执行的文件
这个文件在哪?
我们可以读懂这个可执行文件吗?🤔
python3
到底是个啥?
which python3
ll /usr/bin/python3
这个 python3
是一个符号链接文件
只有9字节
他指向 python3.8
python3.8
也在 /usr/bin 里面
就是/usr/bin/python3.8

python3.8
是一个5.3M的文件
可以看得见
可以直接运行这个phthon3.8吗?
直接运行
/usr/bin/python3.8
python3.8
就在硬盘里呆着usr 是 unix software resource
bin 是二进制 binary
python3.8 是这个文件的名称
位置就在/usr/bin/python3.8
在运行命令的时候
把这个文件从硬盘装载到内存
然后用 cpu 开始逐行执行文件中的0101指令
可以把他复制到shiyanlou用户的宿主文件夹下吗?
复制

复制到shiyanlou用户文件夹下
再观察
把/usr/bin/python3这个py文件的解释器拷贝到~(当前用户文件夹)
cp的意思是copy
cp /usr/bin/python3 ~
确认python3已经拷到~(当前用户文件夹)
ls的意思是list
ls ~/python3.8
查看python3文件细节
ls -lah ~/python3.8
python3 指向的 python3.8 只有 5.3M
这个可执行文件怎么这么小?
5.3M 这也就是一张照片的大小
以前的 Python3.5 只有 4.3M
更小
目前这 5.3M 的 Python3 里面到底有什么呢?🤔
研究 python3
用vi打开这个刚拷贝过来的python3vi ~/python3.8
这个样子看起来
全是乱码
完全看不懂啊

这个东西我们确实看不懂
以字节形式观察python3.8
vi ~/python3.8
用vim打开~/python3.8

:
进入命令行模式
:%!xxd
我们可以看到这个文件的二进制形态%
是指的对于所有行的范围!是执行外部命令
xxd
指的是转化为 16 进制形式什么是xxd命令呢?
xxd
xxd 可以查看文件的二进制形态
dump的本意是(倾倒垃圾)
这里指的是转储
把文件转储为16进制形式汇编代码形式

:xxd –r
可以还原回去 😉:%!xxd
转成字节形态:%!xxd –r
转回文本形态反复横跳...
另存为python3.8hex
一行是(16)10 进制 个字节
G到最后一行
总共有 343148 行

这就是 真正的机器语言🤭
cpu能执行的东西
真真切切看到了的
真的存在硬盘上 01010 的二进制可执行指令!!
这些指令执行出来就是我们的游乐场!!!
或者说是我们的python虚拟机
可是这个指令我们看不懂怎么办?🤔
先把他另存出来
:w python3.8hex
把当前缓存(buffer)另存(write)为
python3.8hex
对python3.8强制退出
:q!
不保存修改强制退出
python3.8hex就是我们要的机器语言的字节形态
可是这字节形态我们还是看不懂啊
总结
python3
的程序是一个 5.3M 的可执行文件我们通过which命令找到这个python3.8的位置
将这个python3.8复制到shiyanlou的用户目录下
这个文件还是能够执行的
将这个文件转化为字节形态
确实可以转化
但是这个文件我们看不懂啊!!!😭

怎么才能看懂这些东西呢?🤔
我们下次再说!👋
蓝桥->https://www.lanqiao.cn/teacher/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython
视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy