程序本质
回忆上次内容
-
\n
就是换行
- 他对应着
ascii
字符的代码是(10
)10进制
- 他的英文是 LF,意思是
Line Feed
- 我们可以在《安徒生童话》中找到每个字符对应的字节形态
- 不光txt文件是文件
- 我们的python游乐场本质上也是一个二进制可执行的文件
- 这个文件在哪?
- 我们可以读懂这个可执行文件吗?????
python3
到底是个啥?
- 这个 python3
- 是一个符号链接文件
- 只有9字节
- 他指向 python3.8
- python3.8
- 也在 /usr/bin 里面
- 就是/usr/bin/python3.8
- python3.8
- 是一个5.3M的文件
- 可以看得见
- 可以直接运行这个phthon3.8吗?
直接运行
-
python3.8
就在硬盘里呆着
- 位置就在/usr/bin/python3.8
- usr 是 unix software resource
- bin 是二进制 binary
- python3.8 是这个文件的名称
- 在运行命令的时候
- 把这个文件从硬盘装载到内存
- 然后用 cpu 开始逐行执行文件中的0101指令
- 可以把他复制到shiyanlou用户的宿主文件夹下吗?
复制
- 复制到shiyanlou用户文件夹下
- 再观察
- python3 指向的 python3.8 只有 5.3M
- 这个可执行文件怎么这么小?
- 5.3M 这也就是一张照片的大小
- 以前的 Python3.5 只有 4.3M
- 更小
- 目前这 5.3M 的 Python3 里面到底有什么呢?????
研究 python3
- 这个样子看起来
- 全是乱码
- 完全看不懂啊
- 这个东西我们确实看不懂
以字节形式观察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的用户目录下
- 这个文件还是能够执行的
- 将这个文件转化为字节形态
- 确实可以转化
- 但是这个文件我们看不懂啊!!!????
- 怎么才能看懂这些东西呢?????
- 我们下次再说!????
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython
- 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy