• [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/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的用户目录下
    • 这个文件还是能够执行的
    • 将这个文件转化为字节形态
    • 确实可以转化
    • 但是这个文件我们看不懂啊!!!😭

  • 相关阅读:
    es6---模块化
    Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动?
    [网络安全]实操DVWS靶场复现CSRF漏洞
    Python爬虫(十八)_多线程糗事百科案例
    liunx python3连接oracle
    如何将项目打包上传到NuGet服务器(图文教程)?
    详解中小微风控中的财税票数据
    Spring Boot 整合 NoSQL(3)
    与专业安全厂商相比,戴尔做安全的优势是什么?
    Python测试之Pytest详解
  • 原文地址:https://blog.csdn.net/overmind/article/details/128069936