分类: Python/Ruby
2012-04-19 11:52:45
通常我们所说的CPU状态信息是对于线程而言的,所以在获取相关的寄存器信息之前,首先要找到进程下的线程。
假设现在我们已经将某个进程附加到了调试器中,并且已经知道了该进程的PID值。接着,我来说说如何获取相关的寄存器信息。
1.用CreateToolhelp32Snapshot()进行线程枚举,可以得到系统中的线程列表,返回该列表的句柄值;
CreateToolhelp32Snapshot()可以帮助我们获取系统进程列表、系统中的线程列表、被加载到某一进程中的所有模块列表、某个进程所属的堆列表。
该函数有两个参数,我们在使用时第一个参数设置为TH32CS_SNAPTHREAD(0x00000004);第二个参数为该进程的PID值(此时函数在为我们提取线程信息时不理会该参数)。
2.用Thread32First()获取线程列表中的第一个线程;
该API有两个参数,第一个为线程列表的句柄值;第二个指向一个THREADENTRY32结构体类型的变量,该结构体中的dwSize必须正确的设置为该结构体的大小。
3.在上一步执行完后,THREADENTRY32结构体变量就会被赋值,通过比较结构体中的th32OwnerProcessID与该进程的PID值来判断该线程是否属于这个进程,若属于,则将它的TID写入列表中(append函数),否则跳过