linux下获取模块基址,驱动学习十三(获取内核模块名和基址)

#include "ntddk.h"

#include

typedef enum _SYSTEM_INFORMATION_CLASS

{

SystemModuleInformation = 11,

} SYSTEM_INFORMATION_CLASS;

typedef struct _SYSTEM_MODULE_INFORMATION

{

ULONG Reserved[2];

PBYTE Base;

ULONG Size;

ULONG Flags;

USHORT Index;

USHORT Unknown;

USHORT LoadCount;

USHORT ModuleNameOffset;

CHAR ImageName[256];

} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;

typedef struct _SYSTEM_MODULE_INFO_LIST

{

ULONG ulCount;

SYSTEM_MODULE_INFORMATION smi[1];

} SYSTEM_MODULE_INFO_LIST, *PSYSTEM_MODULE_INFO_LIST;

extern"C"NTSTATUS __stdcall ZwQuerySystemInformation(

SYSTEM_INFORMATION_CLASS SystemInformationClass,

PVOID SystemInformation,

ULONG SystemInformationLength,

PULONG ReturnLength

);

// 获取kernel模块的信息

NTSTATUS GetKernelModuleInfo(PSYSTEM_MODULE_INFORMATION pSysModInfo)

{

NTSTATUS status = STATUS_UNSUCCESSFUL;

PSYSTEM_MODULE_INFO_LIST pSysModInfoList = NULL;

ULONG ulLength = 0;

status = ZwQuerySystemInformation(SystemModuleInformation, pSysModInfoList, ulLength, &ulLength);

if(status != STATUS_INFO_LENGTH_MISMATCH)

{

return STATUS_UNSUCCESSFUL;

}

pSysModInfoList = (PSYSTEM_MODULE_INFO_LIST)ExAllocatePool(NonPagedPool, ulLength);

if(NULL == pSysModInfoList)

{

return STATUS_UNSUCCESSFUL;

}

status = ZwQuerySystemInformation(SystemModuleInformation, pSysModInfoList, ulLength, &ulLength);

if(!NT_SUCCESS(status))

{

ExFreePool(pSysModInfoList);

return STATUS_UNSUCCESSFUL;

}

memcpy(pSysModInfo->ImageName,pSysModInfoList->smi[0].ImageName,sizeof(char)*256);

pSysModInfo->Base=pSysModInfoList->smi[0].Base;

ExFreePool(pSysModInfoList);

return STATUS_SUCCESS;

}

void DriverUnload(PDRIVER_OBJECT pDeviceObject)

{

}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pUnicodeString)

{

PSYSTEM_MODULE_INFORMATION info={0};

pDriverObject->DriverUnload=DriverUnload; //设置卸载例程

info = (PSYSTEM_MODULE_INFORMATION)ExAllocatePool(NonPagedPool, sizeof(SYSTEM_MODULE_INFORMATION));

GetKernelModuleInfo(info);

DbgPrint("内核文件名:%s 基址:%08x\n",info->ImageName,info->Base);

ExFreePool(info);

return STATUS_SUCCESS;

}

b9558962a71771705aa4a02fa6095744.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值