我有一个非常简单的arm可执行文件,用arm-linux-gnueabi
工具链。我可以执行它qemu-arm
没有任何问题:
$ qemu-arm -L /usr/arm-linux-gnueabi/ ./a.out
Hello world !
不带任何参数运行链接器似乎也有效:
qemu-arm /usr/arm-linux-gnueabi/lib/ld-linux.so.3
Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]
You have invoked `ld.so', the helper program for shared library executables.
...
但是,如果我希望链接器运行我的可执行文件,则会发生以下情况:
$ qemu-arm -L /usr/arm-linux-gnueabi/ /usr/arm-linux-gnueabi/lib/ld-linux.so.3 a.out
a.out: error while loading shared libraries: a.out: cannot open shared object file
这是 strace 的输出:https://pastebin.com/uJ7AhBdh https://pastebin.com/uJ7AhBdh
知道为什么会发生这种情况吗?
我无法在 Ubuntu 20.04 上重现该问题:
sudo apt install gcc-arm-linux-gnueabihf qemu-user
printf '
#include <stdio.h>
#include <stdlib.h>
int main() {
puts("hello world");
return EXIT_SUCCESS;
}
' > hello_world.c
qemu-arm -L /usr/arm-linux-gnueabihf ./hello_world
和aarch64:
sudo apt install gcc-aarch64-linux-gnu qemu-user
aarch64-linux-gnu-gcc -ggdb3 -static -o hello_world hello_world.c
qemu-aarch64 -L /usr/aarch64-linux-gnu ./hello_world
两者都运行良好。
您还可以提供您的确切发行版本吗?
GDB 步骤调试相关:如何在 QEMU 用户模式下 GDB 单步调试动态链接的可执行文件? https://stackoverflow.com/questions/51310756/how-to-gdb-step-debug-a-dynamically-linked-executable-in-qemu-user-mode
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)