У меня есть эта функция 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.
Следовательно, оболочка не размножается. Как это сделать?
gdb не позволяет вам выполнять двоичный код с другой архитектурой, даже если он совместим с вашей платформой. То же самое происходит, если вы попытаетесь выполнить 32-битный исполняемый файл с 64-битного. Это происходит и в последней версии (7.5.1) gdb.
Если вы можете скомпилировать свой код как 32-битный, не вызывая других проблем, это будет обходным путем.
В соответствии с комментарием Hasturkun, имеется патч здесь.