Инструмент Pin Like для внедрения кода инструментовки во время компиляции

Как вы, возможно, знаете, PIN — это инструмент для динамического бинарного инструментария. Например, используя Pin, я могу контролировать каждую загрузку и сохранение в своем приложении. Мне было интересно, есть ли аналогичный инструмент, который вводит код во время компиляции (используя более высокий уровень информации, не требуя от нас записи прохода LLVM), а не во время выполнения, как Pin. Меня особенно интересует такой инструмент для LLVM.


person pythonic    schedule 21.09.2012    source источник


Ответы (1)


Вы можете написать собственные проходы LLVM и применить их к своему коду, чтобы "инструментировать" его во время компиляции. время. Они работают на LLVM IR и создают LLVM IR, поэтому для некоторых задач это будет очень естественно, а для других задач это может быть обременительно или сложно (из-за различий между LLVM и IR и исходным языком). По-разному.

person Harel    schedule 21.09.2012
comment
Как будто я этого еще не знал, гений :)! Я говорил об инструменте, который может сделать это за вас на несколько более высоком уровне, например, я говорю инструменту делать то-то и то-то при каждой загрузке и то-то и то-то в каждом магазине. Конечно, я могу написать свой пропуск, но это не мой вопрос. - person pythonic; 21.09.2012
comment
Так почему бы не использовать такой подход? Что вы имеете в виду, что лучше удовлетворит ваши потребности? - person Harel; 21.09.2012
comment
Потому что это сложнее сделать самому, чем позволить инструменту написать за меня пропуск. Мне просто нужно сказать это, чтобы сделать то-то и то-то для какого-то события, как в случае с Пин. Так что в основном мне нужен инструмент, который может создать для нас проход. - person pythonic; 21.09.2012
comment
Основываясь на моем опыте работы с проходами LLVM и моем более ограниченном опыте работы с Pin API, они очень похожи, я не думаю, что есть такая большая разница. Один хороший трюк — использовать llc -march=c++ для создания кода LLVM C++ API, который создает IR для кода C/C++, который вы ему передаете (имеет ли это смысл?), если, как и большинству смертных, вам легче кодировать то, что вы хотите сделать в C/C++, чем вызывать API C++ для создания IR для него, что может оказаться очень удобным. - person Harel; 21.09.2012