Как извлечь раздел RT_RCDATA из исполняемого файла Win32 (предпочтительно на C #)?
Вопрос
Единственный известный мне способ сделать это в настоящее время - открыть EXE-файл в Visual Studio.Я бы хотел иметь возможность сделать это полностью на C #, если это возможно.Другие варианты включают в себя:
- P/Вызов LoadResource() из Win32 API
- Используя существующий инструмент (кто-нибудь знает такой?)
- Другие идеи?
Спасибо!
Решение
P / Invoke LoadResource будет вашим самым безопасным выбором.
В противном случае вам придется написать свой собственный P/E процессор, например. Пример PE-процессора.Процессор - это не конец света, но, как вы можете видеть, гораздо более сложный процесс, чем P / Invoke.
Чуть не забыл, что касается инструментов, большинство P / E браузеров сделают это за вас.Например.P / E Explorer, который доступен, но на самом деле не разрабатывается.Я также использовал IDA Pro для подобных вещей.Быстрый плагин IDA сделал бы это легко.
Другие советы
Я предполагаю, что вы пытаетесь прочитать ресурс типа RCDATA из исполняемого файла (имейте в виду, что "исполняемый раздел" означает другое - он относится к частям .text, .data, .rdata и т.д. PE-файла).Если вы хотите прочитать это из текущей сборки, вот руководство, показывающее, как: Доступ к встроенным ресурсам с помощью GetManifestResourceStream, используя Получаем manifestresourcenames и GetManifestResourceStream Получить manifestresourcestream методы.
Если вы не хотите считывать его из текущего исполняемого файла, вы можете использовать метод, аналогичный показанному здесь.
Преимущество этих методов перед PInvoke в том, что они работают на 100%.ЧИСТЫЕ, и вам не нужно возиться с маршалингом аргументов для / из типов данных платформы и проверкой того, что вы проверили все возвращаемые значения.
Есть очень полезный библиотека для многих ресурсных задач в http://resourcelib.codeplex.com
Многие классы и функции действительно оборачивают эти вызовы window-api UpdateResource(...)
, и т.д.