
برنامج يشبه strace لواجهة برمجة التطبيقات 'الأصلية' لويندوز
انظر أيضًا http://rogerorr.github.io/NtTrace/
ستحتاج إلى إصدار 64 بت و/أو 32 بت من NtTrace، أيهما يناسب تطبيق (تطبيقاتك) الهدف.
scripts\build-vs-x64.bat أو scripts\build-vs-x86.bat لبناء إصدار 64 بت أو 32 بت، على التوالي.أو
nmake /f NtTrace.makأو
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 مع DbgHelp.dll في دليل system32. ومع ذلك، تتوفر أحيانًا إصدارات أحدث من هذه DLL من Microsoft في مجموعات SDK الخاصة بها.
إصدار DLL المثبت مع نظام التشغيل يميل إلى أن يكون له الأسبقية على الإصدار الأحدث الذي قد يتم تنزيله.
إذا وجدت أنك تحتاج إلى إصدار أحدث من المثبت في دليل النظام، يمكنك ببساطة نسخ DbgHelp.dll الأحدث إلى نفس الدليل الذي يوجد به NtTrace.exe.
(ستحتاج أيضًا إلى نسخ SymSrv.dll و SrcSrv.dll)
يعمل NtTrace باستخدام واجهة تصحيح أخطاء Windows لوضع نقاط توقف في NtDll حول استدعاءات Windows الأصلية إلى kernel. في كل مرة يتم فيها الوصول إلى نقطة توقف، يقرأ NtTrace الوسائط التي تم تمريرها إلى / القيم التي تم إرجاعها بواسطة الاستدعاء المرتبط.
يعمل على مستوى المستخدم ويؤثر فقط على العملية المحددة (وعملياتها الفرعية). لا يتم محاولة الدخول إلى kernel. كان هذا قرار تصميم متعمدًا لأنه يعني أنه يمكن استخدام الأداة دون الحاجة إلى صلاحيات إدارية أو إذن لتثبيت برامج تشغيل الأجهزة. ومع ذلك، هذا يعني أيضًا أن الأداة لن تلتقط:
يقوم NtTrace أيضًا، افتراضيًا، بتتبع العمليات الفرعية للعملية الأولية التي تم بدؤها، سيضيف الخيار -pid معرف العملية إلى كل سطر إخراج للمساعدة في تحديد العملية التي قامت بأي استدعاء. الخيار -only يثبط تتبع العمليات الفرعية.
كما يتعامل مع التطبيقات متعددة الخيوط (وسيساعد الخيار -tid في تحديد الخيط الذي يقوم بكل استدعاء). ومع ذلك، لاحظ أنه نظرًا لأن واجهة تصحيح أخطاء Windows تعتمد على الأحداث، إذا كانت خيوط متعددة تقوم باستدعاءات في نفس الوقت، فسيتم تسلسل التتبع.
افتراضيًا، يتم تتبع الاستدعاءات في NtDll؛ تحدد ملفات التكوين لـ Gdi32 و User32 DLL هدفًا مختلفًا. لا يدعم NtTrace حاليًا تتبع أنواع مختلفة من استدعاءات النظام في وقت واحد.
يتم حفظ تكوين الاستدعاءات الأصلية في NtTrace.cfg ويتم تحليل هذا الملف عند بدء تشغيل البرنامج. لاحظ أن إصدارات Windows المختلفة تدعم مجموعات مختلفة من الاستدعاءات.
بعض الوظائف الأصلية موثقة رسميًا من قبل Microsoft ولكن الكثير منها غير موثق. تم الوصول إلى القائمة (شبه) الكاملة من خلال مزيج من العمل الاستقصائي على الوظائف ومن مواقع الويب، مثل ReactOS.
يتم تعيين كل وظيفة إلى فئة، ويمكن إجراء التصفية حسب اسم الوظيفة (تطابق جزئي) وفئة الوظيفة.
افتراضيًا، يتتبع NtTrace عند العودة من استدعاء النظام، ولكن يمكن استخدام الخيار -pre للتتبع قبل الاستدعاء أيضًا.
يمكن أن يكون هذا مفيدًا إذا، على سبيل المثال، تم استخدام نفس البنية لمخزن الطلب والاستجابة.