Systrace para Windows

87

Estou procurando um equivalente do Windows para Systrace ou pelo menos strace . Estou ciente do StraceNT , mas me perguntando se há mais alternativas por aí. Especificamente, estou procurando uma maneira específica de impor políticas de chamada do sistema de forma programática, embora isso possa ser depois do fato, em vez de interrompê-las ativamente.

Existe uma boa maneira de fazer isso atualmente?

Bryan
fonte
Também relacionado - stackoverflow.com/questions/864839/…
sashoalm

Respostas:

28

Logger.exe do WinDbg é o mais próximo de strace: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/logger-and-logviewer

EDIT: Há também wt de windbg: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/wt--trace-and-watch-data-

Bruno Martinez
fonte
4
No entanto, é mais parecido com ltrace do que strace porque captura chamadas de biblioteca em vez de syscalls.
Michael
@BrunoMartinez: você não precisa especificar um endereço de memória para usar o strace.
user2284570
41

Algumas opções:

Monitor de Processo

Além disso, consulte este artigo sobre ferramentas integradas ao Windows 7:

Ferramentas principais do sistema operacional

djhaskin987
fonte
3
Acabei de usar o ProcessMonitor para descobrir por que um processo estava travando - ele estava tentando acessar um arquivo que não pôde ser excluído ... nunca teria descoberto sem o ProcMon
Jamie Cook
2
Eu uso bastante o strace no Linux e me deparei com essa pergunta enquanto procurava uma ferramenta semelhante no Windows para solucionar o problema que eu estava tendo com o NANT. Tentei o Monitor de processo, configurei o filtro para incluir apenas Nant.exe e excluindo todo o resto, também configurei o filtro para registrar acesso apenas onde eu estava tendo problemas e descobri rapidamente o problema que eu estava tendo. Eu recomendo o Process Monitor.
hshib
@ djhaskin987: No meu caso, tenho um programa que carrega alguns arquivos; armazene-os em ʀᴀᴍ (para que não haja nenhum identificador à esquerda) e travar. Como não há alça esquerda, o monitor de processo não ajuda.
user2284570
@hshib: o problema com o monitor de processo é um processo que não precisa de um identificador para acessar um arquivo. Portanto, em um caso como o meu (tentar ver qual arquivo de configuração causa o travamento) , não adianta.
user2284570
15

A ferramenta Dr. Memory ( http://drmemory.org ) vem com uma ferramenta de rastreamento de chamada de sistema chamada drstrace que lista todas as chamadas de sistema feitas por um aplicativo de destino junto com seus argumentos: http://drmemory.org/strace_for_windows.html

Para impor políticas de chamada de sistema de forma programática, você pode usar os mesmos engines subjacentes do drstrace: a plataforma de ferramentas DynamoRIO ( http://dynamorio.org ) e a biblioteca de monitoramento de chamadas de sistema DrSyscall ( http://drmemory.org/docs/page_drsyscall. html ). Eles usam a tecnologia de tradução binária dinâmica, que incorre em alguma sobrecarga (20% -30% em estado estacionário, mas muito maior ao executar um novo código, como iniciar um grande aplicativo de desktop), que pode ou não ser adequado para seus propósitos.

Derek Bruening
fonte
11

O API Monitor parece muito útil para esse propósito.

Isaiah Norton
fonte
Este é um programa excelente, mostra parâmetros de função / valores de retorno detalhados, permite que você faça um breakpoint quando certas condições forem atendidas, muitos métodos de hooking diferentes para que possa ser usado em muitos processos que não gostam de ser inspecionados.
yuikonnu
6

Aqui está um artigo muito interessante, não sei se atinge o alvo que você está procurando, mas acho que você pode achar que está levando você na direção que deseja.

http://jbremer.org/intercepting-system-calls-on-x86_64-windows/

w33mhz
fonte
1
Obrigado, isso é muito bom. Eu acho que isso significa que ainda estamos muito longe de um bom caminho funcional no Windows ...
static_rtti
3

strace está disponível no Cygwin no pacote cygwin . Você pode baixá-lo de um espelho Cygwin , por exemplo:

http://mirrors.sonic.net/cygwin/x86_64/release/cygwin/cygwin-2.0.2-1.tar.xz
#      |                      |                              |     |
#      +-----------+----------+                              +--+--+
#                  |                                            |
#               mirror                                       version

strace é um dos poucos programas Cygwin que não depende do Cygwin DLL, então você deve ser capaz de apenas copiar strace.exepara onde quiser e usá-lo.

Steven Penny
fonte
7
É bom, mas parece funcionar apenas em outros programas cygwin. Você não pode strace notepad. Ele inicia o bloco de notas, mas não captura nenhuma chamada do sistema.
Michael Fox
3
@MichaelFox: Sim, ele apenas captura chamadas para cygwin1.dll.
user2284570
2

Existem várias ferramentas criadas em torno do Xperf. É bastante complexo, mas muito poderoso - consulte o guia de início rápido . Existem outros recursos úteis na página Análise de Desempenho do Windows

the_mandrill
fonte
4
strace não está relacionado ao desempenho. Ele simplesmente imprime quais chamadas de sistema um processo faz. As ferramentas de desempenho parecem não fazer isso.
Jan Hudec
1

strace suportado por Git , como Michael Fox Mention Talvez não seja útil para software complexo / windows.

Zaman
fonte
1
Esse é o programa Linux. Ele só funciona com software / syscalls Linus.
Henk Poley
0

Você pode usar o monitor de processo escrito por Mark Russinovich. Este é um pequeno aplicativo fantástico que permitirá que você se conecte a qualquer processo em execução no sistema e veja todas as chamadas de sistema que o processo está fazendo atualmente.

https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx

Mike
fonte
3
djhaskin987 já mencionou o Process Monitor em sua resposta anterior. Você deve editar sua resposta e editar sua descrição nela.
inesquecívelidSupportsMonica