Ich debugge eine Windows-Anwendung unter Linux mit Wine (Eudora), mit WINEDEBUGGER=+relay
um ein (ziemlich umfangreiches) Protokoll der API-Aufrufe zu erstellen. Nun, da ich erkannt habe, wo das Problem liegt, möchte ich die gleiche Anwendung in nativem Windows (nun ja, eigentlich VirtualBox) ausführen, um zu sehen, wie sie sich verhält und die Unterschiede (falls vorhanden) zu vergleichen.
Ich weiß, dass es mehrere Windows-Tools gibt, die API-Aufrufe nachverfolgen können, aber ich brauche eines, das die gleiche Art von Protokoll generieren kann, wie Wine es tut, damit ich den gleichen Arbeitsablauf verwenden kann:
-
Konfigurieren Sie den Logger/Tracer so, dass er eine bestimmte Liste von Funktionen ausschließt (wie in
KERNEL32.SetLastError; KERNEL32.GetLastError; KERNEL32.FlsGetValue; ntdll.RtlEnterCriticalSection; ntdll.RtlLeaveCriticalSection
gleichbedeutend mit Wine'sDebug\RelayExclude
Eintrag ins Register. Dies ist von entscheidender Bedeutung, da es den Unterschied zwischen einer 30MB großen Logdatei und einer 1,3 GB eine -
Alle andere Aufrufe müssen verfolgt werden, unabhängig von Bibliothek/Modul/Dll/was auch immer. Sie müssen no nach Modulen sortiert oder gefiltert werden, da die Reihenfolge der Aufrufe für mich entscheidend ist (damit ich zurückverfolgen kann und nicht verloren gehe)
-
Starten Sie den Tracer so einfach wie
tracer c:\ProgramFiles\Eudora\Eudora.exe 2> hugelogfile.txt
-
Eudora wird gestartet, ich führe meine Aktionen aus und schließe Eudora.
-
Tracer stoppt, wenn Eudora beendet wird. Das Protokoll ist bereit, damit ich damit spielen kann.
Hier ist ein Ausschnitt aus einem Wine-Protokoll, falls dies hilfreich ist (ein ähnliches Format ist wünschenswert):
0009:Call advapi32.RegQueryValueW(80000000,0033b5dc L".txt",0033b9a0,0033bbac) ret=7e9a6c7a
0009:Ret advapi32.RegQueryValueW() retval=00000000 ret=7e9a6c7a
0009:Call advapi32.RegOpenKeyExW(80000000,0033b9a0 L"txtfile",00000000,02000000,0033a528) ret=7e9a3b66
0009:Ret advapi32.RegOpenKeyExW() retval=00000000 ret=7e9a3b66
0009:Call advapi32.RegCloseKey(000000d4) ret=7e9a3bbc
0009:Ret advapi32.RegCloseKey() retval=00000000 ret=7e9a3bbc
0009:Call advapi32.RegQueryValueW(80000000,0033b9a0 L"txtfile\\shell\\\\command",0033ada0,0033a52c) ret=7e9a3c04
0009:Ret advapi32.RegQueryValueW() retval=00000002 ret=7e9a3c04
0009:Call shlwapi.PathIsDirectoryW(0033e464 L"D:\\Arquivos\\Email\\attach\\carro.txt") ret=7e9a8a26
0009:Call KERNEL32.GetFileAttributesW(0033e464 L"D:\\Arquivos\\Email\\attach\\carro.txt") ret=7eb47738
0009:Ret KERNEL32.GetFileAttributesW() retval=00000020 ret=7eb47738
0009:Ret shlwapi.PathIsDirectoryW() retval=00000000 ret=7e9a8a26
0009:Call shlwapi.PathIsURLW(0033e464 L"D:\\Arquivos\\Email\\attach\\carro.txt") ret=7e9a8e68
0009:Ret shlwapi.PathIsURLW() retval=00000000 ret=7e9a8e68
0009:Call user32.LoadStringW(7e950000,000000a4,0033abb0,00000800) ret=7e9a3ac2
0009:Ret user32.LoadStringW() retval=00000041 ret=7e9a3ac2
0009:Call user32.MessageBoxW(000100c4,0033abb0 L"There is no Windows program configured to open this type of file.",00000000,00000010) ret=7e9a3a84
Können Sie mir bitte eine kostenlose, leicht herunterladbare Software vorschlagen, die das kann, und, was am wichtigsten ist, genaue Anweisungen, wie man diesen Arbeitsablauf erreicht, die vorgeschlagene Software ?
Danke!