怎么取得内存地址中的值?

THE_ROCK 2007-02-24 03:04:15
我获取了一个程序中某个属性的内存地址,那么怎么获取该地址的值,在我的程序中显示出来?
...全文
607 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
szuzsq 2007-05-11
  • 打赏
  • 举报
回复
^1下
chinachinamaysoft 2007-02-26
  • 打赏
  • 举报
回复
借楼主宝地,如果有一个物品名称叫:铠甲
那么怎么获取这个物品的内存地址?也就是根据“铠甲”这个字符串搜索内存地址,属于哪个地址?
susandy 2007-02-24
  • 打赏
  • 举报
回复
lz可以这样做,首先用OpenProcess函数打开你要读的进程,然后用ReadProcessMemory去读指定地址就可以了,这些都是WINDOWS自带函数!我以前写的一个程序用过没问题的!
lihuasoft 2007-02-24
  • 打赏
  • 举报
回复
获取该地址的值
----------------
一个地址,它可以是一个字节的数据,也可以是数个字节的数据,在内存中,这些数据是二进制的,可以解释成字符、字符串、整型、浮点、对象......

所以说,指针是有类型的,只有明确了指针的类型,指针指向的数据对我们才有意义。

下面演示用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是否会允许你去读它(更不用说写它了)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧