
Аналог strace для Windows 'native' API
См. также http://rogerorr.github.io/NtTrace/
Вам потребуется 64-битная или 32-битная версия NtTrace, в зависимости от целевого приложения.
scripts\build-vs-x64.bat или scripts\build-vs-x86.bat для сборки 64-битной или 32-битной версии соответственно.или
nmake /f NtTrace.makили
$Id: Readme.md 2542 2025-01-21 23:15:34Z roger $nmake /f NtTrace.makNtTrace предназначен для запуска из командной строки.
Он может использоваться для запуска программы с аргументами (если необходимо).
Например:
NtTrace -filter File cmd /c echo hello
или для присоединения к существующему процессу по PID или, с опцией -a, по имени.
Например:
NtTrace 1234
или
NtTrace -a notepad
Запустите NtTrace -h для получения полного списка опций.
По умолчанию NtTrace работает с Windows Native API, предоставляемым через NtDll.dll
Также предоставляются файлы конфигурации для многих точек входа, поддерживающих графический интерфейс Windows:
Gdi32Trace.cfg для Graphics Device Interface (интерфейс графических устройств)
User32Trace.cfg для User Interface (интерфейс пользователя)
Вы можете выбрать один из них вместо стандартного NtTrace.cfg, используя аргумент командной строки -config.
В Windows в каталоге system32 поставляется DbgHelp.dll. Однако более новые версии этой DLL иногда доступны от Microsoft в их SDK.
Версия DLL, установленная с ОС, как правило, имеет приоритет над более новой загруженной версией.
Если вам потребуется более новая версия, чем установленная в системном каталоге,
вы можете просто скопировать более новую DbgHelp.dll в тот же каталог, где находится NtTrace.exe.
(Также потребуется скопировать SymSrv.dll и SrcSrv.dll)
NtTrace использует отладочный интерфейс Windows для установки точек останова в NtDll вокруг нативных вызовов Windows в ядро. Каждый раз, когда срабатывает точка останова, NtTrace считывает аргументы, переданные вызываемой функции, и возвращаемые значения.
Он работает на пользовательском уровне и затрагивает только конкретный процесс (и его дочерние процессы). Не предпринимается попыток проникнуть в ядро. Это было осознанным решением, так как инструмент можно использовать без прав администратора или разрешения на установку драйверов устройств. Однако это также означает, что инструмент не перехватит:
По умолчанию NtTrace также трассирует дочерние процессы начального процесса. Опция -pid добавляет идентификатор процесса в каждую строку вывода,
чтобы определить, какой процесс выполнил вызов. Опция -only подавляет трассировку дочерних процессов.
Инструмент также работает с многопоточными приложениями (опция -tid поможет определить, какой поток выполняет вызов).
Однако учтите, что, поскольку отладочный интерфейс Windows основан на событиях, при одновременных вызовах из нескольких потоков
трассировка будет сериализована.
По умолчанию трассируются вызовы в NtDll; файлы конфигурации для Gdi32 и User32 выбирают другую целевую DLL. NtTrace в настоящее время не поддерживает одновременную трассировку разных типов системных вызовов.
Конфигурация нативных вызовов хранится в NtTrace.cfg, и этот файл анализируется при запуске программы. Учтите, что разные версии Windows поддерживают разные наборы вызовов.
Некоторые из нативных функций официально документированы Microsoft, но многие не документированы. (Почти) полный список был получен путём детективной работы над функциями и из веб-сайтов, таких как ReactOS.
Каждая функция отнесена к категории; фильтрация может выполняться по имени функции (частичное совпадение) и по категории функции.
По умолчанию NtTrace трассирует при возврате из системного вызова, но опция -pre позволяет трассировать и до вызова.
Это может быть полезно, например, если одна и та же структура используется для буфера запроса и ответа.