文件都是以二進制存儲,那麼一個txt改成exe,是否有機率可以運行?

寂滅輪迴-情殤


先說結論:可以!

原因:後綴對計算機來說啥也不代表,它只用來windows操作系統去對應用那種方式去顯示給人看。

測試方法:你找一個可以運行的exe,用ue或者notepad++或者其他啥,或者自己編程打開讀取16進制文件。看看裡面是啥?你照原樣抄到一個文檔也好啥玩意也行,最後改成exe,照樣可以運行。

原理:學過c語言的都應該可以理解,不用理解最底層的,就理解到指針就可以了。計算機存儲一個不管啥,都是在對應的地址放入對應的數值,並沒有什麼格式的概念,連代表格式本身的方式都是數值,只要你能原樣抄下來,都可以被計算機識別。


半革


題主這個問題太正常了,txt是萬能,你可以用txt編寫任何程序,只需要將擴展名修改成編程語言對應的後綴就可以在對應的編譯器或者解釋器中運行,如果你要把它變成exe文件再打包下就行了。

如果題主你要說不要打包,直接改後綴從txt變成exe,那就比較難寫了,需要高手,我這有一個不需要高手就可以驗證的方法,下圖我用一個例子說明這個問題

這裡我就以navicat這個軟件為例(選題沒啥理由,隨手點開的)

1.我先把navicat.exe剪切放到其他地方

比如桌面,注意時間是2019.3.20 21:50

2.再在此目錄下新建一個navicat.txt文件

時間2019.5.17 10:47, 證明是新建的

3.用記事本打開navicat.exe,將字符串複製到navicat.txt中

當然你可以在txt中手寫一遍。

4.再將navicat.txt改成navicat.exe

時間是2019.5.17 10:47 ,證明是由txt改過來的。

5.執行新的navicat.exe,

完美執行。

6.原版跟由txt改成exe版文件對比,文件一模一樣

結論:完全沒問題,打開正常。

你看我是把字符串直接寫在txt文件裡,然後改擴展名為exe的,雖然這個寫的動作是複製粘貼,但完全說明了題主提出的問題。


有初有終


做個實驗就知道了,現在有一個txt文件格式的文件和一個exe文件格式的文件,先把txt文件的內容清空,然後將exe文件以記事本方式打開把裡面的內容全部拷貝到開始清空過的txt文件裡面,最後把txt文件的後綴名改為.exe運行一下試試


y迭名先生y


結論:拋開平臺說文件,都是不負責任的。本文教你文件的正確打開方式。


前言

題主之所以造成這些疑惑,主要是對計算機操作系統處理文件的機制不明所致。


文件類型

描述“文件都是以二進制存儲”,是不準確的。

分兩個平臺說。


1 - windows

Windows系統文件按照不同的格式和用途分很多種類,為便於管理和識別,在對文件命名時,是以擴展名加以區分的,即文件名格式為: filename.ext。

這樣就可以根據文件的擴展名,判定文件的種類,從而知道其格式和用途。

這些文件都有其存儲格式,在磁盤上使用二進制/十六進制存儲,

但是,如何讀這些文件就成了問題,計算機認識,而人不認識。

要看這些文件,你用什麼方式讀取,什麼編碼方式讀取,這造成了誤差。


2 - Linux

哲學宗旨:“一切皆文件”。

所有的內容都是用文件去對待。文件擴展名沒有什麼意義。只與文件類型有關。

Linux的文件類型有下面這些。

  1. - : regular file
  2. d : directory
  3. c : character device file
  4. b : block device file
  5. s : local socket file
  6. p : named pipe
  7. l : symbolic link

文件類型使用 ls 指令查看。


可執行文件

現在要說到題主所說的“可以運行”。

exe後綴的文件是二進制的可執行文件,可執行文件將包含其中包含數據的段。

Windows使用PE格式。PE格式有一個包含機器指令的部分。這些指令只是按順序排序的數字,CPU可以理解它們。

舉例,對於函數MessageBox()的調用將經歷一下過程:

  1. 具有位於DLL中的函數的地址。此地址由編譯器輸入。

  2. 將參數“推”到堆棧上的指令。

  3. 實際的函數調用。

  4. 某種清理(取決於調用約定)。

需要牢記的是,EXE文件只是特殊格式的文件。你可以使用諸如Visual Studio等工具對其進行反彙編查看。


windows下,可直接執行的文件,不只有 exe。比如 bat 批處理文件,vbs 腳本文件,因為操作系統有 wscript 宿主環境,可直接運行。貼兩個文件示例。

上面這個是批處理bat文件。

上面這個是vbs文件。


同樣的,如果系統有java環境,你也可直接運行 jar 文件。同理,python 環境可直接運行 py 文件。


結語

就不展開說了吧,關於文件系統的知識,遠非一兩句所能說清楚,其中涉及的編譯原理,操作系統,等等知識,需要題主自己去摸索。


我是@程序員小助手,持續分享編程與程序員成長相關的內容,歡迎關注~~

程序員小助手


無法運行。

在Windows系統中,可執行文件需要遵循PE格式。

一個完整的PE文件需要包含很多內容,比如導入表,導出表,資源表,異常表,屬性證書表,基地址重定位表等等各種信息。這些信息定義了一個可執行文件的logo圖標,用到的圖片音頻等等資源,以及這個可執行文件是否需要加載外部動態鏈接庫(也就是很多人安裝完了軟件看到一大堆dll文件感覺沒什麼用就刪掉了導致軟件啟動後就報找不到文件的錯誤)。

所以,對於電腦來說不是一個簡單的後綴改成exe就能運行了,這個後綴只是Windows下的一個約定。讓操作系統看到這個後綴就用可執行文件來裝載和執行。如果一個TXT文件改成exe ,系統按照可執行文件去加載,會發現啥都沒有,就會拒絕執行。除非。你的TXT文件嚴格按照PE格式去編輯。

有些黑客倒是會把exe格式的木馬隱藏後綴名假裝成txt文件傳播。

附圖是我在2011年做的Windows的pe格式解析工具。已經開源並傳到在csdn共享,有興趣的可以交流。

沒錯,工具上的小美女是2011年最紅的楊冪。。。。



老居


肯定不行啊!無論exe還是TXT,或者是jpg,aac,等等,這些僅僅是一種文件的編碼規範,識別它們的不是計算機底層的硬件,而是上層的應用軟件和操作系統遵循特定的協議。

雖然不管是什麼文件最終到達計算機底層,也就是硬件邏輯層,都是以0101代碼呈現的,但是無論是exe還是TXT,他們並不是機器代碼,也就是說並不是0101碼,而是一種亂序碼,只有遵循其相關的協議才能將其轉換為機器可識別的代碼,這個過程類似於加密,但是密鑰是對外授權的,誰都可以擁有。

舉個例子你去銀行保險櫃取東西,保險櫃編號是2號,你的鑰匙必須是二號才能將其解鎖,假設這個2號櫃子任何用戶都可以訪問,不上鎖肯定不好,所以只能把2號鑰匙分發給所有需要的人,但是你拿來了一個3號的鑰匙,想去開2號櫃子肯定不可能,你把2號櫃子的數字改成了3號,你還是打不開。

TXT是一種通用的文檔編碼規範,可以說是很多平臺都在使用的,計算機在打開這種文件的時候會先判定適合用什麼方式打開,我們最後看到的結果是機器翻譯的結果,首先CPU是沒有辦法直接翻譯TXT文件的,除非CPU內部專門集成用於處理TXT的核心。CPU收到的永遠是機器指令,比如TXT文檔中的字是我愛你,如果直接交給CPU是沒有辦法的打出來的,首先會交給支持TXT文件的應用軟件或者操作系統本身就支持,但看到的也不是幾個字,而是相關代碼,但是這個相關代碼是有對應關係的,比如我對應5#,愛對應2@,你對應1A,但是軟件不知道,它只能請求CPU,CPU接受到命令之後開始去對應的編碼表裡面去查詢,然後讀取到數據就是我愛你,最後告知軟件,其實這一步CPU自己並不知道自己取的是什麼內容,只是按照軟件的請求執行,所以整個計算機系統實際上CPU從來不知道自己做得是什麼,它只是執行上層傳下來的命令,這個命令語言到達CPU已經變了好幾次了。

可以說應用軟件和操作系統之間有自己的交流語言,同樣操作系統和底層硬件之間也有交流的語言,為了同一好管理,所以制定了規範和協議,無論是硬件商還是軟件商都需要按照這個規範來,這就形成了所謂的生態。

雖然Windows可以直接運行exe文件,但畢竟是TXT改過來的,操作系統一眼就識別出來了,一方面根本找不到程序入口,另一方面,這個TXT改過來的exe文件,操作系統根本不知道怎麼處理,說它是一條狗吧!又長著羊的犄角,這種不三不四的東西,Windows翻遍了再自己那註冊所有軟件,它們都一一搖頭,沒見過。


瘋瓶兒


可以的,這事情我幹過。也就是用匯編語言寫一段程序,彙編成exe就能運行。EXE文件頭部是儲存空間,比如你定義一個255長度字符串常量,它就真的留255位置在EXE裡面。機器碼和彙編之間轉換是很方便的。EXE文件用debug打開可以看到裡面的內容。直接修改也沒問題,可以繞過源代碼直接改常量


切問近思61177173


我剛才用txt手搓了一段0和1還原了ATM機的源代碼。現在給我打5塊錢就可以拿著這個txt去任意ATM機取錢……



毛茸茸的猹


exe有嚴密的格式要求,txt改exe是沒法執行的,改成bat或cmd倒是可以的


杭州山不高


粗略看了一下,好多不懂裝懂的,你把一個可以正常運行的exe文件改成txt,那這個txt改回exe還是可以運行的,問題只是說可能。


分享到:


相關文章: