您好,登錄后才能下訂單哦!
go語言能進行反編譯嗎?編譯后是什么格式的文件?可能很多人對此沒有深入了解過,故而小編總結了這篇文章,通過這文章的講解,希望你能夠收獲更多知識。
Golang不可以反編譯,因為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 字節的實型,等等等等。
因此,面對一個二進制文件,我們不能準確地知道它的含義,我們需要他的數據儲存方式的說明。這個說明告訴我們第幾個字節到第幾個字節是什么類型的數據,儲存的數據是什么含義。否則的話,我們只能猜測,或者無能為力。
關于go語言的編譯就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。