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

寂滅輪迴-情殤


在windows平臺下是沒有可能的:

1.Windowsz雖然依據文件擴展名識別文件類別,只修改擴展名,可以讓讓windows認為是可執行文件。

2.可執行文件(.exe)是依據文件頭加載的,TXT文件的文件的內容編碼,是不會和可執行文件一致的,因此在Windows下這種情況是不能執行的。

可是在其他平臺下,腳本語言程序本身就是文本文件,是解釋執行的,只要給文件可執行屬性,並用註釋適當關聯腳本的解釋器,就可以被執行了。


飄162829324


題主這個問題太正常了,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 文件。


結語

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


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

程序員小助手


肯定不行啊!無論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翻遍了再自己那註冊所有軟件,它們都一一搖頭,沒見過。


瘋瓶兒


無法運行。

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

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

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

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

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

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



老居


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


切問近思61177173


一看你就是很年輕。txt改成exe不是有沒有幾率的問題,而是很多年以前就有過。回退25年,那個時候還是DOS主流時代,那個時候還沒有專門的文本閱讀器,有些軟件附帶的閱讀工具也是比較簡單。人們想大量的看文檔還是比較麻煩的。為了解決這個問題,當時出現了很多文本轉換成exe的工具,可以直接把文本文件轉換成可執行文件,後期一些做的比較好的,甚至可以做到圖文並茂,甚至還可以加上背景音樂。但是這個時代存在時間並不長,隨著windows的出現,電腦開始進入了圖形化的操作系統時代。那些曾經出現過的txt轉換工具也隨之慢慢消失了。即使是現在,文本文檔仍然可以通過二進制方式進行保存。像很多壓縮軟件打包工具,實際上就是把目標文件壓縮成二進制來保存的。通過這樣的壓縮,保存的體積大大縮小。但是保存成二進制後,是不能再像原來一樣直接瀏覽的。


股_添_樂


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


聽說用戶名最長十個字


最近總是刷到這位李老師。關鍵回答的問題都是錯的。今天已經幫他糾正三個問題了。建議這位老師回去多多研究一些基礎知識。再來回答別人的問題。

下面我來回答一下你這個問題。你說的這個問題,實際上在於osi模型第六層--表示層。用來用來提示電腦系統用什麼樣的程序去運行這個文件。

那麼問題來了。剛才的李老師只說對了一半。

我現在不需要做演示,可以確定的這樣跟你說。你把一個真正的txt文件。改名為任何其他的文件。然後你用文本文檔打開這個所謂的其他文件。你會發現違背了李老師說的答案。居然打開了,而且沒有任何問題。文件的後綴名只是告訴操作系統默認用什麼程序去執行它。但它的本質並沒有改變。

所以你用一個原先就可以打開的可執行文件。把後綴改名。只要你能想辦法調用它。那麼還是沒問題的。依舊可以使用。


分享到:


相關文章: