Номер аргумента функции получения Intel Pin

Я пытаюсь написать трассировщик вызова функции с помощью Pin. Он может печатать каждый вызов функции, а также значение каждого аргумента.

Сложность состоит в том, чтобы получить все аргументы функции. Используя RTN_InsertCall, вы можете передать аргументы функции в свой код инструментария:

Intel Pin RTN_InsertCall несколько аргументов функции

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

Спасибо!

5

Решение

Вы должны предоставить важную информацию о том, есть ли у вас отладочные символы для рассматриваемого двоичного файла или нет. Если у вас есть доступные символы отладки, то это просто. Существуют стандартные библиотеки для их анализа.

Если у вас нет символов отладки, то это может быть очень сложно, и вам лучше использовать визуальный инструмент исследования, такой как IDA Pro. Было проведено некоторое исследование по автоматическому поиску сигнатур функций для очищенных двоичных файлов (например, ftp://ftp.cs.wisc.edu/paradyn/papers/Jacobson11Unstrip.pdf), но тема по-прежнему актуальна, и какой бы инструмент вы ни использовали, ожидайте, что он в какой-то момент потерпит неудачу, потому что проблема в конечном счете неразрешима, и все инструменты просто прибегают к эвристике для восстановления этой информации. Свободно доступная глава 12 книги Криса Игла (http://www.tinker.tv/download/idaPro_ch12.pdf) описывает способ, которым это делает МАР.

2

Другие решения

В C информация о типе не сохраняется в двоичном виде.

В C ++ вы можете попытаться использовать искаженное имя функции, чтобы выяснить типы аргументов. Однако искажение имен не является стандартным и обычно несовместимо между различными компиляторами. Очевидно, здесь нет никаких гарантий.

Смотрите также:

Можно ли программно получить подпись функции в общей библиотеке?

Получение типов аргументов функции

1

По вопросам рекламы [email protected]