首页
社区
课程
招聘
[旧帖] 已解决 win8 64位,遍历指定进程的线程失败 0.00雪花
发表于: 2014-4-20 15:05 5641

[旧帖] 已解决 win8 64位,遍历指定进程的线程失败 0.00雪花

2014-4-20 15:05
5641

#include "stdafx.h"
#include <windows.h>
#include "NativeAPI.h"



int main()
{
	//HWND hwar3 = NULL;
	//hwar3 = FindWindowA(NULL,"Warcraft III");
	DWORD war3PID = 0;
	scanf_s("%d",&war3PID);

	//GetWindowThreadProcessId(hwar3,&war3PID);
	PSYSTEM_PROCESSES psp=NULL;
	DWORD dwNeedSize = 0;
	PVOID pBuffer = NULL;
	 

	NTSTATUS status = ZwQuerySystemInformation(SystemProcessesAndThreadsInformation, NULL, 0, &dwNeedSize);   
	if ( status == STATUS_INFO_LENGTH_MISMATCH ) 
	{   
		pBuffer = malloc(dwNeedSize);
		status = ZwQuerySystemInformation(SystemProcessesAndThreadsInformation, (PVOID)pBuffer, dwNeedSize, NULL);   

		if ( status == STATUS_SUCCESS )   
		{   
			psp = (PSYSTEM_PROCESSES)pBuffer;
			while(1)
			{
				// 如果匹配,输出线程信息
				if (war3PID == psp->ProcessId)
				{
					DWORD dwThreadCount = 0;
					printf("TID     起始地址\r\n");
					for (;dwThreadCount < psp->ThreadCount; dwThreadCount++)
					{
						DWORD dwLasterror = 0;
						PVOID pStartAddress = NULL;  
						HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, (DWORD)psp->Threads[dwThreadCount].ClientId.UniqueThread);  
						if (hThread != NULL)
						{
							ZwQueryInformationThread(hThread, ThreadQuerySetWin32StartAddress, &pStartAddress,sizeof(pStartAddress), NULL);  
						}
						CloseHandle(hThread);

						printf("%d ", psp->Threads[dwThreadCount].ClientId.UniqueThread);
						printf("0x%08x\r\n", pStartAddress);
						// 如何判断线程属于哪个模块
					}
					break;
				}

				if (!psp->NextEntryDelta)
				{
					break;
				}
				psp = (PSYSTEM_PROCESSES)((ULONG)psp + psp->NextEntryDelta );   
			}

			free(pBuffer);   
			pBuffer = NULL;   
		}
	}   
	return 0;
}



NextEntryDelta 无法读取内存

求大神解释

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 294
活跃值: (119)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
2B了。。忘记初始化了。。。结贴- -
2014-4-20 16:13
0
雪    币: 1905
活跃值: (1537)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
判断线程在哪一个模块,获取模块地址和大小,然后,判断线程入口地址在哪个模块范围内就行了。
2014-4-20 16:57
0
雪    币: 192
活跃值: (1608)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
64位的不好弄啊
2014-4-20 20:54
0
雪    币: 400
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
突然发现我老了啊
2014-4-24 23:00
0
雪    币: 954
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
xue xi
2014-4-25 00:11
0
游客
登录 | 注册 方可回帖
返回
//