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

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

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

Спасибо!


person Badmanchild    schedule 08.06.2011    source источник


Ответы (3)


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

person matt    schedule 09.06.2011

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

person Matthew Slattery    schedule 11.06.2011

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

У вас действительно проблема с stepi? Отображение соответствующей части (частей) вашего сеанса отладки может открыть ваш вопрос для лучших ответов.

person Employed Russian    schedule 08.06.2011