首页
社区
课程
招聘
[求助]如何获取已知ID的进程的主线程ID?(谁来编译一下8楼,谢谢啊)
发表于: 2009-1-16 01:19 17577

[求助]如何获取已知ID的进程的主线程ID?(谁来编译一下8楼,谢谢啊)

2009-1-16 01:19
17577
已知某个特定进程的ID,有没有现成的函数能够获取该进程的主线程ID?

请看12楼的求助,谢谢啦

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

收藏
免费 0
支持
分享
最新回复 (26)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
没有办法,除非你在创建的时候监视
2009-1-16 10:52
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不会吧,没办法啊
进程ID都知道了我以为应该啥都能干了
2009-1-16 14:25
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
还是有办法的,狙剑就可以做到
2009-1-16 14:45
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
狙剑是who?
我查到的是:
CreateToolhelp32Snapshot+Thread32First+Thread32Next
枚举所有线程,然后判断线程的时间是否和指定的进程时间几乎一样?
2009-1-16 15:34
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
何为主线程,如果能准确定义的话,根据定义去推导,应该是能得到的。
2009-1-16 16:18
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
以知已进程的ID 获取进程ID? 我只知道进程名怎么获取进程ID
2009-1-16 16:53
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不知道为什么高手都不给你解答
这问题很简单啊
DWORD dwProcessID = xxxxx, dwThreadID = 0;
THREADENTRY32 te32 = {sizeof(te32)};
HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
if( Thread32First( hThreadSnap, &te32) )
{
      do{
                  if( dwProcessID == te32.th32OwnerProcessID )
                    {
                           dwThreadID = te32.th32ThreadID;
                           break;
                    }
             }while( Thread32Next( hThreadSnap, &te32) );
}
2009-1-16 18:31
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
简单说就是线程快照里满足条件的第一个就是主线程ID, 主线程不是第一个被创建的吗?
2009-1-16 18:33
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢
我是菜鸟,让我慢慢理解哈
2009-1-16 19:07
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
就是说:既然已知了PID,那么就可以新建该PID的线程快照,然后快照中第一个线程就是主线程。
我再问一声:线程快照里的线程是按照创建的时间先后排列的对吗?
2009-1-16 19:20
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谁来帮忙把8楼兄弟的代码编译成exe给我?
谢谢啦,我不会这个,我想看看编译后的exe反汇编后在OD里是什么样子的。

就编个空壳exe就行啦,pID随便输一个,比如100.
2009-1-17 17:05
0
雪    币: 271
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
达文西...我以前一同学叫达文的...但不像你那么懒!

#include <iostream.h>
#include <windows.h>
#include <tlhelp32.h>
void main()
{
        DWORD dwProcessID, dwThreadID;
        while(1)
        {
                dwThreadID = 0;
                cout<< "请输入进程pID:";
                cin >>dwProcessID;
                THREADENTRY32 te32 = {sizeof(te32)};
                HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
                if( Thread32First( hThreadSnap, &te32) )
                {
                  do{
                           if( dwProcessID == te32.th32OwnerProcessID )
                           {
                                        dwThreadID = te32.th32ThreadID;
                                        break;
                           }
                         }while( Thread32Next( hThreadSnap, &te32) );
                }
                if (dwThreadID != 0)
                        cout<<"主线程ID:"<<dwThreadID<<endl;
                else
                        cout<<"没找到"<<endl;
        }
}
8楼代码都给了, 编译下不就行了。 我那同学叫达文的是我的偶像, 以前全靠抄他作业的....
上传的附件:
2009-1-17 17:51
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢楼上的兄弟!真的感谢。

我不是懒啊,我在0基础上起步学编程,编译的时候经常出错,没基础所以那些错误信息我也不是太懂

谢谢你啊,有问题我再请教。
谢谢

原来你同学叫达文,不错,叫他达文西刚好
2009-1-17 18:13
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
15
快照中第一个线程不一定就是主线程,呵呵
2009-1-18 18:57
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
16
我觉得应该对线程入口点进行判断,与PE文件的入口点一致就是主线程吧???

我只是说说自己的猜想,有错的话希望指正。
2009-1-18 22:34
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
不知道呢,这个目前还没有解决,太菜了没办法。
后面有时间再看看吧,暂时搁置了。
2009-1-18 23:51
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
18
满足这个条件的线程只能说属于目标进程(这里CreateToolhelp32Snapshot的第二个参数应该填目标进程PID而不是0),你也许会说,根据这个快照扫出来的线程还有不属于这个进程的吗?跟踪一下就知道,最近我也研究过获取主线程ID的方法

下面这个方法应该是正确的


用GetThreadTimes函数获取指定线程的时间信息,然后根据上面提供的思路实现。
2009-3-10 18:30
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
谢谢stalker和forgot。
GetThreadTimes 看起来不错,我先自己试试,不行的话我点将你啊,毕竟你实战过了,应该有收获可以教我的
2009-3-10 20:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
應該可以用handle來找,先用GetParent找出主要hwnd,然後用GetWindowThreadProcessId
得到主pid
2009-3-11 12:03
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
主线程ID 和进程ID  不是一个概念吗  好迷糊啊
2009-5-10 09:32
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WWX
22
关注中。
好像应该有方法吧!
2009-5-10 19:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
呜呜 看上面的东西..和天数一样~
2009-5-10 23:23
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
24
CsrssWalker~~
2009-5-12 12:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
用汇编写,利用栈回溯到最开始的线程,那个是最早调用的
2009-5-12 17:17
0
游客
登录 | 注册 方可回帖
返回
//