Depuración de identificadores de archivos fallidos en la aplicación de consola de Windows

Depuración de identificadores de archivos fallidos en la aplicación de consola de Windows

Tengo una aplicación de consola que usa puTTY como DLL y necesito depurar la biblioteca puTTY en cuestión.

En UNIX, lo haría strace <command>.

strace ls ggg

Imprimiría algo como:

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

porque no tengo ningún archivo o directorio nombrado gggen mi directorio actual. Necesito esto para una aplicación de consola de Windows.

Busqué en línea y descargué el SDK de Windows con herramientas de depuración. Probé varios programas, cdbparece ser el que necesito.

hacer cdb -o "!htrace -enable" <command>parece ser lo que necesito, pero creo que me falta algo, porque no proporciona ninguna pista de por qué el comando falla o los intentos fallidos de apertura del archivo. (si <command>carga un archivo, "debería" tener éxito, sin embargo, <command>quiere un nombre de "sesión", no una ruta de archivo, luego busca un archivo o clave de registro con ese nombre de sesión):

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>

Básicamente, estoy tratando de averiguar desde dónde carga pscp.exe (puTTY scp) la sesión en Windows; en este caso, responder esa pregunta no ayudará, quiero saber cómo puedo rastrear los identificadores, según tengo entendido, cdbse habilita htracedespués el programa se ha completado o necesito escribir algo para que se inicie el comando (no estoy seguro), incluso intenté crear un nuevo proceso con las opciones del depurador, pero todavía solo se cargan las DLL, nada más.

Lo intenté logger.exe <command>y logger.exe -o <command>comodesbordamiento de piladice que es el más cercano a strace, enumera las DLL, al igual que cdb, nada más. En windbg, puedo ver 8 identificadores de archivos, sin embargo, no hay información sobre las rutas de los archivos...

Lo siento, soy un chico de Linux, muy mimado, stracefunciona sin opciones.

He leído:

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-(para intentar ejecutarlo <command>una vez cargado el depurador)... y algunos más...

Respuesta1

Actualmente estás utilizando herramientas de depuración reales que pueden ser bastante difíciles de entender pero que, en última instancia, proporcionan muchos detalles. Con el propósito de hacer esto, podría ser una opción utilizar una herramienta más simple para obtener la información que necesita.

Para Windows hay bastantes herramientas disponibles conocidas como "suite de sistemas internos" que podría ayudarle sin necesidad de comprender todos los resultados de depuración que obtiene con las herramientas de depuración reales.

En particular, el identificador de la herramienta debería poder ayudarle a descubrir qué está utilizando un archivo actualmente abierto. Mientras que el monitor de procesos le mostrará una transmisión en vivo de muchas acciones que realizan los programas que se ejecutan actualmente. Centrado principalmente en operaciones de registro y archivos.

Para averiguar de dónde obtiene información un programa, puede intentar utilizar el monitor de procesos y configurarlo para que solo le muestre las acciones de un programa en particular. La herramienta en sí tiene opciones de filtrado para varios tipos de acciones, así como para las propiedades de esas acciones.

información relacionada