簡體   English   中英

無法將結構指針轉換為 PUCHAR

[英]Cannot cast struct pointer to PUCHAR

我正在測試一個代碼(基於this reference ),我收到一條錯誤消息:

“類型轉換”:無法從“SYSTEM_SERVICE_TABLE”轉換為“PUCHAR”

怎么解決?

版:

目標是嘗試在 Windows 10 32bit 上找到Shadow SSDT表地址。

#include <ntddk.h>

#define NTOSAPI __declspec(dllimport)

typedef struct tag_SYSTEM_SERVICE_TABLE {
    PULONG ServiceTable;
    PULONG CounterTable;
    ULONG ServiceLimit;
    PCHAR ArgumentTable;
} SYSTEM_SERVICE_TABLE, *PSYSTEM_SERVICE_TABLE, **PPSYSTEM_SERVICE_TABLE;

NTOSAPI SYSTEM_SERVICE_TABLE KeServiceDescriptorTable;

NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegistryPath) {

    NTSTATUS NtStatus = STATUS_SUCCESS;

    pDriverObject->DriverUnload = DriverUnload;
    
    DbgPrint("DriverEntry()!\n");

    PUCHAR p = NULL;
    PSYSTEM_SERVICE_TABLE KeServiceDescriptorTableWIN32K = NULL;
    
    for (p = (PUCHAR)KeServiceDescriptorTable - PAGE_SIZE; p < (PUCHAR)KeServiceDescriptorTable + PAGE_SIZE; p++)
    {
        if (p != (PUCHAR)KeServiceDescriptorTable)
        {
            if (memcmp(p, &KeServiceDescriptorTable, sizeof(SYSTEM_SERVICE_TABLE)) == 0)
            {
                KeServiceDescriptorTableWIN32K = (PSYSTEM_SERVICE_TABLE)(p + sizeof(SYSTEM_SERVICE_TABLE));
                break;
            }
        }
    }

    return NtStatus;
}

您的標題說“無法將結構指針轉換為 PUCHAR”,但代碼並沒有嘗試轉換指針,而是嘗試轉換結構本身,這就是編譯器抱怨的原因。 您需要獲取結構的地址並將其轉換為,即:

(PUCHAR)&KeServiceDescriptorTable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM