跟踪ZwOpenFile的笔记,确定参数的传递方式是按照从右到左的方式入栈,和c的调用方式一样。
下断点ZwOpenFile中断后的堆栈如下:
nt!ZwOpenFile
nt!MmLoadSystemImage+0x266
nt!IopLoadDriver+0x370
nt!PipCallDriverAddDeviceQueryRoutine+0x235
nt!RtlpCallQueryRegistryRoutine+0x3b1
nt!RtlQueryRegistryValues+0x2a6
nt!PipCallDriverAddDevice+0x261
nt!PipProcessDevNodeTree+0x1a4
nt!PiProcessReenumeration+0x60
nt!PipDeviceActionWorker+0x166
nt!ExpWorkerThread+0x100
nt!PspSystemThreadStartup+0x34
nt!KiThreadStartup+0x16
下面我们来找出打开的文件名
kd> d esp//栈顶存放的返回地址
f9e9e66887 43 5a 80 dc e7 e9 f9-20 00 00 007c e7 e9 f9.CZ..... ...|...
f9e9e6785c e7 e9 f9 05 00 00 00-00 00 00 00 20 b6 55 80\........... .U.
f9e9e68840 b6 55 80 00 00 00 00-e0 2e 00 e1 00 ee a7 e1@.U.............
f9e9