Программы для анализа исполняемых файлов
Программы для поиска криптоалгоритмов в исполняемых файлах
При анализе различных защит часто приходится определять, какой алгоритм был использован для шифрования данных или преобразований регистрационного имени в правильный серийный номер. Часто авторы не изобретают велосипедов, а используют готовые алгоритмы шифрования или хеширования. Вы должны понимать, что алгоритмы шифрования и алгоритмы хеширования - это разные вещи, но для удобства в статье я буду называть их просто "криптоалгоритмами". Если алгоритмы стандартные, то их можно идентифицировать, например, по характерным константам-полиномам, таблицам преобразований или по последовательности выполняемых операций (хорошие статьи по этой теме на английском можно почитать тут). Для поиска криптоалгоритмов в исполняемых файлах созданы специальные программы, небольшой обзор которых я подготовил в этой статье.
Скриншот программы Krypto ANALyzer
Наиболее известный сканер криптоалгоритмов - это плагин Krypto ANALyzer для анализатора исполняемых файлов PEiD. Распознает BLOWFISH, CAST, CRC16/32, DES, DESX, FROG, GOST, HAVAL, ICE, ICELOCK, MARS, MD4/5, MISTY, NEWDES, Q128, RC2/5/6, RIJNDAEL, RIPEMD, SHA, SHARK, SKIPJACK, SNEFRU, SQUARE, TIGER, TWOFISH и многие другие алгоритмы. Найденные значения можно просто посмотреть или экспортировать в скрипт для дизассемблера IDA Pro. Я написал для Krypto ANALyzer небольшой загрузчик-переходник, позволяющий запускать плагин как самостоятельное приложение.
Krypto ANALyzer 2.92
Скриншот программы Crypto Checker
Crypto Checker от Aleph - один из лучших криптосканеров, которые созданы на сегодняшний день. Работает с огромной скоростью, определяет не только криптоалгоритмы, но и различные протекторы и упаковщики исполняемых файлов, текстовые строки, числовые примитивы, пароли и еще много-много другого. По тщательности анализа превосходит, наверное, все подобные инструменты. Из-за странной прихоти автора исполняемый файл имеет олдскульное расширение ".com", если вас это смущает, то можете его переименовать в нормальный ".exe"
Crypto Checker 1.3 alpha 11
Скриншот программы SnD Crypto Scanner
SnD Crypto Scanner - консольный анализатор от крякерской команды SnD. Распространяется в виде самостоятельной консольной утилиты и плагинов для отладчиков OllyDbg и Immunity Debugger. Есть небольшая путаница в номерах версий и названиях, консольная утилита называется Command Line Crypto Scanner 1.2, а плагины для отладчиков, соответственно, Crypto Scanner Plugin 0.5b. Но фактически это один и тот же анализатор. Особую ценность представляют собой исходники на чистом Ассемблере, которые также есть в комплекте.
SnD Crypto Scanner 0.5b
Скриншот программы SND Reverser Tool
SND Reverser Tool включает в себя предыдущий инструмент, но работает через GUI-интерфейс. Вызывается через меню Tools - Crypto Scanner. Также позволяет экспортировать найденные результаты в текстовый файл или в скрипт для IDA Pro. Распространяется вместе с исходниками.
SND Reverser Tool 1.5b1
Скриншот программы Signsrch
Signsrch 0.2.3
Скриншот программы Draft Crypto Analyzer
Консольный Draft Crypto Analyzer (DRACA) распознает криптоалгоритмы CRC32, RC5, RC6, RC2, TEA, MD5, Ripemd-160, Tiger, Skipjack, DES, Blowfish, Twofish, Safer, MARS, CAST-256, AES (Rijndael), SHA-1 и выводит степень совпадения в процентном соотношении. На мой взгляд, ценность такой информации нулевая. Ну узнал я, например, что в файле со 100% вероятностью используется MD5, ну и что дальше мне делать с этим знанием? Ни смещения в файле, по которому была найдена сигнатура, никакой другой полезной информации. Поэтому утилита сгодится разве что для пополнения коллекции.
Draft Crypto Analyzer 0.5.7b
Скриншот программы Hash & Crypto Detector
Hash & Crypto Detector - криптоанализатор от крякерской команды AT4RE. Поддерживает около 120 сигнатур, кроме этого пытается определить компилятор, которым был собран анализируемый файл, и провести еще какой-то загадочный эвристический анализ. По задумке авторов может запускать файлы, чтобы сделать дамп памяти, а потом его анализировать, но эта опция реализована глючно. Зато всяких ненужных свистоперделок типа скинового окна и нестандартных элементов управления добавлено от души.
Hash & Crypto Detector 1.4
Скриншот программы Keygener Assistant
Недалеко ушел и комбайн Keygener Assistant от этой же команды AT4RE. Помимо других возможностей, одна из вкладок в интерфейсе посвящена поиску криптоалгоритмов. Ее код, как я понимаю, полностью идентичен Hash & Crypto Detector.
Keygener Assistant 1.9
Скриншот программы x3chun's Crypto Searcher
x3chun's Crypto Searcher - чудо корейского программизма. Из пяти тестовых компьютеров согласилось работать лишь на одном. По заверениям автора, этот Crypto Searcher распознает около сотни криптоалгоритмов, но с такой феноменальной работоспособностью пригодится тоже только для коллекции.
x3chun's Crypto Searcher
Скриншот плагина findcrypt2
Конечно, ни один анализатор не гарантирует 100% обнаружение криптоалгоритмов. Достаточно изменить полиномы или константы (например, записав их в виде суммы двух чисел), переставить местами некоторые команды в алгоритме или каким-нибудь другим способом "размыть" сигнатуру, и статические анализаторы уже ничем не помогут. В некоторых случаях против этого помогут динамические анализаторы, как хорошо описано в этой презентации, но и они не панацея.
Если у вас есть какие-нибудь еще программы для поиска криптоалгоритмов, то напишите в комментариях к статье, я обязательно их добавлю.
Представь, что на твоем компьютере возник неизвестный исполняемый файл, но отправлять его на проверку в VirusTotal ты почему-то не хочешь. Например, потому что он может уйти в исследовательскую лабораторию, где его пристально изучат. В этой статье я покажу тебе, как провести такое исследование самостоятельно.
В целом, если говорить про анализ исполняемых файлов, можно выделить два подхода — это статический анализ и динамический анализ.
Виды анализа исполняемых файлов
Статический анализ предполагает анализ файла без его запуска на выполнение. Он может быть базовым — в этом случае мы не анализируем непосредственно инструкции процессора в файле, а производим поиск нетипичных для обычных файлов артефактов (например, таких как строки или названия и последовательности API-функций), либо расширенным — в этом случае файл дизассемблируется и производится исследование инструкций, поиск их характерных для вредоносных программ последовательностей и определение того, что именно делала программа.
Динамический анализ заключается в исследовании файла с его запуском в системе. Он тоже может быть базовым и расширенным. Базовый динамический анализ — это исследование файла с его запуском без использования средств отладки, он заключается в отслеживании событий, связанных с этим файлом (например, обращение к реестру, дисковые операции, взаимодействие с сетью и т. п.). Расширенный динамический анализ заключается в исследовании поведения запущенного файла с применением средств отладки.
В этой статье я расскажу о базовых техниках статического анализа. Его преимущества:
- позволяет получить результат достаточно быстро;
- безопасен для системы при соблюдении минимальных мер предосторожности;
- не требует подготовки специальной среды.
Основной недостаток базового статического анализа — это его низкая эффективность при анализе и распознавании сложных вредоносных программ, например упакованных неизвестным упаковщиком или использующих полное либо частичное шифрование файла с применением продвинутых алгоритмов.
Инструментарий
HEX-редакторы
Один из основных инструментов статического базового анализа — это HEX-редактор. Их много, но в первую очередь необходимо отметить Hiew. Это безусловный лидер и бестселлер. Помимо непосредственно функций HEX-редактора, в нем реализовано еще много дополнительных возможностей, связанных с анализом файла: это и дизассемблер, и просмотрщик секций импорта и экспорта, и анализатор заголовка исполняемых файлов. Главный недостаток — все это не бесплатно (хотя и весьма недорого — от 555 рублей).
HEX-редактор Hiew
Если не хочется тратить деньги, то можно обратить внимание, например, на Hex Editor Neo (есть бесплатный вариант) или на HxD Hex Editor.
Детекторы упаковщиков
Если есть подозрение, что файл упакован, то с помощью детектора упаковщиков можно попытаться определить, какой упаковщик при этом использовался, и попробовать распаковать исследуемый файл. Долгое время безусловным лидером здесь была программа PEiD, и в принципе можно пользоваться и ей, однако поддержка давно прекращена и новых сигнатур для определения типов упаковщика уже никто не выпускает. Альтернатива — Exeinfo PE.
Эта программа, помимо детекта упаковщиков, имеет еще много других функций для анализа исполняемых файлов Windows, и во многих случаях можно обойтись ей одной.
Специализированные утилиты для исследования исполняемых файлов Windows
Программа CFF Explorer из пакета Explorer Suite — это настоящий швейцарский нож для исследователя PE-файлов. Позволяет получить огромное количество разнообразной информации обо всех компонентах структуры PE-файла и, помимо прочего, может служить HEX-редактором.
Так что настоятельно рекомендую CFF Explorer, тем более что программа бесплатная.
Python-модуль pefile
Python-модуль pefile позволит обойтись при анализе PE-файлов исключительно интерпретатором Python. С ним практически все операции по базовому статическому анализу можно реализовать путем написания небольших скриптов. Прелесть всего этого в том, что заниматься исследованием PE-файлов можно в Linux.
Модуль присутствует в PyPi, и установить его можно через pip:
Ну и в завершение всего списка весьма популярный и востребованный инструмент, ставший своеобразным стандартом в среде антивирусной индустрии, — проект Yara. Разработчики позиционируют его как инструмент, который помогает исследователям малвари идентифицировать и классифицировать вредоносные сэмплы. Исследователь может создать описания для разного типа малвари в виде так называемых правил, используя текстовые или бинарные паттерны.
Меры предосторожности
Чтобы обезопасить систему при проведении базового статического анализа подозрительных файлов, необходимо:
- установить запрет на операцию чтения и выполнения анализируемого файла (вкладка «Безопасность» в контекстном меню «Свойства»);
- сменить разрешение файла с .exe на какое-нибудь другое (или вообще убрать расширение анализируемого файла);
- не пытаться открыть файл текстовыми процессорами и браузерами.
Можно обойтись этими мерами и не использовать виртуальную среду, хотя для полной безопасности можешь установить, например, Virtual Box и проводить анализ в нем (тем более что при динамическом анализе без виртуалки, как правило, не обойтись).
Определение типа файла
Я думаю, тебе известно, что признак PE-файла в Windows — это не только расширение .exe, .dll, .drv или .sys. Внутри него содержатся и другие отличительные черты. Первая из них — это сигнатура из байт вида MZ (или 0x4d, 0x5a в шестнадцатеричном представлении) в самом начале файла. Вторая — сигнатура также из двух байт PE и двух нулевых байтов следом (или 0x50, 0x45, 0x00, 0x00 в шестнадцатеричном представлении).
Смещение этой сигнатуры относительно начала файла записано в так называемом DOS-заголовке в поле e_lfanew , которое находится по смещению 0x3c от начала файла.
По большому счету наличие этих двух сигнатур в файле и подходящее расширение свидетельствует о том, что перед нами именно PE-файл, однако при желании можно посмотреть еще значение поля Magic опционального заголовка (Optional Header). Это значение находится по смещению 0x18 относительно начала сигнатуры PE . Значение этого поля определяет разрядность исполняемого файла:
- значение 0x010b говорит о том, что файл 32-разрядный (помни, что в памяти числа располагаются с обратной последовательностью байтов, сначала младший байт и далее старшие байты, то есть число 0x010b будет представлено последовательностью 0x0b, 0x01);
- значение 0x020b говорит о том, что файл 64-разрядный.
Посмотреть это все можно несколькими способами. Первый — с помощью HEX-редактора.
Признаки PE-файла в HEX-редакторе Hiew
Второй — используя CFF Explorer или Exeinfo PE. Они наглядно показывают значения указанных сигнатур.
Третий способ — использовать возможности Python, запустив такой скрипт:
Или можешь использовать вот такое правило для Yara:
Поиск в VirusTotal по хешу
Думаю, как узнать хеш файла, ты прекрасно знаешь. В крайнем случае можно написать небольшой скрипт на Python:
Результат подсчета хеша шлем на VirusTotal либо применяем мои рекомендации из статьи «Тотальная проверка. Используем API VirusTotal в своих проектах» и автоматизируем этот процесс с помощью небольшого скрипта на Python.
Как видишь, скрипт получает значение хеша, переданного в виде аргумента командной строки, формирует все нужные запросы для VirusTotal и выводит результаты анализа.
Если VirusTotal выдал в ответ какие-нибудь результаты анализа, это значит, что исследуемый файл уже кто-то загружал для анализа и его можно загрузить туда повторно и получить более актуальные результаты, на чем анализ можно и завершать. Но вот если VirusTotal не найдет файла в базах, тогда есть смысл идти дальше.
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Главная и сложнейшая задача хакера во время взлома программы — найти защитный механизм и обойти его. Для поиска я обычно использую отладчик WinDbg, а для «исправления» приложения — редактор Hiew (он, в частности, фигурирует в нашем цикле статей «Фундаментальные основы хакерства»). Но есть ли альтернативы для последнего? Задавшись этим вопросом, я изучил разные утилиты и хочу поделиться с тобой находками.
Так как мы в основном исследуем исполняемые файлы и динамические библиотеки для Windows, я брал только те РЕ-редакторы, которые работают в этой ОС. Если какой-то из инструментов поддерживает другие операционные системы и их исполняемые файлы (например, ELF), то это только плюс, но в данном случае для нас особого значения не имеет.
Мы будем выбирать утилиты на основе разумных и понятных факторов: функциональность, цена, удобство использования и частота обновления. Совсем старые решения, позволяющие редактировать бинарники для MS-DOS или Windows 9x, нам рассматривать ни к чему. Если какой-то из редакторов распространяется платно, то мы воспользуемся ознакомительной версией и отдельно отметим, какие функции в ней доступны. Но самый главный критерий будет состоять во взломе настоящего кракми.
Как ты помнишь, с помощью отладчика мы нашли в памяти адрес инструкции (см. четвертую статью «Фундаментальных основ»), которая определяет ход выполнения программы при вводе пароля. А благодаря сведениям из третьей статьи этот виртуальный адрес у нас получилось преобразовать в физический, находящийся на носителе. Таким образом, перейдя в исполняемом файле по адресу 0x402801 и заменив там инструкцию test на xor , мы получим программу, принимающую любые пароли. Меньше слов, больше дела!
PE-Explorer
Под первым номером идет довольно распространенный редактор PE-Explorer. В отличие от своего собрата Resource Tuner, он способен редактировать не только ресурсы приложения, но и код. Несмотря на свой почтенный возраст, исправно работает даже в Windows 10. К сожалению, PE-Explorer умеет работать только с 32-битными файлами и при попытке открыть 64-битный бинарник сообщает об ошибке.
Утилита обладает богатой функциональностью: отображает все элементы заголовка РЕ, определяет, к каким DLL происходит обращение, предсказывает поведение программ и логику взаимодействия с другими модулями и даже открывает запакованные UPX, UPack или NSPack файлы. Кроме того, она позволяет просматривать и редактировать секции PE-файла, исследовать содержимое таблиц импорта и экспорта и проверять наличие и целостность цифровой подписи. В качестве «вишенки на торте» тут присутствует полноценный дизассемблер.
Но это только на словах, а на деле мы его сейчас проверим. Из-за того что продукт платный, я использовал триальную версию, готовую работать на протяжении 30 дней. Об урезанных функциях ничего сказано не было.
Запустим редактор и сразу же откроем наше подопытное приложение. PE-Explorer первым делом выводит информацию о заголовке PE-файла. Для получения сведений об остальных разделах достаточно пощелкать кнопки на панели инструментов. Жмем пиктограмму Disassembler и открываем окно для выбора поддерживаемых инструкций: SSE, SSE2 и прочее. Указываем необходимые и начинаем процесс нажатием кнопки Start Now .
В открывшемся окне большую часть занимает область с дизассемблерным листингом, чуть ниже располагается шестнадцатеричный дамп. Если в заголовке нижней панели выбрать вкладку Strings, то отобразятся все строки в исследуемом приложении. Так что поиском можно найти и эталонный пароль. Однако для этого пришлось бы перебрать весь внушительный список доступных строк, так что отложим этот вариант до худших времен.
Так как мы с помощью отладчика нашли адрес инструкции, которая отвечает за ход выполнения программы, то попробуем проверить этот адрес в PE-Explorer: нажимаем Ctrl-F (или Search → Find) и вводим адрес для поиска: 402801 .
Что ж, я немного разочарован результатом дизассемблирования. Даже отладчик в этом месте показывает мне инструкцию test , а здесь я вижу лишь начало ее шестнадцатеричного кода: 0х85 . При этом я не могу редактировать код! Зачем мне все эти возможности, если утилита не позволяет делать самую базовую вещь?
Я даже не могу списать этот недочет на ограничения демоверсии, так как о ее отличиях от платной ничего толком не сказано. Допускаю, что с теми целями, для которых этот продукт предназначен (статическое изучение приложения и вектора его выполнения), он справляется хорошо. Однако нашим требованиям программа не соответствует, поэтому смело вычеркиваю PE-Explorer из списка кандидатов.
FlexHex
Думаю, нужно дать разработчику еще один шанс, поэтому рассмотрим другую утилиту Heaventools Software — hex-редактор FlexHex. Это инструмент для редактирования любых файлов, процессов или устройств в двоичном формате, ASCII и Unicode. По словам авторов, редактор умеет работать с файлами просто гигантского размера — 8 эксабайт. Кроме того, он поддерживает множество типов данных: байты, слова, двойные слова, восьмибитовые слова, различные десятичные значения со знаком и без, 32- и 64-битовые целые.
Сложные типы данных тут могут быть определены самим пользователем — это структуры, объединения, массивы, перечисления, строки и их сочетания. Обещают прямое редактирование любых значений, в том числе шестнадцатеричных, строковых, изменение областей памяти и типизированных данных. Поддерживаются битовые операции (NOT, AND, OR и XOR над блоками данных) и, конечно же, арифметические операции: сложение, вычитание, умножение, деление и взятие остатка.
Однако главная особенность FlexHex — это возможность сравнения файлов целиком или отдельными блоками. При этом использование карт сравнения позволяет сделать процесс более интуитивным и наглядным.
Все это хорошо, но как утилита справится со взломом — нашей элементарной задачкой? Отсутствие дизассемблера сразу намекает нам, что придется работать в hex-кодах. Запустим FlexHex и откроем с его помощью наш крякмис.
Первым делом попробуем найти смещение 402801 . Кликаем Navigate → Go To и в списке слева выбираем пункт Address, а в поле Enter address вводим значение для поиска. Убеждаемся, что включен режим Hex , и нажимаем кнопку Go To.
Однако результат поиска выносит нас далеко за границы приложения. Обрати внимание, что последние читаемые символы находятся по смещению 0x3659F0 . Если напрячь память, то вспоминается, что в заголовке РЕ базовый адрес (или адрес загрузки модуля) прописан как 0x400000 . А здесь он даже не учитывается!
Я выбрал такую длинную последовательность, чтобы не было ложных срабатываний. За ключевым байтом 0x74 тут скрывается ассемблерная инструкция JZ . Чтобы сделать из нее JNZ , достаточно переписать как 0x75 . В итоге мы получим программу, кушающую любые пароли, кроме эталонного.
С помощью Search → Find открываем окно и указываем в качестве типа для поиска Hex Bytes и направление. В поле ввода пишем нашу последовательность байтов: 85 C0 74 3C 68 . Есть совпадение! Теперь ставим курсор на 74 , нажимаем Delete и вписываем на этом месте 75 . Сохраняем результат и закрываем редактор. Проверь «пропатченное» приложение, оно теперь должно работать значительно лучше. 🙂
В целом я бы не сказал, что этот редактор отличается значительным удобством и соответствует нюансам работы благородного крекера. Поэтому отдавать за него 60 долларов кровных лично я бы не стал.
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Юрий Язев
Широко известен под псевдонимом yurembo. Программист, разработчик видеоигр, независимый исследователь. Старый автор журнала «Хакер».
PE Explorer - программа для просмотра, редактирования и анализа внутреннего устройства исполняемых файлов, таких как EXE, DLL, ActiveX и других. Набор различных инструментов, объединенные общим интерфейсом, позволит заглянуть внутрь любой программы. С помощью PE Explorer Вы можете исследовать как свои собственные программы и библиотеки, так и приложения от сторонних разработчиков, к чьим исходным текстам у Вас нет доступа. В состав PE Explorer входят редакторы ресурсов и секций, вьювер списка импортируемых из DLL функций и их синтаксиса, дизассемблер, сканер зависимостей, распаковщик UPX и другие утилиты.
PE Explorer позволяет анализировать, редактировать или оптимизировать проблемные файлы (яркий пример - изучение устройства вирусов, троянов и других вредоносных программ), переводить интерфейсы на другие языки, распаковывать и восстанавливать сжатые файлы, изучать дизайн и алгоритмы, используемые в программах. Программа подойдет для выполнения экспресс-анализа EXE файлов, для восстановления утерянной информации при работе над проектами с отсутствующим исходным кодом, для просмотра параметров функций стандартных библиотек, а также просто для сбора информации об исполняемом файле и отображения её в понятном и структурированном виде.
- Работа с 32-битными PE файлами - такими как .EXE, .DLL, драйвера устройств (.SYS, .ACM), ActiveX Controls (.OCX), библиотеки Borland (.DPL и .BPL), файлы визуальных стилей (.MSSTYLES), апплеты контрольной панели (.CPL), скринсейверы (.SCR) и любые другие win32 исполняемые файлы.
- Возможность работы с поврежденными файлами в безопасном режиме.
- Проверка интеграции исполняемого файла.
- Автоматическая распаковка файлов, упакованных UPX, WinUpack, NSPack.
- Сохранение изменений в виде новых исполняемых файлов.
- Дизассемблер для восстановления первичного кода исполняемого файла.
- Анализатор зависимостей для определения минимального набора необходимых для файла библиотек.
- Средство удаления отладочной информации, заключенной внутри файла.
- Средство удаления таблиц исправлений.
- Вычисление и коррекция контрольной суммы файла.
- Модификация значения точки входа.
- Модификация свойств файлов.
Sandboxie - приложение, которое поможет вам контролировать работу других программ. Защитит.
JETLOGGER - приложение, которое позволяет в максимально полном объеме фиксировать данные о.
Zemana AntiMalware - облачное антивирусное решение, которое способно глубоко сканировать компьютер, выявляя вредоносные и нежелательные программы.
Security Task Manager - надежный и эффективный инструмент для поиска, обнаружения и последующего.
Expert Home - бесплатное приложение, которое представляет собой домашнюю систему наблюдения.
RKill - бесплатная утилита, которая закрывает процессы известных вредоносных программ.
Отзывы о программе PE Explorer
Отзывов о программе PE Explorer 1.99 R6 пока нет, можете добавить.
Заглянуть «под капот» кода или посмотреть на внутреннее устройство CLR можно с помощью множества инструментов. Этот пост родился из твита, и я должен поблагодарить всех, кто помог составить список подходящих инструментов. Если я пропустил какие-то из них, напишите в комментариях.
Однако оставшийся пост посвящён инструментам для выполнения отдельных задач, которые позволят лучше понять, что происходит. Все инструменты имеют открытый исходный код.
PerfView от Вэнса Моррисона
PerfView – великолепный инструмент, который я использую уже несколько лет. Он работает на основе трассировки событий Windows (ETW) и позволяет лучше понять, что происходит внутри CLR, а также даёт возможность получить профиль использования памяти и центрального процессора. Чтобы освоить инструмент, придётся впитать много информации, например с помощью обучающих видео, но это стоит потраченного времени и усилий.
Инструмент настолько полезен, что сами инженеры Microsoft используют его, а многие из недавних улучшений производительности в MSBuild появились после анализа узких мест с помощью PerfView.
Инструмент создан на базе библиотеки Microsoft.Diagnostics.Tracing.TraceEvent library, которую можно использовать для создания собственных инструментов. Кроме того, поскольку исходный код библиотеки является открытым, в ней благодаря сообществу появилось множество полезных функций, например графики flame-graphs:
SharpLab от Андрея Щёкина
SharpLab появился как инструмент для проверки IL-кода, генерируемого компилятором Roslyn, и со временем превратился в нечто большее:
Вы правильно поняли: инструмент выводит
Object Layout Inspector от Сергея Теплякова
Официальной документации, которая бы описывала структуру полей, не существует, поскольку авторы CLR оставили за собой право изменить её в будущем. Но знания о структуре могут быть полезны, если вы работаете над быстродействующим приложением.
Как можно изучить структуру? Можно посмотреть на необработанную память в Visual Studio или использовать команду !dumpobj в SOS Debugging Extension. Оба подхода требуют много усилий, поэтому мы создадим инструмент, который будет выводить структуру объекта во время выполнения.
Согласно примеру в репозитории GitHub, если вы используете TypeLayout.Print() с подобным кодом:
появится следующий вывод, который точно покажет, как CLR расположит struct в памяти на основании правил оптимизации и заполнения байтами.
Подробную информацию о нём можно узнать из этого поста, но на высоком уровне он функционирует следующим образом:
Выглядит это следующим образом:
Инструменты на базе CLR Memory Diagnostics (ClrMD)
Я хотел собрать список всех существующих инструментов и призвал на помощь твиттер. Напоминалочка самому себе: осторожнее с твитами. Менеджер, ответственный за WinDBG, может прочитать их и расстроиться!
Наконец, чтобы как-то соблюсти баланс, недавно появилась улучшенная версия WinDBG, которой сразу же попытались добавить функциональность:
После всех этих слов переходим к списку:
Вы можете найти множество других инструментов, которые используют ClrMD. Сделать её доступной было хорошей идеей Microsoft.
Читайте также: