在大尾环境下执行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
每个软件版本都是在进行操作确认时使用的,所以即使使用不同版本也可能会正常运作。
广告
将在 10 秒后关闭
bannerAds