在ssdt hook中 经常会有下面的代码 //定义一个原函数指针typedef NTSTATUS (__stdcall *REALZWOPENPROCESS)(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN PCLIENT_ID ClientId);REALZWOPENPROCESS RealZwOpenProcess;......//为什么可以直接调用呢? 这个函数是否会调用内核的NtOpenProcess函数?为什么status = RealZwOpenProcess(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);新手求指点
1 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
typedef定义了一个函数指针类型REALZWOPENPROCESS,REALZWOPENPROCESS RealZwOpenProcess声明了一个函数指针RealZwOpenProcess。你省略掉的部分应该有对RealZwOpenProcess的赋值,RealZwOpenProcess = &FunctionName或者RealZwOpenProcess = FunctionName,否则都没指向某个函数,是没法调用的。我想,你想所问“直接调用”是只直接写的RealZwOpenProcess(...)而不是(* RealZwOpenProcess)(...),对么?原因是二者等效。因为在C里面,当你用一个函数指针调用函数时,C会自动反引用,也就是说前这会被自动翻译为后者。至于这个函数会否调用内核的NtOpenProcess函数,就得看你赋值给指针RealZwOpenProcess的那个函数了。
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消