Использование GDB без отладки символов на x86?

Как использовать GDB для отладки программы, которая не имеет
отладочных символов на 32-разрядном процессоре x86? Ознакомиться с
аргументами функции, локальными переменными, разрешающими
указателями было бы полезно знать, как это сделать. Намерение не в
том, чтобы использовать это для обратной инженерии, так как иногда
мне слишком ленив, чтобы установить отладочные символы, и было бы
здорово узнать, как получить основную информацию из gdb.

Без отладочных символов вы можете отлаживать только на уровне
ASM. Хорошо, вы получите больше *бит* , но вы не достигнете
очень большого расстояния, если не поймете немного ASM и код,
который генерирует компилятор. Это позволит вам провести простой
контроль локальных переменных и т. Д. *, если* вы знаете,
что делаете.

Если у вас есть источник, гораздо проще просто перекомпилировать
его.



Все, что вы можете сделать, это посмотреть на регистры и
содержимое стека - вам придется делать все, выбирая, для чего
используются вещи, как упоминает Дремон.



Ну, самое главное, чтобы вы могли разматывать стек. Это можно
сделать тремя способами:

* Построение отладочных символов с помощью `-g`
* В системах, в которых исключение C ++ отключается через таблицы
(возможно, что-нибудь ELF в наши дни?), [`-funwind-tables`](https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.%20html%20#%20index-funwind_002dtables-2153) указывает, что он
генерирует такие таблицы независимо от языка, и GDB может
использовать эти таблицы (по крайней мере , с x86 linux он
может).
* Или, если это не так, по крайней мере убедитесь, что
`-fomit-frame-pointer` не включен



Чтобы начать, вы можете сделать это;

```
gdb "whatever"
break __libc_start_main
r

```

который установит точку останова в коде libt crt0 и позволит вам
разбить до main, даже если целевой бинарный файл полностью
лишен.

Это приведет вас к запущенному состоянию в точке останова перед
большинством пользовательских кодов. Затем вы можете сделать один
шаг, разложить, сбросить память и т. Д. ... до вашего сердца.

Это работает на всех платформах, ведь ваш вопрос об IA-32/x86 не
имеет значения.