真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語(yǔ)言運(yùn)行二進(jìn)制文件 go二進(jìn)制文件反編譯

Go語(yǔ)言文件操作

本文主要介紹了Go語(yǔ)言中文件讀寫(xiě)的相關(guān)操作。

創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁(yè)美工、網(wǎng)站程序員、網(wǎng)頁(yè)設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷(xiāo)人員及形象策劃。承接:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開(kāi)發(fā),以高性?xún)r(jià)比制作企業(yè)網(wǎng)站、行業(yè)門(mén)戶(hù)平臺(tái)等全方位的服務(wù)。

文件是什么?

計(jì)算機(jī)中的文件是存儲(chǔ)在外部介質(zhì)(通常是磁盤(pán))上的數(shù)據(jù)集合,文件分為文本文件和二進(jìn)制文件。

os.Open() 函數(shù)能夠打開(kāi)一個(gè)文件,返回一個(gè) *File 和一個(gè) err 。對(duì)得到的文件實(shí)例調(diào)用 close() 方法能夠關(guān)閉文件。

為了防止文件忘記關(guān)閉,我們通常使用defer注冊(cè)文件關(guān)閉語(yǔ)句。

Read方法定義如下:

它接收一個(gè)字節(jié)切片,返回讀取的字節(jié)數(shù)和可能的具體錯(cuò)誤,讀到文件末尾時(shí)會(huì)返回 0 和 io.EOF 。 舉個(gè)例子:

使用for循環(huán)讀取文件中的所有數(shù)據(jù)。

bufio是在file的基礎(chǔ)上封裝了一層API,支持更多的功能。

io/ioutil 包的 ReadFile 方法能夠讀取完整的文件,只需要將文件名作為參數(shù)傳入。

os.OpenFile() 函數(shù)能夠以指定模式打開(kāi)文件,從而實(shí)現(xiàn)文件寫(xiě)入相關(guān)功能。

其中:

name :要打開(kāi)的文件名 flag :打開(kāi)文件的模式。 模式有以下幾種:

perm :文件權(quán)限,一個(gè)八進(jìn)制數(shù)。r(讀)04,w(寫(xiě))02,x(執(zhí)行)01。

go build -ldflags 打印編譯信息

go語(yǔ)言方便的地方之一就是容易部署, 編譯成二進(jìn)制文件,丟到服務(wù)器,就像一個(gè)內(nèi)建的bash程序,不用安裝依賴(lài),不用部署環(huán)境,不用管理源碼,直接就運(yùn)行了。這也會(huì)產(chǎn)生一個(gè)問(wèn)題, 經(jīng)過(guò)年深日久的運(yùn)行后,某天需要修改一個(gè)功能,可能最初開(kāi)發(fā)的同事幾經(jīng)易手,那么,如何從這個(gè)二進(jìn)制文件找到源碼和對(duì)應(yīng)的信息呢?

本文主要就是解決這個(gè)問(wèn)題,利用 go build 的 -ldflags -X, 把程序及相關(guān)的環(huán)境信息編譯進(jìn)項(xiàng)目的的help信息中,當(dāng)程序執(zhí)行-v時(shí),有如下的輸出:

文件準(zhǔn)備完成后, 執(zhí)行下面的命令,把文件加入git版本管理中,如果不加git管理, build.sh中的腳本會(huì)執(zhí)行報(bào)錯(cuò):

現(xiàn)在執(zhí)行build.sh 編譯二進(jìn)制文件,執(zhí)行完成后,可見(jiàn)文件目錄中多了一個(gè)文件 version-example

golang 二進(jìn)制包提示 No such file or directory

由于我們的 Dockerfile 使用多階段構(gòu)建,

由于 alpine 鏡像非常小,只有 5 mb 左右,但是由于客戶(hù)那邊強(qiáng)制要使用紅帽的基礎(chǔ)鏡像,所以在第二階段修改成紅帽的鏡像,最終打成的鏡像運(yùn)行的時(shí)候會(huì)提示 No such file or directory 。

這個(gè)問(wèn)題的原因在于第一階段構(gòu)建的環(huán)境和第二階段的運(yùn)行的環(huán)境不一致,很多時(shí)候以為都是 Linux 環(huán)境,怎么可能不一致呢,但是由于 Linux 的各個(gè)發(fā)行版都有自己定制化的部分,就譬如 alpine 分支,他的 C 語(yǔ)言動(dòng)態(tài)鏈接庫(kù)使用的是 musl,而像 centos 用的都是 glibc,他們都是 c 語(yǔ)言的標(biāo)準(zhǔn)庫(kù),用來(lái)調(diào)用操作系統(tǒng)的庫(kù)。

上面說(shuō)的是一方面原因,但是不是這個(gè)問(wèn)題的最具體的原因。

go build 打包出來(lái)的二進(jìn)制文件還寫(xiě)一個(gè)非常重要的信息 interpreter 。

我將二進(jìn)制文件從容器內(nèi) copy 出來(lái)通過(guò) file 查看

可以看到二進(jìn)制的文件上有些一個(gè)解釋器的地址,這個(gè)文件地址是寫(xiě)死在二進(jìn)制文件上的,后面我啟動(dòng)一個(gè) centos 容器。

果然報(bào)了同樣的一個(gè)錯(cuò)誤。

Linux 如何啟動(dòng)一個(gè)二進(jìn)制文件可以參考一下參考文檔,就是通過(guò)這個(gè)解釋器出發(fā)將程序調(diào)入內(nèi)存。

golang 讀寫(xiě)二進(jìn)制文件

我們需要對(duì)一些文本進(jìn)行"明文加密",何為"明文加密"?

從一些錯(cuò)亂的數(shù)據(jù)中,提取我們想要的數(shù)據(jù).

生成錯(cuò)亂的數(shù)據(jù)(可以隨機(jī)生成)

只需從上面的字符串提取數(shù)字即可,45.89.0.8

這里只是舉個(gè)簡(jiǎn)單例子

這樣就會(huì)該go文件同級(jí)目錄生成bin文件

并未使用binary.Read()方法

讀取到的文本

再根據(jù)自己的規(guī)則去提取該字符中你想要的數(shù)據(jù)即可.


本文名稱(chēng):go語(yǔ)言運(yùn)行二進(jìn)制文件 go二進(jìn)制文件反編譯
標(biāo)題URL:http://weahome.cn/article/ddgdsse.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部