Debuggen fehlgeschlagener Dateihandles in der Windows-Konsolenanwendung

Debuggen fehlgeschlagener Dateihandles in der Windows-Konsolenanwendung

Ich habe eine Konsolenanwendung, die puTTY als DLL verwendet, und ich muss die betreffende puTTY-Bibliothek debuggen.

Unter UNIX würde ich Folgendes tun strace <command>.

strace ls ggg

Würde ungefähr Folgendes drucken:

stat("ggg", 0x166b0d0)                  = -1 ENOENT (No such file or directory)

weil ich gggin meinem aktuellen Verzeichnis keine Datei oder kein Verzeichnis mit diesem Namen habe. Ich brauche dies für eine Windows-Konsolenanwendung.

Ich habe online gesucht und das Windows SDK mit Debugging-Tools heruntergeladen. Ich habe mehrere Programme ausprobiert, cdbdas scheint das zu sein, was ich brauche.

Das cdb -o "!htrace -enable" <command>scheint das zu sein, was ich brauche, aber ich glaube, ich übersehe etwas, weil es keinen Hinweis darauf liefert, warum der Befehl fehlschlägt oder warum Versuche, Dateien zu öffnen, fehlgeschlagen sind. (Beim <command>Laden einer Datei „sollte“ es erfolgreich sein, benötigt jedoch <command>einen „Sitzungsnamen“, keinen Dateipfad und sucht dann nach einer Datei oder einem Registrierungsschlüssel mit diesem Sitzungsnamen):

CommandLine: <command>
Symbol search path is: srv*
Executable search path is:
ModLoad: 00400000 004a7000   image00400000
ModLoad: 77d00000 77e8d000   ntdll.dll
ModLoad: 77aa0000 77b70000   C:\WINDOWS\SysWOW64\KERNEL32.DLL
ModLoad: 748e0000 74ab7000   C:\WINDOWS\SysWOW64\KERNELBASE.dll
ModLoad: 779d0000 77a36000   C:\WINDOWS\SysWOW64\WS2_32.dll
ModLoad: 77b70000 77c2e000   C:\WINDOWS\SysWOW64\RPCRT4.dll
ModLoad: 74720000 74740000   C:\WINDOWS\SysWOW64\SspiCli.dll
ModLoad: 74710000 7471a000   C:\WINDOWS\SysWOW64\CRYPTBASE.dll
ModLoad: 74f00000 74f57000   C:\WINDOWS\SysWOW64\bcryptPrimitives.dll
ModLoad: 75d10000 75d53000   C:\WINDOWS\SysWOW64\sechost.dll
ModLoad: 757c0000 75838000   C:\WINDOWS\SysWOW64\ADVAPI32.dll
ModLoad: 776b0000 7776d000   C:\WINDOWS\SysWOW64\msvcrt.dll
(2f550.32120): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll -
eax=00000000 ebx=00000010 ecx=44ce0000 edx=00000000 esi=00249000 edi=77d06964
eip=77dadbcf esp=00cafa0c ebp=00cafa38 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!LdrInitShimEngineDynamic+0x6af:
77dadbcf cc              int     3
0:000> cdb: Reading initial command '!htrace -enable'
Handle tracing enabled.
Handle tracing information snapshot successfully taken.
0:000>

Im Grunde versuche ich herauszufinden, wo pscp.exe (puTTY scp) die Sitzung unter Windows lädt. In diesem Fall hilft mir die Beantwortung dieser Frage nicht weiter. Ich möchte wissen, wie ich Handles verfolgen kann. Soweit ich weiß, werden sie cdbaktiviert htrace, nachdem das Programm abgeschlossen ist, oder ich muss etwas eingeben, damit der Befehl gestartet wird (nicht sicher). Ich habe sogar versucht, mit den Optionen innerhalb des Debuggers einen neuen Prozess zu erstellen, es werden trotzdem nur DLLs geladen, sonst nichts.

Ich habe es versucht logger.exe <command>und logger.exe -o <command>alsPaketüberflusssagt, es ist am nächsten zu strace, es listet die DLLs auf, genau wie cdb, mehr nicht. In windbgsehe ich 8 Dateihandles, jedoch keine Informationen zu Dateipfaden ...

Tut mir leid, ich bin ein Linux-Typ und total verwöhnt, aber stracees funktioniert auch ohne Optionen.

Ich habe gelesen:

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-handle https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/cdb-command-line-options https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-a-user-mode-process-using-cdb https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-create--create-process-(um zu versuchen, ihn zu starten, <command>nachdem der Debugger geladen wurde) ... und noch ein paar mehr ...

Antwort1

Sie verwenden derzeit echte Debug-Tools, die zwar schwer zu verstehen sind, aber letztendlich viele Details liefern. Für Ihren Zweck wäre es möglicherweise eine Option, ein einfacheres Tool zu verwenden, um die benötigten Informationen zu erhalten.

Für Windows gibt es eine ganze Reihe von Tools, die als "Sysinternals-Suite", das Ihnen weiterhelfen könnte, ohne dass Sie die gesamte Debug-Ausgabe verstehen müssen, die Sie mit den eigentlichen Debug-Tools erhalten.

Insbesondere der Tool-Handle sollte Ihnen dabei helfen, herauszufinden, was eine aktuell geöffnete Datei verwendet. Der Prozessmonitor zeigt Ihnen einen Live-Feed vieler Aktionen, die aktuell ausgeführte Programme ausführen. Der Schwerpunkt liegt dabei auf Registrierungs- und Dateivorgängen.

Um herauszufinden, woher ein Programm seine Informationen bezieht, können Sie versuchen, den Prozessmonitor zu verwenden und ihn so einzurichten, dass er Ihnen nur die Aktionen eines bestimmten Programms anzeigt. Das Tool selbst verfügt über Filteroptionen für verschiedene Aktionstypen sowie für die Eigenschaften dieser Aktionen.

verwandte Informationen