在大尾环境下执行C代码
因为C语言的实现可能会由于字节序的问题而导致不正确的运行,所以我希望能在小端序和大端序两种情况下进行验证。下面我会解释在Windows 10/64位环境下如何在小端序和大端序两种情况下执行C代码的方法1。
小端序
由于x86/x64是小端字节序,因此在WSL的Ubuntu上是可以的。
启用Windows子系统Linux功能
-
- Windows PowerShellを管理者モードで実行
- 以下コマンド実行
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
安装Ubuntu 16.04
安装gcc
$ sudo apt-get install build-essential
准备测试代码
使用文本编辑器创建并保存C代码进行执行。
#include <stdio.h>
int main(void) {
unsigned int uint32 = 0x12345678U;
unsigned char * p_uint8;
printf("uint32: 0x%x\n", uint32);
p_uint8 = (unsigned char *)&uint32;
printf("p_uint8[0]: 0x%x\n", p_uint8[0]);
printf("p_uint8[1]: 0x%x\n", p_uint8[1]);
printf("p_uint8[2]: 0x%x\n", p_uint8[2]);
printf("p_uint8[3]: 0x%x\n", p_uint8[3]);
return 0;
}
编译并执行
使用gcc编译test.c文件,并执行生成的文件(a.out)。
$ gcc test.c && ./a.out
由于是小端字节序,结果如下:
$ gcc test.c && ./a.out
uint32: 0x12345678
p_uint8[0]: 0x78
p_uint8[1]: 0x56
p_uint8[2]: 0x34
p_uint8[3]: 0x12
大端字节序
我們將使用在Debian上運行的QEMU來運行PowerPC。
下载并安装 VMware Workstation Player 12。
下载Debian 8.11并安装到VMware中。
请使用以下网址下载Debian Jessie版本的网络安装CD映像(amd64):https://www.debian.org/releases/jessie/debian-installer/
启动Debian8.11并安装QEMU。
参考以下网站安装QEMU,并启动PowerPC。
https://blog.bitmeister.jp/?p=3633
# sudo apt-get update
# sudo apt-get install uml-utilities bridge-utils qemu
/etc/network/interfacesへ以下を追記.
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
/etc/qemu/bridge.confへ以下を記載.
allow br0
- 権限設定.
# sudo chmod 0644 /etc/qemu/bridge.conf
# sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
- 一旦Debianを再起動.
# sudo shutdown -r now
下载PowerPC映像
# sudo wget https://people.debian.org/~aurel32/qemu/powerpc/debian_wheezy_powerpc_standard.qcow2
启动PowerPC
# sudo qemu-system-ppc -hda debian_wheezy_powerpc_standard.qcow2 -nographic -net nic -net bridge,br=br0
请参考以下链接以了解登录的用户名/密码等信息:
https://people.debian.org/~aurel32/qemu/powerpc/README.txt
将PowerPC的二进制文件进行编译
- QEMU上のPowerPCにはコンパイラが無かったので,WSLのUbuntuにPowerPC用gccをインストール.
$ sudo apt-get install gcc-4.8-powerpc-linux-gnu
- テストコードをコンパイル
$ powerpc-linux-gnu-gcc-4.8 ./test.c
将二进制文件传输到PowerPC上
- WSLのUbuntuから送信
$ nc -l 10000 < a.out
如果端口(10000)未被使用,任何号码都可以。
- PowerPCで受信
# nc 192.168.229.1 10000 > a.out
# chmod +x a.out
※IP地址(192.168.229.1)用于指定连接到Windows上的IP地址的VMware。
进行权限设置并执行。
# chmod +x a.out
# ./a.out
对于大端序处理器,结果将如下所示。
# ./a.out
uint32: 0x12345678
p_uint8[0]: 0x12
p_uint8[1]: 0x34
p_uint8[2]: 0x56
p_uint8[3]: 0x78
每个软件版本都是在进行操作确认时使用的,所以即使使用不同版本也可能会正常运作。