Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
DTrace поддерживает язык программирования D. В этом разделе описывается, как приступить к написанию и использованию скриптов DTrace.
Общие сведения о DTrace в Windows см. в разделе DTrace.
Подробные сведения о DTrace см. в спецификации OpenDTrace версии 1.0 в Университете Кембриджа.
Замечание
DTrace поддерживается в инсайдерских сборках Windows начиная с версии 18980 и в сборках Windows Server начиная с версии 18975.
Дополнительные примеры скриптов
Дополнительные сценарии D, применимые к сценариям Windows, доступны в каталоге примеров исходного кода DTrace.
https://github.com/microsoft/DTrace-on-Windows/tree/windows/samples/windows
Набор скриптов набора средств opentrace доступен по адресу https://github.com/opendtrace/toolkit.
Всем привет
Скрипты DTrace — это простые текстовые файлы, содержащие команды и элементы скрипта D.
dtrace:::BEGIN
{
trace("Hello World from DTrace!");
exit(0);
}
Сохраните файл как helloworld.d.
Откройте окно командной строки от имени администратора и запустите скрипт с помощью параметра -s.
dtrace -s helloworld.d
dtrace: script '.\helloworld.d' matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN Hello World from DTrace!
Время возврата NtCreateUserProcess
Вы можете создавать скрипты DTrace для отслеживания времени, затраченного на несколько функций или событий. Ниже приведен простой пример, который отслеживает функцию NtCreateUserProcess между записью и возвратом для процесса создания.
syscall::NtCreateUserProcess:entry
{
self->ts = timestamp;
}
syscall::NtCreateUserProcess:return
{
printf(" [Caller %s]: Time taken to return from create process is %d MicroSecond \n", execname, (timestamp - self->ts)/ 1000);
}
Сохраните файл как ntcreatetime.d и используйте параметр -s для запуска тестового скрипта.
C:\Windows\system32>dtrace -s ntcreatetime.d
dtrace: script 'ntcreatetime.d' matched 2 probes
CPU ID FUNCTION:NAME
0 183 NtCreateUserProcess:return [Caller svchost.exe]: Time taken to return from create process is 51191 MicroSecond
0 183 NtCreateUserProcess:return [Caller SearchIndexer.]: Time taken to return from create process is 84418 MicroSecond
0 183 NtCreateUserProcess:return [Caller SearchIndexer.]: Time taken to return from create process is 137961 MicroSecond
Средство отслеживания удаления файлов
Этот пример скрипта использует поставщик syscall для инструментирования NtOpenFile на входе и проверки переданного флага (аргумент #5) для отслеживания удаления в системе.
Скопируйте приведенный ниже сценарий в файл filedeletetracker.d.
ERROR{exit(0);}
struct ustr{uint16_t buffer[256];};
syscall::NtOpenFile:entry
{
this->deleted = arg5 & 0x00001000; /* & with FILE_DELETE_ON_CLOSE */
if (this->deleted) {
this->attr = (nt`_OBJECT_ATTRIBUTES*)
copyin(arg2, sizeof(nt`_OBJECT_ATTRIBUTES));
if (this->attr->ObjectName) {
this->objectName = (nt`_UNICODE_STRING*)
copyin((uintptr_t)this->attr->ObjectName,
sizeof(nt`_UNICODE_STRING));
this->fname = (uint16_t*)
copyin((uintptr_t)this->objectName->Buffer,
this->objectName->Length);
printf("Process %s PID %d deleted file %*ws \n", execname,pid,
this->objectName->Length / 2,
((struct ustr*)this->fname)->buffer);
}
}
}
Используйте параметр -s для запуска тестового скрипта.
Создайте или найдите файл, который вы хотите удалить. Переместите файл в Корзину и затем опустошите Корзину. Когда файл удаляется, срабатывает событие, и отображаются сведения об его удалении.
C:\Windows\system32>dtrace -s filedeletetracker.d
dtrace: script 'filedeletetracker.d' matched 8 probes
CPU ID FUNCTION:NAME
0 512 NtOpenFile:entry Process explorer.exe PID 4684 deleted file \??\C:\$Recycle.Bin\S-1-12-1-3310478672-1302480547-4207937687-2985363607\$ROSR3FA.txt
Эта программа предназначена для продолжения мониторинга удаления файлов. Нажмите клавиши CTRL+C, чтобы выйти.
Дополнительные более крупные примеры кода см. в следующем разделе: примеры кода DTrace Для Windows.