Я за пределами исполняемого файла gdb, и у меня даже нет стека, который соответствует этой цели. Я все равно хочу сделать одноэтапный шаг, чтобы я мог проверить, что происходит в моем ассемблере, потому что я не эксперт в сборке x86. К сожалению, gdb отказывается выполнять эту простую отладку на уровне сборки. Это позволяет мне устанавливать и останавливать соответствующую точку останова, но как только я пытаюсь выполнить однократный шаг вперед, gdb сообщает об ошибке "Невозможно найти ограничения текущей функции", и EIP не изменяется.
Дополнительная информация:
Машинный код был сгенерирован операторами gcc asm, и я скопировал его в ячейку памяти ядра, где она выполняется, из вывода objdump -d. Я бы не прочь использовать простой способ использовать загрузчик для загрузки моего объектного кода на перемещенный адрес, но помните, что загрузка должна выполняться в модуле ядра.
Я полагаю, что другой альтернативой было бы создание фальшивого модуля ядра или файла информации об отладке, чтобы дать gdb, чтобы заставить его полагать, что эта область находится в программном коде. gdb отлично работает на самом исполняемом ядре.
(Для тех, кто действительно хочет знать, я вставляю код во время выполнения в пространство данных ядра Linux внутри VMware VM и отлаживаю его из удаленной отладки gdb с помощью встроенной в VMware Workstation заглушки gdb. не писать ядровые эксплоиты, я аспирант безопасности, пишущий прототип.)
(Я могу установить точку останова для каждой команды внутри моей сборки.Это работает, но будет довольно трудоемкой через некоторое время, так как размер инструкций сборки x86 меняется и расположение сборки будет меняться каждый раз, когда я перезагружу.)