我获取了一个程序中某个属性的内存地址,那么怎么获取该地址的值,在我的程序中显示出来?

解决方案 »

  1.   

    获取该地址的值
    ----------------
    一个地址,它可以是一个字节的数据,也可以是数个字节的数据,在内存中,这些数据是二进制的,可以解释成字符、字符串、整型、浮点、对象......所以说,指针是有类型的,只有明确了指针的类型,指针指向的数据对我们才有意义。下面演示用Byte指针获取一个地址的一字节数据。你真正需要的是最末两行代码,其他代码只是为了帮你验证。procedure TForm1.Button1Click(Sender: TObject);
    var
      P : ^Byte; //声明一个指向字节的指针
    begin
      P := @Button1; //因为我不知你已知的地址值是多少,所以用这个按钮的地址代替
      Edit1.Text := Format('%x',[integer(P)]);//把按钮的地址显示到Edit中去备用
      ShowMessage(format('%x',[integer(P^)]));//先看一下P指向的字节的值,十六进制
      integer(P) := StrToInt('$' + Trim(Edit1.text));//用Edit保存的地址值重新给P赋值
      ShowMessage(format('%x',[integer(P^)]));//验证一下P重赋值后是否目标仍相同
      { 结果是:相同。也就是说,integer(P) := $D51E68; 这样的赋值,正是给指针赋值
        于是,你所需要的正是integer(P) := 你已知的地址值; 这句,以及用Format的输出 }
    end;至于你说的“获取了一个程序中某个属性的内存地址”,我不清楚Windows是否会允许你去读它(更不用说写它了)
      

  2.   

    lz可以这样做,首先用OpenProcess函数打开你要读的进程,然后用ReadProcessMemory去读指定地址就可以了,这些都是WINDOWS自带函数!我以前写的一个程序用过没问题的!