Systrace для Windows


85

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

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


Также по теме - stackoverflow.com/questions/864839/…
sashoalm

Ответы:


26

3
Однако это больше похоже на ltrace, чем на strace, потому что он захватывает вызовы библиотеки, а не системные вызовы.
Майкл

@BrunoMartinez: вам не нужно указывать адрес памяти для использования strace.
user2284570

39

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

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

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

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


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/


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 есть и другие полезные ресурсы.


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

1

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


0

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

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


2
djhaskin987 уже упоминал Process Monitor в своем более раннем ответе. Вы должны отредактировать его ответ и отредактировать в нем свое описание.
unforgettableidSupportsMonica
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.