如何读取自身程序指定位置的十六进制格式的内容?(100分)

  • 主题发起人 主题发起人 jjyy5578
  • 开始时间 开始时间
J

jjyy5578

Unregistered / Unconfirmed
GUEST, unregistred user!
如何读取自身程序指定位置的十六进格式的内容?比如读取 23EC0位置的十六进制格式的内容是否为"4D" 23EC1 是否为"5A"

曾经在盟动力上看过这样的代码 代码很短 就几行 可惜当时没注意也没保存 现在想要了却找不到 哎~~
还是请侠客帮忙吧~ 请贴代码 谢谢!
 
ParamStr(0) 就是自身程序的完整路径名. 然后把这个文件以只读方式作为byte类文件打开,指针移动到你想要的位置即可.最多10行代码
 
GetModuleHandle(nil)得到的handle就是程序在内存里的基地址,用这个handle就可以读取程序的十六进制格式的内容
 
function aa: boolean;
var
ff: tmemorystream;
begin
ff:= tmemorystream.create;
ff.loadfromfile(paramstr(0));

if pchar(ff.memory)[$23ec0] = #$5a then result:= true
else result:= false;

ff.free;
end;
 
白河愁,的方法的确好用 但是用到Classes 程序体积大了一些 还有更好的方法吗?
 
function Rd(path: string;form:integer):string;
var
f: file of byte;
Header:char;
a:pchar;
begin
FileMode := 0;
AssignFile(f, path);
reset(f);
Seek(f,form);
BlockRead(f,Header, 1);
Close(f);
a :=pchar(strtohex(Header));
Result := a;
end;

以前写的劲舞窗口补丁 看看用的着不
 
to sadnui
这个不会用哦
 
Rd(程序路径,读取的位置'$23EC0')
function Rd(path: string;form:integer):string;
返回16进制的字符 每次读取1字节 如果有需要可以自己改 BlockRead(f,Header, 1);

变量写的不清楚
 
a :=pchar(strtohex(Header));
到这里就编译不了 还有个问题就是怎样读自身呢?
 
=^0^=,给你最高效的:
function ReadFlag: Boolean;
const
defFlag: array[0..1] of Byte = (
$4D, $5A
);
defPosition: Integer = $23EC0;
var
stream: TFileStream;
S: string;
nSize: Integer;
begin
Result := False;
stream := TFileStream.Create(GetModuleName(0), fmOpenRead or fmShareDenyWrite);
with stream do
try
nSize := Length(defFlag);
SetLength(S, nSize);
Position := defPosition;
if Read(PChar(S)^, nSize) <> nSize then
Exit;
Result := CompareMem(PChar(S), @defFlag, nSize);
finally
Free;
end;
end;
 
LSUPER, 你好
得到指定位置的字符 如何触发事件呢?
例如
如果 $23EC0 位置的字符是 '4D' $23EC1 位置的字符是 '5A' 则showmessage();
我并不是懒 而是刚学D 什么都不懂 谢谢你
 
我看恐怕不是不懒了。。。。
 
那里用的程序呀
 
reset(filename,1)reset打开文件并且设定读取长度为1字节,然后用seek函数定位文件,blockread读取一个字节,注意seek定位要是10进制的,blockread读取的是byte类型也是十进制的,注意进制转换就行
 
to JamesBond_L, 很明显你不相信我 无语....
 
LSUPER,大侠能帮忙解释的详细一些吗 我是新手
 
很明显看起来你完全不懂,那不如直接求程序算了。
 
白大侠 你提供的代码我会用了 谢谢你啊
开个贴把分给你 谢谢
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3591189
 
算了 这个贴也结了吧 谢谢大家
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
后退
顶部