3

我在一个巨大的代码中有这个 C 函数:

void test() {
    char *arg[] = {"/bin/sh", 0};
    execve("/bin/sh", arg, 0);
}

我正在尝试使用 gdb 调试此代码

(gdb) 调用 test()
进程 1948 正在执行新程序:/bin/dash
警告:所选架构 i386:x86-64 与报告的目标架构 i386 不兼容
文件架构无法识别。
在从 GDB 调用的函数中发生错误。
评估包含函数的表达式
(测试)将被放弃。
函数执行完毕后,GDB 会静默停止。

因此壳没有产卵。怎么办?

4

1 回答 1

3

gdb 不允许您执行具有不同架构的二进制文件,即使它在您的平台上兼容。如果您尝试从 64 位执行 32 位可执行文件,也会发生同样的情况。这也发生在 gdb 的最新版本 (7.5.1) 上。

如果您可以将代码编译为 32 位而不会导致其他问题,那将是一种解决方法。

根据 Hasturkun 的评论,这里有一个可用的补丁

于 2013-03-11T16:41:18.797 回答