2016-04-13 10 views
3

У меня есть Windows native application, которые содержат embedded resources, и я хотел бы получить к ним доступ, используя native API. Существуют ли встроенные функции, которые обрабатывают ресурсы (что-то похожее на FindResource/LoadResource), или мне нужно будет создать свой собственный PE-ридер для их извлечения?Как получить доступ к ресурсам PE, используя собственный API для Windows?

+0

Если я могу спросить, почему вы пишете родное приложение? Если ресурсы отображаются в памяти, и я полагаю, что они были бы или вы можете легко сопоставить остальную часть исполняемого файла, вы можете получить к ним доступ, зная их адрес, поэтому никаких специальных API-интерфейсов не требуется. Какие типы встроенных ресурсов вы используете? –

+0

@KubaOber: вам нужно собственное приложение, если вы хотите выполнить его до загрузки подсистемы Win32. * «Вы можете получить к ним доступ, зная их адрес» * - «FindResource» будет API, чтобы узнать адрес. – IInspectable

+0

Точно, это приложение, которое должно быть выполнено до загрузки Win32. Если остальная часть исполняемого файла, содержащего ресурсы, не отображается в память, как я могу это сделать? И как я могу программно найти адрес ресурса, как только я его не определяю заранее (это задание компоновщика для размещения ресурса внутри исполняемого файла). –

ответ

2

Ntdll экспортирует LdrFindResource_U и LdrAccessResource, что почти двойники FindResource и LoadResource соответственно. Для их использования вам понадобится копия GetModuleHandle. Wine источник (специально resource.c и module.c) может использоваться в качестве документации этих функций.