Библиотека для работы с PE-файлами (C++) Суббота, 8. Сентябрь 2012 автор: dx http://kaimi.ru/2012/09/portable-executable-library/ http://kaimi.ru/ Выкладываю более-менее завершенную библиотеку для работы с Portable Executable (PE) файлами. Основные фичи библиотеки: [+] Чтение 32-разрядных и 64-разрядных PE-файлов (PE, PE+) для Windows, возможность единообразной работы с обоими форматами [+] Пересборка 32-разрядных и 64-разрядных PE-файлов [+] Работа с директориями и заголовками [+] Конвертирование адресов [+] Чтение и редактирование секций PE-файла [+] Чтение и редактирование таблицы импортов [+] Чтение и редактирование таблицы экспортов [+] Чтение и редактирование таблиц релокаций [+] Чтение и редактирование ресурсов [+] Чтение и редактирование TLS [+] Чтение конфигурации образа (image config) [+] Чтение базовой информации .NET [+] Чтение информации о привязанном импорте [+] Чтение директории исключений (только PE+) [+] Чтение отладочной директории с расширенной информацией [+] Вычисление энтропии [+] Изменение файлового выравнивания [+] Изменение базового адреса загрузки [+] Работа с DOS Stub'ом и Rich overlay [+] Высокоуровневое чтение ресурсов: картинки, иконки, курсоры, информация о версии, строковые таблицы, таблицы сообщений [+] Высокоуровневое редактирование ресурсов: картинки, иконки, курсоры, информация о версии Словом, все, что вы хотели сделать с PE, но боялись спросить, как. Весь код библиотеки снабжен обильными комментариями на английском языке. В проект включено 25 примеров работы с библиотекой, которые показывают, как работать с той или иной частью библиотеки (комментарии на русском языке). Имеются солюшены для MSVC++ 2008 и 2010. Справочной информации пока нет, возможно, соберусь ее как-нибудь написать. Библиотека не использует WinAPI или другие библиотеки, только STL. Возможно, я когда-нибудь сделаю ее кроссплатформенной, но пока до этого далеко из-за отличия размера типа wchar_t в Windows и Linux (а в PE-файлах очень много юникодных 16-байтовых строк) и некоторых других сложностей. Библиотека и примеры собираются под Windows x86 и x64, но для того, чтобы работать с PE+, собирать под x64 необязательно. Библиотека не исполняет считываемые файлы, не маппит их в память, поэтому с ее помощью можно спокойно открывать подозрительные исполняемые файлы и работать с ними. Проект залит на code.google.com на случай возможных правок и улучшений, так как сейчас библиотека в стадии альфа-версии. Репозиторий: http://code.google.com/p/portable-executable-library/ Скачать архив с последними сорсами: ZIP