程序实质
回顾上次内容
-
\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/bin/python3.8
- usr 是 unix software resource
- bin 是二进制 binary
- 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 关上这个刚拷贝过去的 python3
vi ~/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/teache…
- github->https://github.com/overmind19…
- gitee->https://gitee.com/overmind198…
- 视频 ->https://www.bilibili.com/vide… 作者:oeasy