Как я могу заставить GDB выполнять код, для которого нет символов
У меня есть программа на C, которая (по уважительной причине) выделяет память, копирует в нее некоторый код, использует mprotect() для предоставления ей прав на выполнение, а затем вызывает этот код. Да, я знаю, что это непереносимо и небезопасно, но есть веская причина. В любом случае, мне нужно сделать один шаг с GDB через ассемблерный код (с помощью команды si), но он не позволит мне - он продолжает говорить: "Ни одна функция не содержит счетчик программ для выбранного кадра"
Есть ли способ заставить GDB выполнить этот код? Есть ли другой отладчик, который я должен использовать вместо этого типа вещей?
Спасибо!
3 ответа
Похоже, вы хотите add-symbol-file', or
Команды add-symbol-file-from-memory', чтобы GDB знал о коде, который был скопирован в эту область памяти.
Вы должны быть в состоянии выполнить ваш код, используя display/i $pc
прежде чем начать si
/ stepi
, Это говорит о необходимости разборки текущей инструкции непосредственно перед печатью приглашения каждый раз.
stepi
Сама команда не требует каких-либо символов и должна нормально работать в описанном вами сценарии (хотя я на самом деле не проверял, так ли это).
Ваша проблема действительно с stepi
? Показ соответствующих частей вашей сессии отладки может открыть ваш вопрос для лучших ответов.