我写了一个C工具来混淆一下windows内核。现在我们可以看到在“PAGE”部分有几个函数,这意味着内核的这个函数可以被调出。我知道他们的地址,因为我可以在内存中读取Windows内核的PE头。 (不可分页以及主要.text部分)。Windows(64)内核驱动程序和pagable函数
所以这里是我的问题:为了调用windows内核的pagable函数(从我的驱动程序),我需要做些什么。更确切地说,我必须做些什么来确保函数当前被分页和驻留为可执行内存?当这些功能被分页时偶尔会出现BSOD。有没有一种方便的方法来实现这一目标? (而不是称为“PAGE”的内核文本部分的“MmProbeAndLockPages”)。
提示:我没有使用Windows工具。我需要完成,在普通的老C(MinGW的工具链)
问候, 迈克尔
./bin/asmdiff.exe info -s /cygdrive/c/Windows/winsxs/amd64_microsoft-windows-os-kernel_31bf3856ad364e35_6.1.7601.17514_none_ca56670fcac29ca9/ntoskrnl.exe
Trying to get Information for file: /cygdrive/c/Windows/winsxs/amd64_microsoft-windows- os-kernel_31bf3856ad364e35_6.1.7601.17514_none_ca56670fcac29ca9/ntoskrnl.exe...
BinaryFormat: PE_64
######### Dumping PE64-File sections: #########
Section 0: <.text> base:0x0000000140001000 len:1712881
Section 1: <INITKDBG▒9> base:0x00000001401A4000 len:14768
Section 2: <POOLMI> base:0x00000001401A8000 len:7197
Section 3: <POOLCODE base:0x00000001401AA000 len:11803
Section 4: <RWEXEC> base:0x00000001401AD000 len:4096
Section 5: <.rdata> base:0x00000001401AE000 len:252272
Section 6: <.data> base:0x00000001401EC000 len:603464
Section 7: <.pdata> base:0x0000000140280000 len:196824
Section 8: <ALMOSTRO▒> base:0x00000001402B1000 len:7664
Section 9: <[email protected]> base:0x00000001402B3000 len:6464
Section 10: <PAGELK> base:0x00000001402B5000 len:85739
Section 11: <PAGE> base:0x00000001402CA000 len:2317806
Section 12: <PAGEKD> base:0x0000000140500000 len:19442
Section 13: <PAGEVRFY▒> base:0x0000000140505000 len:136619
Section 14: <PAGEHDLS▒'> base:0x0000000140527000 len:10199
Section 15: <PAGEBGFXLf> base:0x000000014052A000 len:26188
Section 16: <PAGEVRFB> base:0x0000000140531000 len:13312
Section 17: <.edata> base:0x0000000140535000 len:67960
Section 18: <PAGEDATA> base:0x0000000140546000 len:56576
Section 19: <PAGEVRFC)> base:0x0000000140554000 len:10526
Section 20: <PAGEVRFDP> base:0x0000000140557000 len:4688
Section 21: <INIT> base:0x0000000140559000 len:357788
Section 22: <.rsrc> base:0x00000001405B1000 len:221024
Section 23: <.reloc> base:0x00000001405E7000 len:8304
现在,内核seection的MmProbeAndLock为我工作。我猜MmLockPagableCodeSection也是一种方法。我正在使用最低的IRQL。 但我仍然需要在oder的ProbeAndLock来获取页面。如果我不这样做,系统有时会返回给我可读的死空间。在VM或主机CPU内部进行内核分页时,我还注意到了行为的改变。 – willsteel