基于qemu-user-static
,模拟大端、小端的cpu下运行程序
1、环境搭建
下面是ubuntu下的演示,centos环境搭建过于复杂。
首先安装交叉编译器,接着安装qemu-user-static。这里期望使用mips(大端)来演示
apt install gcc-mips64-linux-gnuabi64
apt install qemu-user-static
2、演示
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main() {
char *addr = malloc(4);
memset(addr, 0, 4);
*(unsigned short *)addr = 0xff03;
printf("%x %x\n", addr[0], addr[1]);
return;
}
编译
x86_64-linux-gnu-gcc -static 1.c -o x86.out
mips64-linux-gnuabi64-gcc -static 1.c -o mips.out
运行输出结果:
qemu-x86_64-static ./x86.out
3 ffffffff
qemu-mips64-static ./mips.out
ffffffff 3
可见是符合预期的。使用htnos
来演示
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <arpa/inet.h>
void main() {
char *addr = malloc(4);
memset(addr, 0, 4);
*(unsigned short *)addr = htons(0xff03);
printf("%x %x\n", addr[0], addr[1]);
return;
}
同样的方式编译,然后运行输出结果:
qemu-mips64-static ./mips.out
ffffffff 3
qemu-x86_64-static ./x86.out
ffffffff 3
htons
能正确使用