A depuração de identificadores de arquivo com falha no aplicativo de console do Windows

0

Eu tenho um aplicativo de console que usa o puTTY como uma DLL e preciso depurar a biblioteca puTTY em questão.

No UNIX, eu faria strace <command> .

strace ls ggg

imprimiria algo como:

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

porque não tenho nenhum arquivo ou diretório chamado ggg em meu diretório atual. Eu preciso disso para um aplicativo de console do Windows.

Eu pesquisei on-line, baixei o SDK do Windows com ferramentas de depuração. Eu tentei vários programas, cdb parece ser o que eu preciso.

fazer cdb -o "!htrace -enable" <command> parece ser o que eu preciso, mas acho que estou perdendo alguma coisa, porque não fornece nenhuma sugestão de por que o comando está falhando ou falhando em tentativas de abrir arquivos. (se <command> carregar um arquivo que "deveria" ter sucesso, no entanto, <command> quer um nome "sessões", não um caminho de arquivo, ele procura um arquivo ou uma chave reg com esse nome de sessão):

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>
Basicamente, eu estou tentando descobrir onde o pscp.exe (puTTY scp) carrega a sessão do Windows, neste caso - responder a essa pergunta não vai ajudar, eu quero saber como eu posso controlar alças, do meu entendimento , cdb habilita htrace depois que o programa foi concluído ou eu preciso digitar algo para o comando iniciar (inseguro), eu até tentei criar um novo processo com as opções de ingerir o depurador, ainda obter apenas o carregamento da DLL, nada mais.

Eu tentei logger.exe <command> e logger.exe -o <command> como stackoverflow diz que está mais próximo de strace , lista as DLLs, assim como cdb , nada mais. Em windbg , consigo ver 8 identificadores de arquivos, no entanto, nenhuma informação sobre caminhos de arquivos ...

Desculpe, sou um cara do Linux, então mimado, strace faz o truque sem opções.

Eu li:

link link link link (para tentar iniciar o <command> uma vez que o depurador foi carregado) ... e mais alguns ...

    
por user2531336 06.02.2018 / 23:05

1 resposta

1

Atualmente, você está usando ferramentas de depuração reais que podem ser muito difíceis de entender, mas que, em última análise, fornecem muitos detalhes. Com o objetivo de fazer isso, pode ser uma opção usar uma ferramenta mais simples para obter as informações necessárias.

No Windows, existem algumas ferramentas disponíveis, conhecidas como " suíte sysinternals " poderia ajudá-lo sem precisar entender toda a saída de depuração que você obtém com as ferramentas de depuração reais.

Em particular, o identificador de ferramentas deve ajudá-lo a descobrir o que está usando um arquivo aberto no momento. Enquanto o monitor de processo lhe mostraria um feed ao vivo de muitas ações que os programas atualmente em execução executam. Principalmente focado em operações de registro e arquivo.

Para descobrir onde um programa está obtendo informações de você, tente usar o monitor de processo e configurá-lo para mostrar apenas as ações de um determinado programa. A ferramenta em si tem opções de filtragem para vários tipos de ações, bem como para propriedades dessas ações.

    
por 07.02.2018 / 11:36