您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“golang能不能反編譯”,內容詳細,步驟清晰,細節處理妥當,希望這篇“golang能不能反編譯”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
golang不能反編譯。原因:golang是編譯型的靜態語言,Golang編譯后會生成二進制文件,而二進制文件是包含在ASCII及擴展ASCII字符中編寫的數據或程序指令的文件,這些文件含有特殊的格式及計算機代碼,所以無法反編譯。
golang不支持反編譯。
原因:
Go語言是編譯型的靜態語言,所以在運行Go語言程序之前,先要將其編譯成二進制的可執行文件。
Golang編譯后會生成二進制文件,而二進制文件是包含在ASCII及擴展ASCII字符中編寫的數據或程序指令的文件,這些文件含有特殊的格式及計算機代碼,所以無法反編譯。
二進制文件好處
為什么要使用二進制文件。原因大概有三個:
第一是二進制文件比較節約空間,這兩者儲存字符型數據時并沒有差別。但是在儲存數字,特別是實型數字時,二進制更節省空間,比如儲存 Real*4 的數據:3.1415927,文本文件需要 9 個字節,分別儲存:3 . 1 4 1 5 9 2 7 這 9 個 ASCII 值,而二進制文件只需要 4 個字節(DB 0F 49 40)
第二個原因是,內存中參加計算的數據都是用二進制無格式儲存起來的,因此,使用二進制儲存到文件就更快捷。如果儲存為文本文件,則需要一個轉換的過程。在數據量很大的時候,兩者就會有明顯的速度差別了。
第三,就是一些比較精確的數據,使用二進制儲存不會造成有效位的丟失。
二進制文件的儲存方式
列舉一個二進制文件如下:
00000000h:0F 01 00 00 0F 03 00 00 12 53 21 45 58 62 35 34; .........S!EXb54
00000010h:41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50; ABCDEFGHIGKLMNOP
這里列出的是在 UltraEdit(UE) 里看到的東西。其實只有紅色部分是文件內容。前面的是 UE 加入的行號。后面的是 UE 嘗試解釋為字符型的參考。
這個文件一共有 32 字節長。顯示為兩列,每列 16 個字節。實際上,這僅僅是 UE 的顯示而已。真實的文件并不分行。僅僅知道這個文件的內容,如果我們沒有任何說明的話,是不能看出任何有用信息的。
下面我規定一下說明:我們認為,前 4 個字節是一個 4 字節的整型數據(0F 01 00 00 十六進制:10Fh 十進制:271)。這 4 個字節之后的 4 個字節是另一個 4 字節的整型數據(0F 03 00 00 十六進制:30Fh 十進制:783)。其后的 4 個字節(12 53 21 45 )表示一個 4 字節的實型數據:2.5811919E+3。再其后的 4 個字節(58 62 35 34)表示另一個 4 字節的實行數據:1.6892716E-7。而只后的 16 個字節(41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50)我們認為是 16 個字節的字符串(ABCDEFGHIGKLMNOP)
實際上,二進制文件只是儲存數據,并不寫明數據類型,比如上面的第 9 字節到第 16 字節(12 53 21 45 58 62 35 34),我們剛才認為是 2 個 4 字節的實型,其實也可以認為是 8 個字節的字符型( S!EXb54)。而后面的 16 個字節的字符串(ABCDEFGHIGKLMNOP),我們也可以認為是 2 個 8 字節的整型,或者 4 個 4 字節的整型,甚至 2 個 8 字節的實型,4 個 4 字節的實型,等等等等。
因此,面對一個二進制文件,我們不能準確地知道它的含義,我們需要他的數據儲存方式的說明。這個說明告訴我們第幾個字節到第幾個字節是什么類型的數據,儲存的數據是什么含義。否則的話,我們只能猜測,或者無能為力。
讀到這里,這篇“golang能不能反編譯”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。