Недавно я пытался отлаживать кросс-компилированную программу для рук с помощью QEMU, но столкнулся с проблемой.
Это код, очень простой.
int main()
{
printf("aaa\n");
int status;
status = system("./bin/ls");
printf("Result of [system] = 0x%x\n", status);
}
Когда я запускаю программу с помощью команды
spy@spy-virtual-machine:/usr/arm-linux-gnueabihf$ ./qemu-arm-static -L ./ ./a.out
Результат:
aaa
bin include lib test.c qemu-arm-static a.out qemu-arm shell.sh
Result of [system] = 0x0
Но когда я запускаю программу с chroot следующим образом:
spy@spy-virtual-machine:/usr/arm-linux-gnueabihf$ sudo chroot ./ ./qemu-arm-static -L ./ ./a.out
На выходе получается:
aaa
Result of [system] = 0x7f00
По-видимому, system("./bin/ls")
запускается не так, как ожидалось.
Но команду ./bin/ls
можно запустить через chroot и QEMU:
spy@spy-virtual-machine:/usr/arm-linux-gnueabihf$ sudo chroot ./ ./qemu-arm-static -L ./ ./bin/ls
bin include lib test.c qemu-arm-static a.out qemu-arm shell.sh
Теперь я в полном замешательстве. Может ли кто-нибудь дать мне подсказку по этому поводу, и что я могу сделать, чтобы получить правильный вывод функции system
при использовании команды chroot
.
Весь ввод и вывод командной строки можно найти на этом рисунке: Содержимое командной строки