[oeasy]python0021_python虛擬機的位置_可執(zhí)行文件_轉(zhuǎn)化為字節(jié)形態(tài)
程序本質(zhì)
回憶上次內(nèi)容
\n
就是換行他對應(yīng)著
ascii
字符的代碼是(10
)10進(jìn)制
他的英文是 LF,意思是
Line Feed
我們可以在《安徒生童話》中找到每個字符對應(yīng)的字節(jié)形態(tài)

不光txt文件是文件
我們的python游樂場本質(zhì)上也是一個二進(jìn)制可執(zhí)行的文件
這個文件在哪?
我們可以讀懂這個可執(zhí)行文件嗎???
python3
到底是個啥?
which python3
ll /usr/bin/python3
這個 python3
是一個符號鏈接文件
只有9字節(jié)
他指向 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 是二進(jìn)制 binary
python3.8 是這個文件的名稱
位置就在/usr/bin/python3.8
在運行命令的時候
把這個文件從硬盤裝載到內(nèi)存
然后用 cpu 開始逐行執(zhí)行文件中的0101指令
可以把他復(fù)制到shiyanlou用戶的宿主文件夾下嗎?
復(fù)制

復(fù)制到shiyanlou用戶文件夾下
再觀察
把/usr/bin/python3這個py文件的解釋器拷貝到~(當(dāng)前用戶文件夾)
cp的意思是copy
cp /usr/bin/python3 ~
確認(rèn)python3已經(jīng)拷到~(當(dāng)前用戶文件夾)
ls的意思是list
ls ~/python3.8
查看python3文件細(xì)節(jié)
ls -lah ~/python3.8
python3 指向的 python3.8 只有 5.3M
這個可執(zhí)行文件怎么這么?。?/p>
5.3M 這也就是一張照片的大小
以前的 Python3.5 只有 4.3M
更小
目前這 5.3M 的 Python3 里面到底有什么呢???
研究 python3
用vi打開這個剛拷貝過來的python3vi ~/python3.8
這個樣子看起來
全是亂碼
完全看不懂啊

這個東西我們確實看不懂
以字節(jié)形式觀察python3.8
vi ~/python3.8
用vim打開~/python3.8

:
進(jìn)入命令行模式
:%!xxd
我們可以看到這個文件的二進(jìn)制形態(tài)%
是指的對于所有行的范圍!是執(zhí)行外部命令
xxd
指的是轉(zhuǎn)化為 16 進(jìn)制形式什么是xxd命令呢?
xxd
xxd 可以查看文件的二進(jìn)制形態(tài)
dump的本意是(傾倒垃圾)
這里指的是轉(zhuǎn)儲
把文件轉(zhuǎn)儲為16進(jìn)制形式匯編代碼形式

:xxd –r
可以還原回去 ??:%!xxd
轉(zhuǎn)成字節(jié)形態(tài):%!xxd –r
轉(zhuǎn)回文本形態(tài)反復(fù)橫跳...
另存為python3.8hex
一行是(16)10 進(jìn)制 ?個字節(jié)
G到最后一行
總共有 343148 行

這就是 真正的機器語言??
cpu能執(zhí)行的東西
真真切切看到了的
真的存在硬盤上 01010 的二進(jìn)制可執(zhí)行指令??!
這些指令執(zhí)行出來就是我們的游樂場!?。?/p>
或者說是我們的python虛擬機
可是這個指令我們看不懂怎么辦???
先把他另存出來
:w python3.8hex
把當(dāng)前緩存(buffer)另存(write)為
python3.8hex
對python3.8強制退出
:q!
不保存修改強制退出
python3.8hex就是我們要的機器語言的字節(jié)形態(tài)
可是這字節(jié)形態(tài)我們還是看不懂啊
總結(jié)
python3
的程序是一個 5.3M 的可執(zhí)行文件我們通過which命令找到這個python3.8的位置
將這個python3.8復(fù)制到shiyanlou的用戶目錄下
這個文件還是能夠執(zhí)行的
將這個文件轉(zhuǎn)化為字節(jié)形態(tài)
確實可以轉(zhuǎn)化
但是這個文件我們看不懂啊?。。??

怎么才能看懂這些東西呢???
我們下次再說!??
藍(lán)橋->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