Systrace dla Windows

85

Szukam odpowiednika Systrace w systemie Windows lub przynajmniej strace . Jestem świadomy istnienia StraceNT , ale zastanawiam się, czy istnieje więcej alternatyw. W szczególności szukam konkretnego sposobu programowego wymuszania zasad wywołań systemowych, chociaż może to nastąpić po fakcie, a nie aktywnie je zatrzymać.

Czy obecnie jest na to dobry sposób?

Bryan
źródło
Również powiązane - stackoverflow.com/questions/864839/ ...
sashoalm

Odpowiedzi:

26

Najbliższy strace jest Logger.exe WinDbg: http://msdn.microsoft.com/en-us/library/windows/hardware/ff552060(v=vs.85).aspx

EDYCJA: Jest też wtyczka windbg: http://blogs.msdn.com/b/debuggingtoolbox/archive/2009/10/12/special-command-tracing-applications-using-wt.aspx

Bruno Martinez
źródło
3
Jednak bardziej przypomina ltrace niż strace, ponieważ przechwytuje wywołania bibliotek, a nie wywołania systemowe.
Michael,
@BrunoMartinez: nie musisz określać adresu pamięci, aby używać strace.
user2284570
39

Kilka opcji:

Monitor procesu

Zobacz również ten artykuł o narzędziach wbudowanych w Windows 7:

Podstawowe narzędzia systemu operacyjnego

djhaskin987
źródło
3
Właśnie użyłem ProcessMonitor, aby dowiedzieć się, dlaczego proces się zawiesił - okazuje się, że próbował uzyskać dostęp do pliku, którego nie mógł usunąć ... nigdy nie rozwiązałbym tego bez ProcMon
Jamie Cook
2
Używam strace dość często w systemie Linux i natknąłem się na to pytanie, szukając podobnego narzędzia w systemie Windows do rozwiązania problemu, który miałem z NANT. Wypróbowałem Process Monitor, ustawiłem filtr tak, aby obejmował tylko Nant.exe i wykluczając wszystko inne, ustawiłem również filtr dostępu do rejestru tylko w przypadku, gdy miałem problem, i szybko zorientowałem się, jaki mam problem. Bardzo polecam Process Monitor.
hshib
@ djhaskin987: W moim przypadku mam program, który ładuje niektóre pliki; buforuj je do ʀᴀᴍ (aby nie było żadnego uchwytu) i zawieszaj się. Ponieważ nie ma uchwytu, monitor procesu nie jest pomocny.
user2284570
@hshib: problem z monitorem procesów polega na tym, że proces nie potrzebuje uchwytu, aby uzyskać dostęp do pliku. Więc w przypadku takim jak mój (próba sprawdzenia, który plik konfiguracyjny powoduje awarię) , to nie pomaga.
user2284570
15

Narzędzie Dr. Memory ( http://drmemory.org ) jest dostarczane z narzędziem do śledzenia wywołań systemowych o nazwie drstrace, które zawiera listę wszystkich wywołań systemowych wykonywanych przez aplikację docelową wraz z ich argumentami: http://drmemory.org/strace_for_windows.html

Aby programowo wymuszać zasady wywołań systemowych, można użyć tych samych mechanizmów bazowych, co drstrace: platformy narzędziowej DynamoRIO ( http://dynamorio.org ) i biblioteki monitorowania wywołań systemowych DrSyscall ( http://drmemory.org/docs/page_drsyscall. html ). Korzystają one z technologii dynamicznego tłumaczenia binarnego, co wiąże się z pewnym narzutem (20% -30% w stanie ustalonym, ale znacznie wyższym podczas uruchamiania nowego kodu, takiego jak uruchamianie dużej aplikacji komputerowej), co może, ale nie musi, być odpowiednie do Twoich celów.

Derek Bruening
źródło
11

W tym celu bardzo przydatne jest API Monitor .

Isaiah Norton
źródło
Jest to doskonały program, pokazuje szczegółowe parametry funkcji / zwracane wartości, pozwala określić punkt przerwania, gdy spełnione są określone warunki, wiele różnych metod podpinania, dzięki czemu można go używać w wielu procesach, które nie lubią być kontrolowane.
yuikonnu
6

Tutaj jest dość ciekawy artykuł, nie wiem, czy trafi w cel, którego szukasz, ale myślę, że może się okazać, że poprowadzi Cię w wybranym kierunku.

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

w33mhz
źródło
1
Dzięki, to całkiem nieźle. Myślę, że oznacza to, że wciąż daleko nam do ładnego i funkcjonalnego strace w systemie Windows ...
static_rtti
3

strace jest dostępny w Cygwin w pakiecie cygwin . Możesz go pobrać z lustra Cygwin , na przykład:

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

strace jest jednym z niewielu programów Cygwin, który nie opiera się na bibliotece DLL Cygwin, więc powinieneś być w stanie po prostu skopiować strace.exetam, gdzie chcesz i używać go.

Steven Penny
źródło
6
To dobrze, ale wydaje się, że działa tylko na innych programach Cygwin. Nie możesz strace notepad. Uruchamia notatnik, ale nie przechwytuje żadnych wywołań systemowych.
Michael Fox
2
@MichaelFox: Tak, przechwytuje tylko wywołania do cygwin1.dll.
user2284570
2

Istnieje kilka narzędzi zbudowanych wokół Xperf. Jest dość złożony, ale bardzo potężny - zobacz skróconą instrukcję obsługi . Na stronie Analiza wydajności systemu Windows znajdują się inne przydatne zasoby

the_mandrill
źródło
4
strace nie ma związku z wydajnością. Po prostu wypisuje wywołania systemowe wywoływane przez proces. Wydaje się, że narzędzia wydajności tego nie robią.
Jan Hudec
1

strace obsługiwane przez Git , jak wspomniał Michael Fox. Może nie jest to przydatne w przypadku oprogramowania złożonego / Windows.

Zaman
źródło
0

Możesz użyć monitora procesu napisanego przez Marka Russinovicha. Jest to fantastyczna mała aplikacja, która pozwoli ci podłączyć się do dowolnego uruchomionego procesu w systemie i zobaczyć wszystkie wywołania systemowe, które obecnie wykonuje.

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

Mikrofon
źródło
2
djhaskin987 wspomniał już o Process Monitor w swojej wcześniejszej odpowiedzi. Powinieneś edytować jego odpowiedź i edytować w niej swój opis.
unforgettableidSupportsMonica