小弟用的delphi开发驱动,在驱动里用到了PsLookupProcessByProcessI这个函数,这样调用
st := PsLookupProcessByProcessId(ClientId.UniqueProcess, eprocess);
该函数的声明在ntoskrnl.pas里面:
function PsLookupProcessByProcessId(ulProcId: ULONG; var EProcess: PVOID  
NTSTATUS; stdcall;
function PsLookupProcessByProcessId; external NtKernel name '_PsLookupProcessByProcessId';
我引入了ntoskrnl.单元,然后就直接调用了该函数,经过windbg查看
ba658b90 55 push ebp
ba658b91 8bec mov ebp,esp
ba658b93 51 push ecx
ba658b94 53 push ebx
ba658b95 56 push esi
ba658b96 57 push edi
ba658b97 8b5d14 mov ebx,dword ptr [ebp+14h]
ba658b9a 8b33 mov esi,dword ptr [ebx]
ba658b9c 81feffc99a3b cmp esi,3B9AC9FFh
ba658ba2 750c jne ba658bb0
ba658ba4 8d45fc lea eax,[ebp-4]
ba658ba7 50 push eax
ba658ba8 56 push esi
ba658ba9 e852f4ffff call ba658000 //////////////这里为刚刚的那个函数调用(后面跟进去一看显示下面的代码,后显示这个地址是错误的,所以蓝屏了)
Flow analysis was incomplete, some code may be missing
ba658000 4d dec ebp
ba658001 5a pop edx
ba658002 90 nop
ba658003 0003 add byte ptr [ebx],al
ba658005 0000 add byte ptr [eax],al
ba658007 000400 add byte ptr [eax+eax],al
ba65800a 0000 add byte ptr [eax],al
请问大大们delphi能这样引入ntoskrnl.pas 然后就直接调用里面的函数吗,我随变试了几个ntoskrnl.pas里定义的其它函数发现他们的call的地址都是一样的。。另外我查看了本机的内核为
ntkrnlpa.exe ..于是把ntoskrnl.pas 单元里的NtKernel='ntoskrnl.exe'; 改为Ntkernel='ntkrnlpa.exe';还是一样的结果。。。。请大牛们看看这是怎么回事?不胜感激!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课