Как я могу заставить GDB выполнять код, для которого нет символов - PullRequest
0 голосов
/ 08 июня 2011

У меня есть программа на C, которая (по уважительной причине) выделяет память, копирует в нее некоторый код, использует mprotect () для предоставления ей прав на выполнение, а затем вызывает этот код.Да, я знаю, что это непереносимо и небезопасно, но есть веская причина.В любом случае, мне нужно сделать один шаг с GDB через ассемблерный код (с помощью команды si), но он не позволяет мне - он постоянно говорит: «Нет функции, содержащей программный счетчик для выбранного кадра»

Есть лиспособ заставить GDB выполнить этот код?Есть ли другой отладчик, который я должен использовать вместо этого типа вещей?

Спасибо!

Ответы [ 3 ]

1 голос
/ 09 июня 2011

Похоже, вам нужны команды add-symbol-file', or add-symbol-file-from-memory ' сообщить GDB о коде, который был скопирован в эту область памяти.

1 голос
/ 11 июня 2011

Вы должны быть в состоянии выполнить ваш код, используя display/i $pc, прежде чем начинать с si / stepi.Это говорит о необходимости разборки текущей инструкции непосредственно перед печатью приглашения каждый раз.

0 голосов
/ 09 июня 2011

Команда stepi сама по себе не требует никаких символов и должна работать очень хорошо в описанном вами сценарии (хотя я на самом деле не проверял, так ли это).

Ваша проблема действительно с stepi? Показ соответствующих частей вашей сессии отладки может открыть ваш вопрос для получения лучших ответов.

...