Systrace для Windows

85

Я ищу Windows-эквивалент Systrace или хотя бы strace . Я знаю о StraceNT , но мне интересно, есть ли еще альтернативы. В частности, я ищу конкретный способ программного обеспечения выполнения политик системных вызовов, хотя это может быть сделано постфактум, а не их активное прекращение.

Есть ли сейчас хороший способ сделать это?

Брайан
источник
Также по теме - stackoverflow.com/questions/864839/…
sashoalm

Ответы:

26

WinDbg Logger.exe ближе всего к strace: http://msdn.microsoft.com/en-us/library/windows/hardware/ff552060(v=vs.85).aspx

РЕДАКТИРОВАТЬ: есть также wt windbg: http://blogs.msdn.com/b/debuggingtoolbox/archive/2009/10/12/special-command-tracing-applications-using-wt.aspx

Бруно Мартинес
источник
3
Однако это больше похоже на ltrace, чем на strace, потому что он захватывает вызовы библиотеки, а не системные вызовы.
Майкл
@BrunoMartinez: вам не нужно указывать адрес памяти для использования strace.
user2284570
39

Несколько вариантов:

Монитор процесса

Также см. Эту статью об инструментах, встроенных в Windows 7:

Основные инструменты ОС

djhaskin987
источник
3
Я просто использовал ProcessMonitor, чтобы выяснить, почему процесс зависает - оказывается, он пытался получить доступ к файлу, который он не может удалить ... никогда бы не понял этого без ProcMon
Джейми Кук
2
Я довольно часто использую strace в Linux и столкнулся с этим вопросом, ища аналогичный инструмент в Windows для устранения проблемы, с которой я столкнулся с NANT. Я попробовал Process Monitor, установил фильтр, чтобы включить только Nant.exe и исключить все остальное, также установил фильтр для доступа к регистру только там, где у меня возникла проблема, и быстро выяснил проблему, с которой я столкнулся. Я очень рекомендую Process Monitor.
hshib
@ djhaskin987: В моем случае у меня есть программа, которая загружает файлы; буфер их до ʀᴀᴍ (чтобы не осталось дескриптора) и сбой. Поскольку нет ручки слева, монитор процесса не поможет.
user2284570
@hshib: проблема с монитором процессов в том, что процессу не нужен дескриптор для доступа к файлу. Так что в случае, подобном моему (пытаясь увидеть, какой файл конфигурации вызывает сбой) , это не поможет.
user2284570
15

Инструмент Dr. Memory ( http://drmemory.org ) поставляется с инструментом отслеживания системных вызовов под названием drstrace, который перечисляет все системные вызовы, сделанные целевым приложением, вместе с их аргументами: http://drmemory.org/strace_for_windows.html

Для программного обеспечения выполнения политик системных вызовов вы можете использовать те же базовые механизмы, что и drstrace: платформу инструментов DynamoRIO ( http://dynamorio.org ) и библиотеку мониторинга системных вызовов DrSyscall ( http://drmemory.org/docs/page_drsyscall. html ). Они используют технологию динамической двоичной трансляции, которая влечет за собой некоторые накладные расходы (20% -30% в устойчивом состоянии, но намного выше при запуске нового кода, например, при запуске большого настольного приложения), что может или не может подходить для ваших целей.

Дерек Брюнинг
источник
11

API Monitor выглядит очень полезным для этой цели.

Исайя Нортон
источник
Это отличная программа, показывающая подробные параметры / возвращаемые значения функций, позволяющая устанавливать точку останова при выполнении определенных условий, множество различных методов подключения, поэтому ее можно использовать во многих процессах, которые не любят проверять.
yuikonnu
6

Вот довольно интересная статья, я не знаю, попадает ли она в ту цель, которую вы ищете, но я думаю, что вы можете найти ее, ведущую в нужном вам направлении.

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

w33mhz
источник
1
Спасибо, неплохо. Думаю, это означает, что мы все еще очень далеки от красивой и функциональной версии Windows ...
static_rtti
3

strace доступен от Cygwin в пакете cygwin . Вы можете скачать его с зеркала Cygwin , например:

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

strace - одна из немногих программ Cygwin, которая не полагается на Cygwin DLL, поэтому вы можете просто скопировать strace.exeтуда, где хотите, и использовать ее.

Стивен Пенни
источник
6
Это хорошо, но, похоже, работает только с другими программами cygwin. Вы не можете strace notepad. Он запускает блокнот, но не фиксирует системные вызовы.
Майкл Фокс
2
@MichaelFox: Да, он перехватывает только вызовы cygwin1.dll.
user2284570
2

На базе Xperf построено несколько инструментов. Это довольно сложно, но очень мощно - см. Краткое руководство . На странице анализа производительности Windows есть и другие полезные ресурсы.

the_mandrill
источник
4
strace не имеет отношения к производительности. Он просто печатает, какие системные вызовы выполняет процесс. Инструменты производительности, похоже, этого не делают.
Ян Худек
1

strace поддерживается Git , о чем упоминает Майкл Фокс. Может быть, бесполезен для сложного программного обеспечения / программного обеспечения Windows.

Заман
источник
0

Вы можете использовать монитор процессов, написанный Марком Руссиновичем. Это фантастическое маленькое приложение, которое позволит вам подключиться к любому запущенному процессу в системе и увидеть все системные вызовы, которые этот процесс в настоящее время выполняет.

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

Майк
источник
2
djhaskin987 уже упоминал Process Monitor в своем более раннем ответе. Вы должны отредактировать его ответ и отредактировать в нем свое описание.
unforgettableidSupportsMonica