广海社区

 找回密码
 立即注册
搜索
查看: 161|回复: 8

不用汇编获取IDT的方式

[复制链接]
累计签到:28 天
连续签到:1 天

31

主题

31

帖子

223

积分

小有名气 Rank: 3Rank: 3

威望
0
热心值
0
贡献
177
交易币
0
发表于 2019-6-11 12:01:50 | 显示全部楼层 |阅读模式
不用汇编获取IDT的方式
  1. #include <WinDef.h>
  2. #include<ntddk.h>

  3.    typedef union _KIDTENTRY64 {
  4.     struct {
  5.      USHORT OffsetLow;
  6.      USHORT Selector;
  7.      USHORT IstIndex : 3;
  8.      USHORT Reserved0 : 5;
  9.      USHORT Type : 5;
  10.      USHORT Dpl : 2;
  11.      USHORT Present : 1;
  12.      USHORT OffsetMiddle;
  13.      ULONG OffsetHigh;
  14.      ULONG Reserved1;
  15.     };
  16.     ULONG64 Alignment;
  17.    } KIDTENTRY64, *PKIDTENTRY64;
  18.    typedef struct _AMD64_DESCRIPTOR {
  19.     USHORT  Pad[3];
  20.     USHORT  Limit;
  21.     ULONG64 Base;
  22.    } AMD64_DESCRIPTOR, *PAMD64_DESCRIPTOR;
  23.    typedef NTSTATUS(NTAPI *_KeSetAffinityThread)(
  24.     IN PKTHREAD Thread,
  25.     IN KAFFINITY Affinity);
  26.    PKIDTENTRY64 *g_ppIdtEntry;


  27. VOID GetIDT()
  28. {
  29. PKIDTENTRY64 Idt;
  30. KAFFINITY Processor = KeQueryActiveProcessors();
  31. UNICODE_STRING ustrKeSetAffinityThread;
  32. _KeSetAffinityThread KeSetAffinityThread;
  33. RtlInitUnicodeString(&ustrKeSetAffinityThread, L"KeSetAffinityThread");
  34. KeSetAffinityThread = (_KeSetAffinityThread)MmGetSystemRoutineAddress(&ustrKeSetAffinityThread);
  35. LONG Count = 0;
  36. for (LONG i = 0; i < Processor; i++)
  37. {
  38.    LONG a = Processor & (1 << i);
  39.    if (a != 0)
  40.    {
  41.     KeSetAffinityThread(KeGetCurrentThread(), (KAFFINITY)a);
  42.     Idt = KeGetPcr()->IdtBase;
  43.     g_ppIdtEntry[Count] = Idt;
  44.     DbgPrint("%d  %p \r\n", Count, g_ppIdtEntry[Count]);
  45.     Count++;
  46.     continue;
  47.    }
  48.    break;
  49. }
  50. }
  51. VOID IDTUnload(IN PDRIVER_OBJECT DriverObject)
  52. {
  53. DbgPrint("卸载成功");
  54. ExFreePoolWithTag(g_ppIdtEntry, 'gidt');
  55. }
  56. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath)
  57. {
  58. NTSTATUS Status = STATUS_SUCCESS;

  59. g_ppIdtEntry = (PKIDTENTRY64 *)ExAllocatePoolWithTag(NonPagedPool, sizeof(PKIDTENTRY64) * KeNumberProcessors,'gidt');
  60. if (!MmIsAddressValid(g_ppIdtEntry))
  61. {
  62.    DbgPrint("g_ppIdtEntry Error ");
  63.    return Status;
  64. }
  65. GetIDT();
  66. for (size_t i = 0; i < KeNumberProcessors; i++)
  67. {
  68.    DbgPrint("%0.8X %0.8X %0.8X %p\r\n",
  69.     g_ppIdtEntry[0][i].OffsetHigh,
  70.     g_ppIdtEntry[0][i].OffsetMiddle,
  71.     g_ppIdtEntry[0][i].OffsetLow,
  72.     (((ULONGLONG)g_ppIdtEntry[0][i].OffsetHigh << 32) |               //(直接+也可以)
  73.     ((ULONGLONG)g_ppIdtEntry[0].OffsetMiddle << 16) |
  74.     (ULONG)g_ppIdtEntry[0].OffsetLow));
  75. }

  76. DriverObject->DriverUnload = IDTUnload;
  77. return Status;
  78. }
复制代码


回复

使用道具 举报

累计签到:29 天
连续签到:1 天

39

主题

44

帖子

274

积分

小有名气 Rank: 3Rank: 3

威望
0
热心值
0
贡献
230
交易币
0
发表于 2019-6-12 15:15:28 | 显示全部楼层
果然不错 广海论坛好地方
回复

使用道具 举报

尚未签到

0

主题

73

帖子

146

积分

正式会员 Rank: 2

威望
0
热心值
0
贡献
73
交易币
0
发表于 2019-6-14 16:45:56 | 显示全部楼层
楼主好聪明啊!
回复

使用道具 举报

尚未签到

0

主题

71

帖子

142

积分

正式会员 Rank: 2

威望
0
热心值
0
贡献
71
交易币
0
发表于 2019-6-14 21:16:35 | 显示全部楼层
青春不在了,青春痘还在!
回复

使用道具 举报

尚未签到

0

主题

70

帖子

140

积分

正式会员 Rank: 2

威望
0
热心值
0
贡献
70
交易币
0
发表于 2019-6-14 22:54:38 | 显示全部楼层
坚持回帖!
回复

使用道具 举报

尚未签到

0

主题

72

帖子

144

积分

正式会员 Rank: 2

威望
0
热心值
0
贡献
72
交易币
0
发表于 2019-6-15 05:44:44 | 显示全部楼层
发发呆,回回帖,工作结束~
回复

使用道具 举报

尚未签到

0

主题

74

帖子

148

积分

正式会员 Rank: 2

威望
0
热心值
0
贡献
74
交易币
0
发表于 2019-6-15 20:48:27 | 显示全部楼层
论坛的人气越来越旺了!
回复

使用道具 举报

尚未签到

0

主题

75

帖子

150

积分

正式会员 Rank: 2

威望
0
热心值
0
贡献
75
交易币
0
发表于 2019-6-17 10:20:24 | 显示全部楼层
管它三七二十一!
回复

使用道具 举报

尚未签到

0

主题

74

帖子

148

积分

正式会员 Rank: 2

威望
0
热心值
0
贡献
74
交易币
0
发表于 2019-6-17 23:45:38 | 显示全部楼层
好,很好,非常好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|广海社区 |格子

GMT+8, 2019-10-23 20:42 , Processed in 0.079057 second(s), 42 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表