рного коду за допомогою бінарної інструментації. В основі інструментації лежить утиліта Pin - A Dynamic Binary Instrumentation Tool, яка впроваджується в досліджуваний процес під час його запуску і дозволяє відстежувати виконання практично будь-яких інструкцій, надає API доступу до вмісту регістрів, контексту виконання програми, символьної та налагоджувальної інформації. Зрозуміло, що всебічний аналіз виконуваного коду не може бути проведений без істотних накладних витрат, тому він розділений на рівні, що відображають глибину і складність аналізу. Чеми вище рівень, тим більше буде потрібно часу для перевірки додатку. p align="justify"> Рівень mi1 - дозволяє виявляти тільки витоку пам'яті, виділеної в купі (heap).
Глибина стека функцій дорівнює 7, що дасть достатньо інформації для визначення місцезнаходження помилки і структури викликів функцій, виділяли пам'ять.
Рівень mi2 - дозволяє виявляти всі інші помилки роботи з пам'яттю в купі, які ми розглянемо нижче. Однак для зниження накладних витрат і прискорення аналізу глибина стека обрана рівній одиниці. Тобто на цьому рівні ми зможемо знайти відповідь на питання, чи є в принципі помилки в програмі. А де ці помилки, нам допоможе визначити наступний рівень. p align="justify"> Рівень mi3 - відрізняється від попереднього тим, що глибина стека збільшена до 12-ти. Плюс доданий функціонал пошуку загублених покажчиків. На цьому рівні ми одержуємо найбільш повний аналіз коректності роботи з пам'яттю в купі, але заплатимо за це накладними витратами, які збільшать час виконання програми від 20 до 80 разів у порівнянні з оригіналом. p align="justify"> Рівень mi4 - вищий рівень, доповнено аналізом помилок доступу до пам'яті, виділеної на стеку, які не виявлені на стадії компіляції або за допомогою run-time check опцій компілятора. Рівень вкладеності функцій - 32. Як і всі інші рівні, 4-й є інклюзивним, тобто включає в себе всі види аналізу на попередніх рівнях. Відповідно, накладні витрати будуть максимальними. p align="justify"> Залежно від обраного рівня аналізу, Parallel Inspector здатний виявляти такі види помилок роботи з пам'яттю: Leak - виникають при виділенні програмою пам'яті в купі і незвільнена її по закінченні програми; Memory Access - виникають при читанні/запису за недійсними адресами пам'яті, в купі чи в стеку; Partial Memory Access - виникають при читанні/запису по частково недійсним адресами пам'яті; Allocation - виникають при спробі звільнити пам'ять за неіснуючою адресою; Allocation/Deallocation - виникають при спробі звільнити пам'ять з допомогою функцій, не відповідають функції виділення пам'яті; Memory Access - виникають при спробі читання неініціалізованої пам'яті, в купі чи в стеку; Partial Memory Access - в виникають при спробі читання частково неініціалізованої пам'яті.
Приклад ілюстрації помилок пам'яті