Отборочные задания по проекту "Восстановление параметров матрицы переходов условного выражения в branch coverage" (Profiler С++ Team)
Задания можно писать на языках C# или C++, если иное не указано в самом задании. Использование С++ для решения дает дополнительные баллы, но требует от вас обязательного использования как минимум стандарта C++11 (lambdas, namespaces, SFINAE, smart pointers, ...). Использование сторонних утилитных библиотек в С++ таких как boost, gtest разрешено, но всю логику работы вашей программы вы должны написать сами.
Знание английского языка для чтения сопутствующей документации обязательно, так как русского аналога просто не существует.
Решение нескольких задач увеличивает ваши шансы. Но, пожалуйста, расчитывайте свои силы и сделайте хотя бы одно задание хорошо!
Важно: Все ваши решения должны быть представлены как fork данного репозитория на GitHub.
Написать программу для извлечения метадата секции (BSJB
блок - pecoff.docx
3.4.3 offset 208/224 и 6.10, который недокументирован, но описан в winnt.h
как IMAGE_COR20_HEADER
) и информации неоходмой для отладки (pecoff.docx
3.4.3 offset 144/160; RSDS
блок - pecoff.docx
6.1.1 IMAGE_DEBUG_TYPE_CODEVIEW
, MPDB
блок - PE-COFF.md
type 17) из PE-файлов:
- расположенных прямо на диске;
- предварительно загруженных в память текущего процесса при помощи функции Win32 API
LoadLibraryEx
;
Парсить BSJB
блок не нужно. MPDB
желательно распаковать перед записью. Тестовые данные для задания находятся в репозитории.
Написать программу для вывода в текстовый файл содержимого BSJB
блока (ECMA-335.pdf
II.24 и PortablePdb-Metadata.md
целиком) в читаемом формате.
Внимание: В стандарте не описано расширение, реальзованное в CoreCLR
: присутствует дополнительный бит EXTRA_DATA
(маска 0x40
) в поле HeapSizes
(ECMA-335.pdf
II.24.2.6), который сообщает, что после поля Sorted
появляется дополнительные 4 байта. Значение этих байт можно игнорировать.
Парсить и выводить данные из #Blob
стрима метаданных не нужно. Тестовые данные для задания находятся в репозитории.
Написать многопоточный grep по каталогу, с возможностью поиска с/без учета регистра.
Требования к реализации:
- Задание должно быть сделано на C++11/14/17
- Работа с FS происходит через
boost::filesystem
илиstd::experimental::filesystem
- Exception-safe code
- Кроссплатформенность