摘要: 利用进程ID获取主线程ID,仅适用于单线程。多线程应区分哪个是主线程,区分方法待验证(1)好像可以用StartTime最早的,不过通过线程执行时间不一定可靠,要是在最开始就CreateThread了,线程的执行时间会相同。可以通过回溯栈上的值来判断哪个线程是主线程,主线程的栈多少有些不同。最明显就是主线程栈上的PE入口点信息,没有这个的就是子线程。(2)CsrProcessLink中取CsrProcessInfo->ClientId.UniqueThread即可,绝对可靠。#include #include #include void main(){ DWORD dwProcessID, 阅读全文
posted @ 2013-10-27 21:46 Max Woods 阅读(2668) 评论(0) 推荐(0) 编辑
摘要: //使用IsDebuggerPresent这个API来检测是否被调试function FD_IsDebuggerPresent(): Boolean;beginif IsDebuggerPresent then Result := Trueelse Result := False;end;//使用查看PEB结构中标志位beingDegug来检测是否被调试function PD_PEB_BeingDebuggedFlag(): Boolean;beginasm mov @result, 0 mov eax, fs:[30h] //EAX = TEB.ProcessEnvironmentBlock 阅读全文
posted @ 2013-10-27 21:39 Max Woods 阅读(1169) 评论(0) 推荐(0) 编辑
摘要: 1 // 2 // 3 4 #include 5 #include 6 #include 7 8 typedef NTSTATUS (__stdcall * NTQUERYINFORMATIONPROCESS) 9 (10 HANDLE ProcessHandle,11 PROCESSINFOCLASS ProcessInformationClass,12 PVOID ProcessInformation,13 ULONG ProcessInformationLength,14 PULONG ReturnLength15 );16 17 in... 阅读全文
posted @ 2013-10-27 21:06 Max Woods 阅读(1459) 评论(0) 推荐(0) 编辑
摘要: program GetCommandLineExDemo;uses Windows;constSystemHandleInformation = 16;ProcessBasicInformation = 0;STATUS_SUCCESS = cardinal($00000000);SE_DEBUG_PRIVILEGE =20;STATUS_ACCESS_DENIED = cardinal($C0000022);STATUS_INFO_LENGTH_MISMATCH = cardinal($C0000004);SEVERITY_ERROR = cardinal($C0000000);TH32CS 阅读全文
posted @ 2013-10-27 20:00 Max Woods 阅读(1809) 评论(0) 推荐(0) 编辑