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

第5章 鯤鵬應用遷移

5.1 應用遷移的原因

5.1.1 不同架構下程序執行對比

通過一個簡單的C程序,演示一下在不同架構下編譯運行的對比,要對比的環境如表5-1所示。

表5-1 運行環境對比

1.方式1

步驟1:準備好x86架構的運行環境,安裝CentOS操作系統,并且安裝好標準C開發環境,具體的步驟可以參考4.2節準備軟件環境的內容,注意CPU架構選擇x86架構。

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

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

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

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

     gcc -g -o x86_demo x86_demo.

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

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

(2)關閉所有的優化機制,以便程序執行過程中嚴格按照原來的C代碼進行。

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

步驟5:運行x86_demo,命令如下:

     ./x86_demo

因為這個演示程序沒有輸出,所以運行x86_demo也沒有回顯。

2.方式2

步驟1:準備鯤鵬架構的C開發環境,參考4.2節準備軟件環境的內容。

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

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

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

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

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

步驟5:運行kunpeng_demo,命令如下:

     ./kunpeng_demo

同樣沒有回顯。

3.方式3

步驟1:登錄鯤鵬架構服務器

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

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

需要根據服務器的實際情況修改x86服務器的用戶名和IP。

步驟3:運行x86_demo,命令如下:

     ./x86_demo

系統會提示無法運行該文件,如圖5-1所示。

圖5-1 鯤鵬架構運行x86程序

4.方式4

步驟1:登錄x86架構服務器

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

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

需要根據實際情況修改Kunpeng服務器的用戶名和IP。

步驟3:運行kunpeng_demo,命令如下:

     ./kunpeng_demo

系統會提示無法運行該文件,如圖5-2所示。

圖5-2 x86架構運行鯤鵬程序

根據上面的4個小實驗,可以得出這樣的結論,x86架構下編譯的C程序無法在鯤鵬架構下直接運行;同樣,鯤鵬架構下編譯的C程序也無法在x86架構下運行。為什么會這樣呢?在5.1.2節進行有針對性的分析。

主站蜘蛛池模板: 安康市| 唐河县| 黔南| 邛崃市| 桐梓县| 曲靖市| 万宁市| 岗巴县| 萍乡市| 兴海县| 湛江市| 喀喇沁旗| 屏东县| 大邑县| 旅游| 美姑县| 铜鼓县| 肃宁县| 靖远县| 扶沟县| 常熟市| 沙坪坝区| 新乐市| 明溪县| 东丰县| 嘉禾县| 长顺县| 玉龙| 吕梁市| 文安县| 普兰店市| 茌平县| 博白县| 日土县| 万宁市| 淄博市| 于都县| 栖霞市| 南靖县| 容城县| 临猗县|