Используя GDB без отладочной информации на x86?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

16
задан Zword 11 February 2014 в 06:38
поделиться

3 ответа

Без отладочной информации можно только отладить на уровне ASM. Хорошо Вы добираетесь бит [еще 110] информация, но Вы не собираетесь становиться очень далекими, если Вы не понимаете немного ASM и код, компилятор генерирует. Это позволит Вам сделать простой контроль локальных переменных и т.д. , если Вы будете знать то, что Вы делаете.

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

7
ответ дан 30 November 2019 в 17:40
поделиться

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

1
ответ дан 30 November 2019 в 17:40
поделиться

Для начала вы можете сделать;

gdb "whatever"
break __libc_start_main
r

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

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

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

22
ответ дан 30 November 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: