RtlCaptureStackBackTrace захватывает без рамки - PullRequest
0 голосов
/ 20 февраля 2020

Я использую RtlCaptureStackBackTrace в своем драйвере режима ядра и пытаюсь получить трассировку вызова, но он захватывает ноль кадров. Код:

PVOID *stackTrace = NULL;
PULONG traceHash = NULL;
USHORT capturedFrames = 0;

capturedFrames = RtlCaptureStackBackTrace(0, 10, stackTrace, traceHash);

когда я проверяю трассировку стека, он равен NULL.

1 Ответ

0 голосов
/ 20 февраля 2020

вы предоставляете stackTrace как NULL, но в соответствии с документацией :

Выделенный вызывающим массив массив, в котором указатели на адреса возврата, полученные из текущей трассировки стека

это означает, что вам нужно выделить массив для параметра BackTrace.

Например:

#define ARRAY_SIZE 10
PVOID stackTrace[ARRAY_SIZE] = {0};
USHORT capturedFrames = 0;

capturedFrames = RtlCaptureStackBackTrace(0, ARRAY_SIZE, stackTrace, NULL);

Примечание: don ' Чтобы использовать его в производственном коде, лучше, если вы используете динамическое выделение c с использованием ExAllocatePoolWithTag())

Также посмотрите на этот Microsoft Пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...