问个关与DELPHI的文件操作的问题 ( 积分: 100 )

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

wmg1234

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样在某个EXE文件中搜索16进制的字符串,并返回该16进制的字符串的偏移<br>地址(例如:搜索16进制的字符串‘FCDB3FH’在ABC.EXE中的地址)<br>请高手赐教
 
EXE文件小的话,直接读进&nbsp;String中!Pos即可!<br><br>EXE文件大的话,用文件分块读(每块大约128K),<br>把每块单成Sting又可以POS了!<br>Offset:=(n-1)*128*1024+Pos(字符串,MyString);<br>N:=当前块数!<br>呵呵!
 
帮你顶,接个分
 
为什么要128*1024呢?这样乘出来的结果是什么?<br>如果直接读进String中,那不是ASCii码?<br>不是很明白DELPHI是怎么处理的
 
wql的做法有两个问题:<br>-------------------------------------------<br>1.&nbsp;读入到String中用pos的想法很天真,&nbsp;但不现实,&nbsp;除非先转换...<br>2.&nbsp;分块搜索,&nbsp;如果你要查的内容刚好跨块怎么办?&nbsp;//当然还是可以处理的;<br><br>其实楼主的要求还是很简单可以实现的:&nbsp;<br>--------------------------------------------------------------<br>1.&nbsp;先将目标变换成字节数组,例如:&nbsp;b[1]=$fc;&nbsp;b[2]=$db;&nbsp;b[3]=$3f&nbsp;...<br>2.&nbsp;使用TFileStream(也可以用TMemoryStream加快速度)访问文件,&nbsp;逐个字节比较就可以了...
 
唉!风清扬说:&nbsp;那招北虹贯日一定要用剑吗!<br><br>搜索16进制的字符串‘00FCDB3FH’不就是:<br>Word对齐编译:<br>&nbsp;&nbsp;&nbsp;_Str:=Chr($FC)+Chr($00)+chr($3F)+Chr($DB);<br><br>为何128*1024呢?<br>&nbsp;&nbsp;保证处理速度快啊!
 
唉,唉,唉...误认子弟啊,&nbsp;你还得将EXE文件转换成字符串文件...<br>不过结合论坛相关的帖子,觉得楼主的问题好像不存在多大意义.
 
令狐冲说,我是来学习的
 
后退
顶部