"为什么可以直接调用呢? 这个函数是否会调用内核的NtOpenProcess函数?为什么"
typedef 只是声明了一个函数类型指针,是不可以直接调用的,
在直接调用前的某一处地方,肯定是对这个指针进行了赋值,你可以在代码里搜索一下
"RealZwOpenProcess=",应该能看到赋值的代码
InterlockedExchange在MSDN上的解释:The InterlockedExchange function atomically exchanges a pair of valuesThe function prevents more than one thread from using the same variable simultaneously,意思是这个函数是用于对一个变量的值进行交换,并且防止多个线程同时访问这个变量,并且返回值是该变量原值
HOOK_SYSCALL这个宏的三个参数_Function 是服务的ID, _Hook是你自己函数的地址, _Orig返回
原服务的地址,用于Unhook,这个宏的功能通俗的讲就是用独占的方式HOOK SSDT表里函数的地址
提供一个技术论坛,看雪 bbs.pediy.com,你这种问题在那里问会得到更专业的解答
typedef定义了一个函数指针类型REALZWOPENPROCESS,REALZWOPENPROCESS RealZwOpenProcess声明了一个函数指针RealZwOpenProcess。你省略掉的部分应该有对RealZwOpenProcess的赋值,RealZwOpenProcess = &FunctionName或者RealZwOpenProcess = FunctionName,否则都没指向某个函数,是没法调用的。我想,你想所问“直接调用”是只直接写的RealZwOpenProcess(...)而不是(* RealZwOpenProcess)(...),对么?原因是二者等效。因为在C里面,当你用一个函数指针调用函数时,C会自动反引用,也就是说前这会被自动翻译为后者。至于这个函数会否调用内核的NtOpenProcess函数,就得看你赋值给指针RealZwOpenProcess的那个函数了。