第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节进行有针对性的分析。