程序本质

回忆上次内容

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

编辑

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

  1. 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  2. sikulix___自动化办公___重复性_机械性_的电脑操作___python脚本___Java运行环境下德jar包完成自动化测试相关___截图编程控制键盘鼠标

    sikulix___自动化办公___重复性_机械性_的电脑操作___python脚本___Java运行环境下德jar包完成自动化测试相关___截图编程控制键盘鼠标 应用场景: 公司内的大佬更改了xml ...

  3. C Primer Plus_第6章_循环_编程练习

    1.题略 #include int main(void) { int i; char ch[26]; for (i = 97; i <= (97+25); i++) { ch[i-97] = i ...

  4. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  5. 宏定义中的##操作符和... and _ _VA_ARGS_ _

    1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operator, the ## operator can be used i ...

  6. C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节

    C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立艺术级图形界面 ...

  7. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

  8. BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划

    BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划 Description 给出一个长度为 的正整数序列Ci,求一个子序列,使得 ...

  9. C#中的流_字节_字符_字符串之间的相互转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  10. day18_文件处理_迭代器_生成器

    #!/usr/bin/env python # -*- coding:utf-8 -*- # ********************day18_文件处理_迭代器_生成器 ************** ...

随机推荐

  1. WPF新建viewModel实例化成员的注意事项

    不要用表达式体去初始化一个用做数据源(比如ItemSource)的引用类型成员.比如这种 public List<MainWindowItem> Items => new List& ...

  2. Istio(十二):Istio问题排查

    目录 一.模块概览 二.Envoy基础 2.1 Envoy 基础 三.Envoy示例 四.调试备忘录 4.1 配置 4.2 运行时 4.3 检查 Envoy 日志 4.4 配置 istiod 日志 一 ...

  3. Linux 系统用户登录时很慢怎么办

    第一步:编辑 /etc/ssh/sshd_config 文件 vim /etc/ssh/sshd_config 第二步:搜索 DNS 第三步: 将UseDNS前面的#注释删掉,同时将UseDNS后面的 ...

  4. 2024盘古石取证比赛(APK)

    题目列表 使用软件: Notepad++,火眼证据分析软件,雷电分析app,DB browser for SQLCipher 1. 分析伏季雅的手机检材,手机中诈骗APP的包名是:[答案格式:abc. ...

  5. Android 13 - Media框架(15)- OpenMax(三)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节学习了 media.codec 服务中的部分内容,这一节我们将一起了解 OMX IL 层的 API 以及相关的结构体等内容. 1.相关路径 以 ...

  6. 使用node压缩js

    先下载并安装Node 安装完成后打开cmd运行:node -v 运行:npm -v 确定node安装成功,然后安装uglifyjs,打开cmd输入下面命令: npm install uglify-js ...

  7. CMake 进行多项目中dll的编译和链接

    前言(maybe废话) 最近正在学习cherno的游戏引擎教程,他使用的是vs进行构建的,后面换了premake.而我用的是vscode+cmake,所以在构建整个项目的时候踩了不少的坑,也找了很多资 ...

  8. opencv-python 实现鱼眼矫正 棋盘矫正法

    .htmledit_views address, .htmledit_views cite, .htmledit_views dfn, .htmledit_views em, .htmledit_vi ...

  9. 规则引擎easyRules中组合规则的使用

    这两天想要做支付路由,要根据支付信息将支付请求转发到不同的支付渠道,可能要用到规则引擎,于是研究了一下开源的规则引擎产品.规则引擎核心知识与开源产品对比选型 ,这篇文章对规格引擎和开源产品有详细的介绍 ...

  10. 常见距离计算的Python实现

    常见的距离有曼哈顿距离.欧式距离.切比雪夫距离.闵可夫斯基距离.汉明距离.余弦距离等,用Python实现计算的方式有多种,可以直接构造公式计算,也可以利用内置线性代数函数计算,还可以利用scipy库计 ...