Недавно я попытался отладить кросс-скомпилированную программу arm с помощью 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
Но когда я запускаю программу с ch root вот так:
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
можно запустить с помощью ch root & 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
.
Весь ввод и вывод командной строки можно найти на этом рисунке: Содержание командной строки