HINSTANCE ntdll=NULL;
ntdll=::LoadLibrary(TEXT("ntdll.dll"));
HANDLE ( *ntadress)(DWORD dwDesiredAccess,BOOL bInheritHandle, DWORD dwProcessId);
if(ntdll!=NULL)
{
ntadress = (HANDLE (*)(DWORD dwDesiredAccess,BOOL bInheritHandle, DWORD dwProcessId))GetProcAddress(ntdll,"NtOpenProcess");
}
HANDLE pro = (*ntadress)(PROCESS_ALL_ACCESS,false,id);
运行时出了问题
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
应该是堆栈被破坏,查了下是调用约定的问题,这种dll中的api应该用哪种约定。
HANDLE ( *ntadress)(DWORD dwDesiredAccess,BOOL bInheritHandle, DWORD dwProcessId);
这个是OpenProcessNtOpenProcess是下面这个
NTSYSAPI
NTSTATUS
NTAPI
NtOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId );