Невозможно создать оболочку, используя gdb

3

У меня есть эта функция 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.

Следовательно, оболочка не размножается. Как это сделать?

  • 0
    Какую версию GDB вы используете?
  • 0
    GNU GDB (Ubuntu / Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Показать ещё 5 комментариев
Теги:
gdb

1 ответ

2
Лучший ответ

gdb не позволяет вам выполнять двоичный код с другой архитектурой, даже если он совместим с вашей платформой. То же самое происходит, если вы попытаетесь выполнить 32-битный исполняемый файл с 64-битного. Это происходит и в последней версии (7.5.1) gdb.

Если вы можете скомпилировать свой код как 32-битный, не вызывая других проблем, это будет обходным путем.

В соответствии с комментарием Hasturkun, имеется патч здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню