无法使用gdb生成shell

时间:2013-03-11 15:48:44

标签: c++ c bash gdb

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

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

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

(gdb) call test()
process 1948 is executing new program: /bin/dash
warning: Selected architecture i386:x86-64 is not compatible with reported target architecture i386
Architecture of file not recognized.
An error occurred while in a function called from GDB.
Evaluation of the expression containing the function
(test) will be abandoned.
When the function is done executing, GDB will silently stop.

因此shell不会产卵。怎么去呢?

1 个答案:

答案 0 :(得分:3)

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

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

根据Hasturkun的评论,有一个补丁here