Что такое инструментарий?

Я услышал, что этот термин использовал много в том же контексте как вход, но я, может казаться, не нахожу четкое определение того, каково это на самом деле.

Это - просто более общий класс регистрирующих/контролирующих инструментов и операций?

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

25
задан Jon Seigel 12 March 2010 в 17:22
поделиться

3 ответа

Это общий термин для того, чтобы что-то сделать с вашим кодом, необходимое для дальнейшего анализа.

Специально для таких языков, как C или C ++, существуют такие инструменты, как Purify или Quantify, которые используют память профиля, статистику производительности и т.п. Чтобы эти программы профилирования работали правильно, необходим этап «инструментирования», чтобы вставить счетчики, проверки границ массива и т. Д., Которые используются программами профилирования. Обратите внимание, что в сценарии Purify / Quantify инструментирование выполняется автоматически как шаг после компиляции (фактически, это дополнительный шаг к процессу связывания), и вы не трогаете исходный код.

Некоторые из них менее необходимы для динамического кода или кода виртуальной машины (например, инструменты профилирования, такие как OptimizeIt, доступны для Java, которая делает многое из того, что делает Quantify, но не требует специального связывания), но это не отменяет концепцию.

6
ответ дан 28 November 2019 в 21:42
поделиться

инструментарий обычно используется в динамическом анализе кода.

он отличается от регистрации, поскольку инструменты обычно выполняются автоматически программным обеспечением, в то время как регистрация требует человеческого интеллекта для вставки кода регистрации.

4
ответ дан 28 November 2019 в 21:42
поделиться

Я пишу инструменты для работы с инструментами. Вот что я думаю.

  • Переписывание DLL. Это то, что делают такие инструменты, как Purify и Quantify. В предыдущем ответе на этот вопрос говорилось, что они используют посткомпиляцию / ссылку. Это не так. Инструмент Purify и Quantify использует DLL при первом запуске после цикла компиляции / компоновки, а затем кэширует результат, чтобы его можно было быстрее использовать в следующий раз. Для больших приложений профилирование библиотек DLL может занять очень много времени. Это также проблематично - в компании, в которой я работал в период с 1998 по 2000 год, у нас было большое приложение на 2 миллиона строк, которое потребовало бы 4 часа для инструментария, и 2 библиотеки DLL случайным образом вылетали во время инструментирования, и если бы одна из них не сработала, вам пришлось бы удалить оба, а затем начать все сначала.

  • На месте приборов. Это похоже на перезапись DLL, за исключением того, что DLL не изменяется, а образ на диске остается нетронутым. Функции DLL соответствующим образом подключаются к задаче, требуемой при первой загрузке библиотеки (либо во время запуска, либо после вызова LoadLibrary (Ex). Вы можете увидеть методы, подобные этой, в библиотеке Microsoft Detours.

  • On-the- fly Instrumentation. Подобно инструментарию на месте, но фактически инструментирует метод только при первом выполнении метода. Это более сложно, чем на месте, и откладывает штраф за инструментарий до первого обнаружения метода. В зависимости от того, что вы делаете , это может быть хорошо или плохо.

  • Инструментарий промежуточного языка. Это то, что часто делается с языками Java и .Net (C ~, VB.Net, F # и т. д.).Язык компилируется в промежуточный язык, который затем выполняется виртуальной машиной. Виртуальная машина предоставляет интерфейс (JVMTI для Java, ICorProfiler (2) для .Net), который позволяет вам отслеживать, что делает виртуальная машина. Некоторые из этих параметров позволяют изменять промежуточный язык непосредственно перед его компиляцией в исполняемые инструкции.

  • Инструментарий промежуточного языка через рефлексию. И Java, и .Net предоставляют API-интерфейсы отражения, которые позволяют обнаруживать метаданные о методах. Используя эти данные, вы можете создавать новые методы на лету и инструментировать существующие методы так же, как с ранее упомянутым инструментарием промежуточного языка.

  • Инструментарий времени компиляции. Этот метод используется во время компиляции для вставки соответствующих инструкций в приложение во время компиляции. Эту возможность предоставляет не часто используемая функция профилирования Visual Studio. Требуется полная перестройка и ссылка.

  • Инструментарий исходного кода. Этот метод используется для изменения исходного кода для вставки соответствующего кода (обычно условно скомпилированного, чтобы его можно было отключить).

  • Инструментарий времени компоновки. Этот метод действительно полезен только для замены распределителей памяти по умолчанию на распределители трассировки. Ранним примером этого был детектор утечки памяти Sentinel на Solaris / HP в начале 1990-х годов.

Различные методы на месте и на лету чреваты опасностями, так как очень сложно безопасно остановить все потоки и изменить код, не рискуя потребовать вызова API, который может захотеть получить доступ к блокировке. который удерживается потоком, который вы только что приостановили - вы не хотите этого делать, вы попадете в тупик. Вы также должны проверить, выполняет ли этот метод какой-либо из других потоков, потому что в этом случае вы не можете его изменить.

Методы инструментария на основе виртуальной машины намного проще в использовании, поскольку виртуальная машина гарантирует, что вы можете безопасно изменить код на этом этапе.

  • (РЕДАКТИРОВАТЬ - этот элемент добавлен позже) Инструментарий подключения IAT. Это включало изменение таблицы адресов импорта для функций, связанных с другими DLL / общими библиотеками. Этот тип инструментовки, вероятно, самый простой способ начать работу, вам не нужно знать, как дизассемблировать и изменять существующие двоичные файлы или делать то же самое с кодами операций виртуальных машин. Вы просто вставляете в таблицу импорта свой собственный адрес функции и вызываете настоящую функцию из своего хука. Используется во многих коммерческих инструментах и ​​инструментах с открытым исходным кодом.

Думаю, я рассмотрел их все, надеюсь, это поможет.

16
ответ дан 28 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: