LINUX.ORG.RU

Как работает gdb call?

 ,


0

1

Собственно сабж. Помогите, плиз, разобраться. Не могу найти в коде gdb где он реализуется.

В man ptrace ничего что могло бы помочь реализовать вызов кода в отлаживаемом процессе не вижу.

Откуда копать?

★★★★★

Последнее исправление: ei-grad (всего исправлений: 1)

Вот не вспомню сразу название файлов, но call-код является ABI OS специфичным, посему имя определяется относительно просто. И идея реализации проста: положить все параметры в регистры процессора и стек (в соответствии с ABI и отпадочной информацией о функции), обеспечить возврат на точку останова, задать в pc точку входа и толкнуть процессор.

io ★★
()

Вообще можно воспользоваться, например, файлом arm-tdep.c (это для ARM-процессора), там посмотреть хотя бы arm_push_dummy_call - установка аргументов и окружения для вызова. В сложном случае, естественно могут быть необходимы дополнительные действия по захвату дополнительных ресурсов до выполнения и освобождению оных по окончанию call. Заместим, что arm-файлов достаточно мало. Для каждой ОС есть свои процедуры для уточнения ABI, определения действий с памятью и регистрами процесса, которые используются в tdep.

io ★★
()
Ответ на: комментарий от io

Ок, вроде теперь понятно что где искать, и как оно должно работать. Спасибо!

ei-grad ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.