2017-02-28 4 views
0

Ich versuche, eine COM DLL mit Intel Pin zu instrumentieren. Leider ist Intel Pin nur für die Instrumentierung von processes gedacht, nicht für DLLs.Intercept COM dllhost.exe Aufruf

Also meine Frage ist - ist es möglich, die Befehlszeile zu beeinflussen, die von COM verwendet wird, um den Inproc-Server-Host (dllhost.exe) zu starten, so dass ich pin.exe mit dllhost.exe als Argument aufrufen kann? Oder ist der Aufruf von dllhost.exe in Windows hartcodiert, was bedeuten würde, dass meine Idee sinnlos ist?

+0

Nicht fest codiert, es ist in der Registrierung. Sie benötigen die AppId-GUID, die im CLSID-Registrierungsschlüssel deklariert ist. Dann schauen Sie in HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Classes \ AppID nach. Der DllSurrogate Wert sagt ihm, dass es gehostet werden muss, wenn der Wert leer ist, wird es dllhost.exe sein. Sie können dies in eine andere ausführbare Datei ändern. Nicht beschränkt auf eine Kopie von dllhost.exe mit einem anderen Namen, egal welchen Auslöser Sie benötigen. –

Antwort

2

DLLHost.exe ist ein Beispiel für ein DLL-Ersatzzeichen, mit dem Sie einen DLL-COM-Server in einer separaten ausführbaren Datei instanziieren können. Sie können eine beliebige ausführbare Datei angeben, die den Registrierungsschlüssel DllSurrogateExecutable verwendet, und Sie könnten Ihre eigene ausführbare DLL-Ersatzdatei code implementieren, die Pin direkt verwendet.

Natürlich ist ein separates Problem, wie Ihr COM-Objekt erstellt wird. DLL-Surrogate werden nur dann verwendet, wenn die Klasse für eine AppID registriert ist, die angibt, dass sie ein DLL-Ersatzzeichen und verwenden kann. Der Ersteller des COM-Objekts gibt CLSCTX_LOCAL_SERVER für CoCreateInstance und andere an. Möglicherweise müssen Sie den Aufrufer ändern, um den Kontext zu ändern, wenn dies der Fall ist.

Um herauszufinden, welche AppID Ihre Klasse unter registriert ist, können Sie einige Tools wie OleView verwenden, aber es ist nicht zu schwer aus dem Registrierungseditor zu tun. Wenn Sie die CLSID-GUID erhalten, führen Sie eine Suche unter HKEY_CLASSES_ROOT\CLSID\GUID durch. Dort finden Sie möglicherweise einen AppID-Wert. Dies ist eine GUID, die auf HKEY_CLASSES_ROOT\AppID\GUID2 zeigt und enthält, ob es als DLL-Ersatz registriert ist und wo Sie Ihren DllSurrogateExecutable-Schlüssel eingeben können.

+0

Schöne Idee, danke. Leider scheint das Schreiben eines [benutzerdefinierten Ersatzes] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682432 (v = vs.85) .aspx) kompliziert zu sein :) Aber sicherlich machbar. – rustyx