官术网_书友最值得收藏!

第5章 鯤鵬應(yīng)用遷移

5.1 應(yīng)用遷移的原因

5.1.1 不同架構(gòu)下程序執(zhí)行對比

通過一個簡單的C程序,演示一下在不同架構(gòu)下編譯運(yùn)行的對比,要對比的環(huán)境如表5-1所示。

表5-1 運(yùn)行環(huán)境對比

1.方式1

步驟1:準(zhǔn)備好x86架構(gòu)的運(yùn)行環(huán)境,安裝CentOS操作系統(tǒng),并且安裝好標(biāo)準(zhǔn)C開發(fā)環(huán)境,具體的步驟可以參考4.2節(jié)準(zhǔn)備軟件環(huán)境的內(nèi)容,注意CPU架構(gòu)選擇x86架構(gòu)。

步驟2:創(chuàng)建/data/code/文件夾,然后創(chuàng)建x86_demo.c,命令如下:

     mkdir /data/code/
     cd /data/code/
     vim x86_demo.c

步驟3:按i鍵進(jìn)入編輯模式,輸入代碼,然后保存并退出,代碼如下:

步驟4:編譯x86_demo.c,生成編譯后的文件x86_demo,命令如下:

     gcc -g -o x86_demo x86_demo.

注意:這里使用了gcc的-g選項(xiàng),使用該選項(xiàng)在編譯時會額外執(zhí)行如下的操作:

(1)創(chuàng)建符號表,符號表包含了程序中使用的變量名稱的列表。

(2)關(guān)閉所有的優(yōu)化機(jī)制,以便程序執(zhí)行過程中嚴(yán)格按照原來的C代碼進(jìn)行。

這樣,在后續(xù)的反編譯的時候,可以用匯編代碼和C源代碼進(jìn)行對比,便于理解匯編后的代碼。

步驟5:運(yùn)行x86_demo,命令如下:

     ./x86_demo

因?yàn)檫@個演示程序沒有輸出,所以運(yùn)行x86_demo也沒有回顯。

2.方式2

步驟1:準(zhǔn)備鯤鵬架構(gòu)的C開發(fā)環(huán)境,參考4.2節(jié)準(zhǔn)備軟件環(huán)境的內(nèi)容。

步驟2:創(chuàng)建/data/code/文件夾,然后創(chuàng)建kunpeng_demo.c,命令如下:

     mkdir /data/code/
     cd /data/code/
     vim kunpeng_demo.c

步驟3:按i鍵進(jìn)入編輯模式,輸入代碼,然后保存并退出,代碼如下:

步驟4:編譯kunpeng_demo.c,生成編譯后的文件kunpeng_demo,命令如下:

     aarch64 - redhat - Linux - gcc -g -o kunpeng_demo kunpeng_demo.c

步驟5:運(yùn)行kunpeng_demo,命令如下:

     ./kunpeng_demo

同樣沒有回顯。

3.方式3

步驟1:登錄鯤鵬架構(gòu)服務(wù)器

步驟2:從x86服務(wù)器復(fù)制編譯好的x86_demo到本地,命令如下:

     scp root@192.168.0.208:/data/code/x86_demo /data/code/

需要根據(jù)服務(wù)器的實(shí)際情況修改x86服務(wù)器的用戶名和IP。

步驟3:運(yùn)行x86_demo,命令如下:

     ./x86_demo

系統(tǒng)會提示無法運(yùn)行該文件,如圖5-1所示。

圖5-1 鯤鵬架構(gòu)運(yùn)行x86程序

4.方式4

步驟1:登錄x86架構(gòu)服務(wù)器

步驟2:從鯤鵬服務(wù)器復(fù)制編譯好的kunpeng_demo到本地,命令如下:

     scp root@192.168.0.133:/data/code/kunpeng_demo /data/code/

需要根據(jù)實(shí)際情況修改Kunpeng服務(wù)器的用戶名和IP。

步驟3:運(yùn)行kunpeng_demo,命令如下:

     ./kunpeng_demo

系統(tǒng)會提示無法運(yùn)行該文件,如圖5-2所示。

圖5-2 x86架構(gòu)運(yùn)行鯤鵬程序

根據(jù)上面的4個小實(shí)驗(yàn),可以得出這樣的結(jié)論,x86架構(gòu)下編譯的C程序無法在鯤鵬架構(gòu)下直接運(yùn)行;同樣,鯤鵬架構(gòu)下編譯的C程序也無法在x86架構(gòu)下運(yùn)行。為什么會這樣呢?在5.1.2節(jié)進(jìn)行有針對性的分析。

主站蜘蛛池模板: 保山市| 沿河| 嘉善县| 海晏县| 宝坻区| 峨边| 马关县| 富顺县| 河源市| 莱西市| 东港市| 获嘉县| 西乌珠穆沁旗| 舟山市| 蛟河市| 龙里县| 樟树市| 隆化县| 沙坪坝区| 苏尼特右旗| 河东区| 景德镇市| 定安县| 淳安县| 龙山县| 芦山县| 建瓯市| 深圳市| 四会市| 新蔡县| 弥勒县| 仁怀市| 仲巴县| 洛川县| 班玛县| 枣阳市| 宁波市| 行唐县| 南江县| 东海县| 赤峰市|