欢迎光临散文网 会员登陆 & 注册

[oeasy]python0021_python虚拟机的位置_可执行文件_转化为字节形态

2022-11-27 21:12 作者:oeasy  | 我要投稿

程序本质

回忆上次内容

  • \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


[oeasy]python0021_python虚拟机的位置_可执行文件_转化为字节形态的评论 (共 条)

分享到微博请遵守国家法律