已知内存地址,如何取得此地之下的内容(在delphi中)(50分)

  • 主题发起人 主题发起人 wqxsdly
  • 开始时间 开始时间
W

wqxsdly

Unregistered / Unconfirmed
GUEST, unregistred user!
原来在dos系统下 c 语言中有如下语句:
ptr=(char far*)0xf000fff5;
sprintf(strsn,"%.8s",ptr);
意思是取得 f000fff5 地址下的8字节字符串内容,
在delphil里如何实现这个功能?
 
密码关注。
 
PChar($f000fff5)
 
ShowMessage( PChar($f000fff5) )
 
怎么没人回答呀,这个问题是不是问的很愚蠢?在delphi中根本就不允许这样做?
请高手指点迷津!谢谢,谢谢!
 
ShowMessage( PChar($f000fff5) ) 啊
 
to pipi
谢谢你的回答,但你的答案不行呀,出现错误:
access violation...read of address f000fff5

看样子不能直接访问
 
当然了,f000fff5你是怎么得来的,当然要合法的地址才能访问啊,你用c的话也一样啊
 
合法的地址才能这样访问,c也一样
 
回pipi:
在c下(dos)完全可以,我原来的一个程序就是这样做的
 
dos和win32不同
dos是实模式的
win32是32位虚地址的
 
回 pipi:
谢谢你,你说得对!
这个问题还有别的办法解决吗?内嵌汇编代码可以吗
 
没办法,dos和win32完全不同,谁也不能任意访问
我想知道你访问这个地址有什么目的,看有什么其他解决办法
 
to Pipi
此内存地址下存放的是一个类似于主板序列号的内容,每台微机都不一样。
我原来在dos下取出此内容加密用的
 
大师们能否再给点解决此问题的思路?
 
It's so easy!:))
别忘了给我加分!!!!呵呵
function GetBiosDate1: String;
var
Buffer : Array[0..8] Of Char;
N : DWORD;
begin
ReadProcessMemory(GetCurrentProcess,
Ptr($FFFF5),
@Buffer,
8,
N);
Buffer[8] := #0;
result := StrPas(Buffer)
end;

function GetBiosDate2: String;
begin
result := string(pchar(ptr($FFFF5)));
end;


{Only for Win 95/98/ME)






 
to duducat:
先谢谢你!我测试一下看看。
另外, 为什么只能在win9x下可以?
你写的读取地址FFFF5,和我要求的 F000FFF5指的是同一地址内容吗

 
结束此问题,非常感谢你们!!!
 
后退
顶部