RtlCaptureStackBackTrace未捕获任何帧

RtlCaptureStackBackTrace is capturing no frame

本文关键字:任何帧 RtlCaptureStackBackTrace      更新时间:2023-10-16

我在内核模式驱动程序中使用RtlCaptureStackBackTrace,并试图获取调用跟踪,但它捕获了零帧。代码为:

PVOID *stackTrace = NULL;
PULONG traceHash = NULL;
USHORT capturedFrames = 0;
capturedFrames = RtlCaptureStackBackTrace(0, 10, stackTrace, traceHash);

当我检查stacktrace时,它是NULL。

您提供stackTrace作为NULL,但根据文档:

调用方分配的数组,其中指向返回地址的指针返回从当前堆栈跟踪捕获的。

这意味着您需要为BackTrace参数分配一个数组。

例如:

#define ARRAY_SIZE 10
PVOID stackTrace[ARRAY_SIZE] = {0};
USHORT capturedFrames = 0;
capturedFrames = RtlCaptureStackBackTrace(0, ARRAY_SIZE, stackTrace, NULL);

注意:不要在生产代码中使用它,最好使用ExAllocatePoolWithTag()(进行动态分配

另请查看此Microsoft示例