首先“0x12345EE” 这个地址是怎么来的,是内存的物理地址还是程序空间内4GB虚拟内存的地址?如是前者,则恐怕很难,要问候到NT的核心,用SoftICE比较方便了。(如果容易,SoftICE不用卖这么贵了)但我估计楼主说的是后者,既然你已经闯入了目标程序的4GB虚拟内存领空,该processID,mainHwnd等等当然是知道了,.NET FrameWork 内的System.Diagnostics.Process类基本上可以满足要求了。

解决方案 »

  1.   

    timiil(小华) :
    因为那个地址是其他程序提供的,所以不能使用handle,
    唯一能够提供的信息就是这个地址,想要通过这个地址取得Handle 然后发送一些信息给那个进程,比如sendmessage()
      

  2.   

    oh, 让我猜测你的场景如下:目标程序: 假设是[notepad.exe]
    其它程序: 假设是[金山游侠.exe]
    你的意思是先在系统执行[notepad.exe], 
    然后在[金山游侠.exe] 获得了这个“0x12345EE”这个地址,
    现在你想根据这个“0x12345EE”找到Handle?是这样么? 如果不是,或者你详细说明吧
      

  3.   

    那不容易到极么?! 
    用System.Diagnostics.Process这个对象启动你的[notepad.exe]啊!!! 启动后你对这个[notepad.exe]就有了全部的权限,什么Handle都有了,然后通过[金山游侠.exe]获取那个地址,想干啥就干啥了。
      

  4.   

    “[notepad.exe]”是已经启动好的(当然不是[notepad.exe]程序,这里是假设),
    不能够通过System.Diagnostics.Process再去启动!!!
      

  5.   

    哇,根本不可能阿!WIN32下每个进程都有自己的地址空间
    换句话说,你给一个地址,每个进程都有这个地址阿,你怎么找这个地址是谁的阿?
      

  6.   

    我开始也以为不可能啊,我是从一个游戏外挂看到的,
    他只要你给出一个HP地址,就可以帮你游戏的角色加HP,MP,(应该是通过发送一个键盘值到进程吧)
    难道他不需要通过HP地址来查找Handle吗?那么大家考虑一下,是使用什么办法实现的呢?
      

  7.   

    救命! 人家是同过查找窗口名称(FindWind)或是把当前系统所有进程拍个快照(象任务管理器)那样,然后逐个进程查找比对的,你问问题也算问得挺搞笑的。
      

  8.   

    通过窗口名称是不可能的,窗口名称已经被我改成各不相同的名称,他照样可以使用。
    你的第二种方法我没有看懂,不知道如何比对,不知道怎么做。(前面 shuker(我是一只小花猪) 提到:WIN32下每个进程都有自己的地址空间
    换句话说,你给一个地址,每个进程都有这个地址阿,你怎么找这个地址是谁的阿?)
      

  9.   

    shuker说的意思就是Win32中每个进程都独立自主拥有4GB的内存空间,一早根你说了。 你说:
    换句话说,你给一个地址,每个进程都有这个地址阿,你怎么找这个地址是谁的阿?这句话说得对,仅凭一个虚拟内存地址,是不能确定进程的。 必需通过其他的方法。窗口名称是不确定的,没所谓,还有GetWindowThreadProcessID这样的API,通过窗体句柄查找进程ID
      

  10.   

    可能是我没有说的很清楚,是这样的:
    某个游戏我同时开多个实例:
    A,B,C没有实例对应的任务角色HP地址可能是0xAAAAAA,0xBBBBBB,0xCCCCC
    没有角色的HP是不一样的,奇妙的是该外挂可以准确地同时为3个角色补HP,
    我提供给外挂程序的只有0xAAAAAA,0xBBBBBB,0xCCCCC这3个地址而已,我不知道它如何分别给那3个进程发送消息。她如何区分那3个地址分别属于哪个进程。