溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

golang能不能反編譯

發(fā)布時(shí)間:2022-12-28 14:02:05 來(lái)源:億速云 閱讀:105 作者:iii 欄目:編程語(yǔ)言

本文小編為大家詳細(xì)介紹“golang能不能反編譯”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“golang能不能反編譯”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

golang不能反編譯。原因:golang是編譯型的靜態(tài)語(yǔ)言,Golang編譯后會(huì)生成二進(jìn)制文件,而二進(jìn)制文件是包含在ASCII及擴(kuò)展ASCII字符中編寫(xiě)的數(shù)據(jù)或程序指令的文件,這些文件含有特殊的格式及計(jì)算機(jī)代碼,所以無(wú)法反編譯。

golang不支持反編譯。

原因:

Go語(yǔ)言是編譯型的靜態(tài)語(yǔ)言,所以在運(yùn)行Go語(yǔ)言程序之前,先要將其編譯成二進(jìn)制的可執(zhí)行文件。

Golang編譯后會(huì)生成二進(jìn)制文件,而二進(jìn)制文件是包含在ASCII及擴(kuò)展ASCII字符中編寫(xiě)的數(shù)據(jù)或程序指令的文件,這些文件含有特殊的格式及計(jì)算機(jī)代碼,所以無(wú)法反編譯。

二進(jìn)制文件好處

為什么要使用二進(jìn)制文件。原因大概有三個(gè):

  第一是二進(jìn)制文件比較節(jié)約空間,這兩者儲(chǔ)存字符型數(shù)據(jù)時(shí)并沒(méi)有差別。但是在儲(chǔ)存數(shù)字,特別是實(shí)型數(shù)字時(shí),二進(jìn)制更節(jié)省空間,比如儲(chǔ)存 Real*4 的數(shù)據(jù):3.1415927,文本文件需要 9 個(gè)字節(jié),分別儲(chǔ)存:3 . 1 4 1 5 9 2 7 這 9 個(gè) ASCII 值,而二進(jìn)制文件只需要 4 個(gè)字節(jié)(DB 0F 49 40)

  第二個(gè)原因是,內(nèi)存中參加計(jì)算的數(shù)據(jù)都是用二進(jìn)制無(wú)格式儲(chǔ)存起來(lái)的,因此,使用二進(jìn)制儲(chǔ)存到文件就更快捷。如果儲(chǔ)存為文本文件,則需要一個(gè)轉(zhuǎn)換的過(guò)程。在數(shù)據(jù)量很大的時(shí)候,兩者就會(huì)有明顯的速度差別了。

  第三,就是一些比較精確的數(shù)據(jù),使用二進(jìn)制儲(chǔ)存不會(huì)造成有效位的丟失。

二進(jìn)制文件的儲(chǔ)存方式

列舉一個(gè)二進(jìn)制文件如下:

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) 里看到的東西。其實(shí)只有紅色部分是文件內(nèi)容。前面的是 UE 加入的行號(hào)。后面的是 UE 嘗試解釋為字符型的參考。

  這個(gè)文件一共有 32 字節(jié)長(zhǎng)。顯示為兩列,每列 16 個(gè)字節(jié)。實(shí)際上,這僅僅是 UE 的顯示而已。真實(shí)的文件并不分行。僅僅知道這個(gè)文件的內(nèi)容,如果我們沒(méi)有任何說(shuō)明的話(huà),是不能看出任何有用信息的。

  下面我規(guī)定一下說(shuō)明:我們認(rèn)為,前 4 個(gè)字節(jié)是一個(gè) 4 字節(jié)的整型數(shù)據(jù)(0F 01 00 00 十六進(jìn)制:10Fh 十進(jìn)制:271)。這 4 個(gè)字節(jié)之后的 4 個(gè)字節(jié)是另一個(gè) 4 字節(jié)的整型數(shù)據(jù)(0F 03 00 00 十六進(jìn)制:30Fh 十進(jìn)制:783)。其后的 4 個(gè)字節(jié)(12 53 21 45 )表示一個(gè) 4 字節(jié)的實(shí)型數(shù)據(jù):2.5811919E+3。再其后的 4 個(gè)字節(jié)(58 62 35 34)表示另一個(gè) 4 字節(jié)的實(shí)行數(shù)據(jù):1.6892716E-7。而只后的 16 個(gè)字節(jié)(41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50)我們認(rèn)為是 16 個(gè)字節(jié)的字符串(ABCDEFGHIGKLMNOP)

  實(shí)際上,二進(jìn)制文件只是儲(chǔ)存數(shù)據(jù),并不寫(xiě)明數(shù)據(jù)類(lèi)型,比如上面的第 9 字節(jié)到第 16 字節(jié)(12 53 21 45 58 62 35 34),我們剛才認(rèn)為是 2 個(gè) 4 字節(jié)的實(shí)型,其實(shí)也可以認(rèn)為是 8 個(gè)字節(jié)的字符型( S!EXb54)。而后面的 16 個(gè)字節(jié)的字符串(ABCDEFGHIGKLMNOP),我們也可以認(rèn)為是 2 個(gè) 8 字節(jié)的整型,或者 4 個(gè) 4 字節(jié)的整型,甚至 2 個(gè) 8 字節(jié)的實(shí)型,4 個(gè) 4 字節(jié)的實(shí)型,等等等等。

  因此,面對(duì)一個(gè)二進(jìn)制文件,我們不能準(zhǔn)確地知道它的含義,我們需要他的數(shù)據(jù)儲(chǔ)存方式的說(shuō)明。這個(gè)說(shuō)明告訴我們第幾個(gè)字節(jié)到第幾個(gè)字節(jié)是什么類(lèi)型的數(shù)據(jù),儲(chǔ)存的數(shù)據(jù)是什么含義。否則的話(huà),我們只能猜測(cè),或者無(wú)能為力。

讀到這里,這篇“golang能不能反編譯”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI