ULONG_PTR
,這是有原因的。在DWORD
與x64和x86兼容的情況下,這對成功至關重要。使用它:) x64的替代方法是DWORD64
類型轉換,而不是。 GetProcAddress返回NtSystemDebugControl
內部的偏移量ntdll
當在堆棧中查看時,與ntdll.dll!NtSystemDebugControl
關聯的地址現在指向在typedef中定義的函數指針。
從這裏你可以啓動指針這樣的:
NtSystemDebugControl My_NtSystemDebugControl;
if (My_NtSystemDebugControl != NULL) {
My_NtSystemDebugControl(...);
}
基本上這是什麼所做的是解決在運行時API,而不需要在編譯時鏈接。如果您的申請在CFF Explorer中查看,那麼IAT (Import-Address-Table)
將僅包含GetProcAddress
和LoadLibrary
。但NtSystemDebugControl
將不會出現,因爲它正在運行時被解析。
這樣做的好處是,它阻礙了很多反病毒的啓發式分析,它使得你的二進制文件的大小更小,因爲你在編譯時沒有連接大量無用的庫,並且它給了你更多的東西靈活性只需定義您需要的功能,而不是整個庫!
此外,您應該嘗試使用GetModuleHandle("ntdll")
,並在進入LoadLibrary("ntdll")
之前將結果與!= NULL
進行比較,因爲它的侵擾性更小!