DTrace-programozás

A DTrace támogatja a D programnyelvet. Ez a témakör a DTrace-szkriptek írásának és használatának első lépéseit ismerteti.

A DTrace-ről Windowson szóló általános információkat a DTrace oldalon talál.

A DTrace-ről a Cambridge-i Egyetem OpenDTrace Specification 1.0-s verziójában talál részletes információt.

Megjegyzés:

A DTrace az 18980-es és a Windows Server 18975-ös build után támogatott a Windows Insider-buildjeiben.

További példaszkriptek

A Windows-forgatókönyvekre vonatkozó további D-szkriptek a DTrace-forráskód mintakönyvtárában érhetők el.

https://github.com/microsoft/DTrace-on-Windows/tree/windows/samples/windows

Az opentrace-eszközkészlet-szkriptek készlete a következő címen https://github.com/opendtrace/toolkitérhető el: .

„Helló világ!” alkalmazás

A DTrace-szkriptek egyszerű szövegfájlok, amelyek parancsokat és D programozási szkriptelemeket tartalmaznak.

dtrace:::BEGIN
{
  trace("Hello World from DTrace!");
  exit(0);
}

Mentse a fájlt helloworld.d néven.

Nyisson meg egy parancssori ablakot rendszergazdaként, és futtassa a szkriptet a -s beállítással.

dtrace -s helloworld.d
dtrace: script '.\helloworld.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  0      1                           :BEGIN   Hello World from DTrace!

NtCreateUserProcess visszatérési ideje

DTrace-szkripteket is létrehozhat több függvény/esemény időtartamának nyomon követéséhez. Az alábbiakban egy egyszerű példa látható, amely nyomon követi az NtCreateUserProcess függvényt a létrehozási folyamat bejegyzése/visszatérése között.


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);
}

Mentse a fájlt ntcreatetime.d fájlként, és használja a -s lehetőséget a tesztszkript futtatásához.

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

Fájltörlés nyomon követője

Ez a példaszkript a syscall-szolgáltatót használja az NtOpenFile belépésének instrumentálására, és ellenőrzi az átadott jelzőt (5. argumentum), hogy nyomon kövesse a törléseket a rendszerben.

Másolja az alábbi szkriptet a filedeletetracker.d fájlba.

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);
        }
    }
}

A tesztszkript futtatásához használja a -s lehetőséget.

Hozzon létre vagy keresse meg a törölni kívánt fájlt. Helyezze át a fájlt a Lomtárba, majd ürítse ki a Lomtárat. A fájl törlésekor az esemény aktiválódik, és a fájltörlés adatai megjelennek.

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

Ez a program úgy van kialakítva, hogy továbbra is figyelje a fájltörléseket. Kilépéshez nyomja le a CTRL+C billentyűkombinációt.

További nagyobb kódmintákért lásd a következő témakört, a DTrace Windows-kódmintákat.

Lásd még:

DTrace Windows rendszeren

DTrace ETW

DTrace Windows-kódminták

DTrace Élő memóriakép