
Um programa do tipo strace para a API 'nativa' do Windows
Veja também http://rogerorr.github.io/NtTrace/
Você precisará da versão de 64 bits e/ou 32 bits do NtTrace, dependendo da(s) sua(s) aplicação(ões) alvo
scripts\build-vs-x64.bat ou scripts\build-vs-x86.bat para compilar a versão de 64 bits ou 32 bits, respectivamente.ou
nmake /f NtTrace.makou
nmake /f NtTrace.makO NtTrace foi projetado para ser executado a partir da linha de comando.
Pode ser usado para executar um programa, com argumentos se necessário.
Por exemplo:
NtTrace -filter File cmd /c echo hello
ou para anexar a um processo existente por PID ou, usando a opção -a, por nome.
Por exemplo:
NtTrace 1234
ou
NtTrace -a notepad
Execute NtTrace -h para obter uma lista completa de opções.
Por padrão, o NtTrace tem como alvo a API nativa do Windows exposta através do NtDll.dll
Arquivos de configuração também são fornecidos para muitos dos pontos de entrada que suportam a interface gráfica do Windows:
Gdi32Trace.cfg para a Interface de Dispositivo Gráfico
User32Trace.cfg para a Interface de Usuário
Você pode selecionar um deles, em vez do NtTrace.cfg padrão, usando o argumento de linha de comando -config.
O Windows inclui DbgHelp.dll no diretório system32. No entanto, versões mais recentes desta DLL às vezes estão disponíveis pela Microsoft em seus SDKs.
A versão da DLL instalada com o sistema operacional tende a ter precedência sobre uma versão mais recente que possa ser baixada.
Se você descobrir que precisa de uma versão mais recente do que a instalada no diretório do sistema, você
pode simplesmente copiar a versão posterior de DbgHelp.dll para o mesmo diretório onde NtTrace.exe está.
(Você também precisará copiar SymSrv.dll e SrcSrv.dll)
O NtTrace funciona usando a interface de depuração do Windows para colocar pontos de interrupção no NtDll em torno das chamadas nativas do Windows para o kernel. Cada vez que um ponto de interrupção é atingido, o NtTrace lê os argumentos passados para / valores retornados pela chamada associada.
Ele funciona no nível do usuário e afeta apenas o processo específico (e seus filhos). Nenhuma tentativa é feita para entrar no kernel. Esta foi uma decisão de design deliberada, pois significa que a ferramenta pode ser usada sem exigir direitos administrativos ou permissão para instalar drivers de dispositivo. No entanto, isso também significa que a ferramenta não capturará:
O NtTrace também, por padrão, rastreia processos filhos do processo inicial iniciado; a opção -pid adicionará o ID do processo a cada linha de saída
para ajudar a identificar qual processo fez quais chamadas. A opção -only suprime o rastreamento de processos filhos.
Ele também lida com aplicações multi-thread (e a opção -tid ajudará a identificar qual thread está fazendo cada chamada). No entanto, observe que, como a interface de depuração do Windows é baseada em eventos, se múltiplas threads fizerem chamadas simultaneamente, o rastreamento será serializado.
Por padrão, as chamadas em NtDll são rastreadas; os arquivos de configuração para o Gdi32 e User32 selecionam uma DLL alvo diferente. O NtTrace atualmente não suporta o rastreamento simultâneo de diferentes tipos de chamadas de sistema.
A configuração para as chamadas nativas é mantida em NtTrace.cfg e este arquivo é analisado quando o programa é iniciado. Observe que diferentes versões do Windows suportam diferentes conjuntos de chamadas.
Algumas das funções nativas são oficialmente documentadas pela Microsoft, mas muitas são não documentadas. A lista (quase) completa foi obtida através de uma combinação de trabalho investigativo sobre as funções e de sites, como o ReactOS.
Cada função é atribuída a uma categoria, e a filtragem pode ser feita por nome de função (correspondência parcial) e categoria de função.
Por padrão, o NtTrace rastreia no retorno da chamada de sistema, mas a opção -pre pode ser usada para rastrear antes da chamada também.
Isso pode ser útil se, por exemplo, a mesma estrutura é usada para um buffer de requisição e resposta.