Поделиться через


Программирование DTrace

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.

См. также

DTrace в Windows

DTrace ETW

Примеры кода DTrace Для Windows

Дамп DTrace Live