Как я могу заставить GDB выполнять код, для которого нет символов

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

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

Спасибо!

3 ответа

Решение

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

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

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

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

Другие вопросы по тегам