如何取得内存地址中的值
怎么取得内存地址中的值?
我获取了一个程序中某个属性的内存地址,那么怎么获取该地址的值,在我的程序中显示出来?
------解决方案--------------------
获取该地址的值
----------------
一个地址,它可以是一个字节的数据,也可以是数个字节的数据,在内存中,这些数据是二进制的,可以解释成字符、字符串、整型、浮点、对象......
所以说,指针是有类型的,只有明确了指针的类型,指针指向的数据对我们才有意义。
下面演示用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是否会允许你去读它(更不用说写它了)
我获取了一个程序中某个属性的内存地址,那么怎么获取该地址的值,在我的程序中显示出来?
------解决方案--------------------
获取该地址的值
----------------
一个地址,它可以是一个字节的数据,也可以是数个字节的数据,在内存中,这些数据是二进制的,可以解释成字符、字符串、整型、浮点、对象......
所以说,指针是有类型的,只有明确了指针的类型,指针指向的数据对我们才有意义。
下面演示用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是否会允许你去读它(更不用说写它了)