2016-04-13 6 views
3

Ich habe eine Windows native application, die embedded resources enthalten, und ich möchte sie unter Verwendung der native API zugreifen. Gibt es native Funktionen, die mit Ressourcen umgehen (ähnlich wie FindResource/LoadResource) oder muss ich meinen eigenen PE-Leser erstellen, um sie zu extrahieren?Zugriff auf PE-Ressourcen mit Windows Native API?

+0

Wenn ich fragen darf, warum schreiben Sie eine native Anwendung? Wenn die Ressourcen in den Speicher zugeordnet werden, und ich nehme an, sie wären oder Sie können den Rest der ausführbaren Datei leicht zuordnen, können Sie nur auf sie zugreifen, indem Sie ihre Adresse kennen, so dass keine speziellen APIs benötigt werden. Welche Arten von eingebetteten Ressourcen verwenden Sie? –

+0

@KubaOber: Sie benötigen eine native Anwendung, wenn Sie ausführen möchten, bevor das Win32-Subsystem geladen wird. * "Sie können auf sie nur zugreifen, indem Sie ihre Adresse kennen" * - "FindResource" wäre die API, um die Adresse kennen zu lernen. – IInspectable

+0

Genau, es ist eine Anwendung, die ausgeführt werden muss, bevor Win32 geladen wird. Wenn der Rest der ausführbaren Datei, die die Ressourcen enthält, nicht dem Arbeitsspeicher zugeordnet ist, wie kann ich das tun? Und wie kann ich die Ressourcenadresse programmgesteuert finden, wenn ich sie nicht vorher definiert habe (es ist der Linker-Job, um die Ressource in die ausführbare Datei zu schreiben). –

Antwort

2

Ntdll exportiert LdrFindResource_U und LdrAccessResource, die fast Gegenstücke von FindResource bzw. LoadResource sind. Sie benötigen zusätzlich ein Gegenstück von GetModuleHandle, um sie zu verwenden. Wine Quelle (speziell resource.c und module.c) kann als Dokumentation dieser Funktionen verwendet werden.