unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
btn1: TButton;
lbl1: TLabel;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function HexToString(S: ansistring): ansistring;
var
i: integer;
Begin
Result := '';
for i := 1 to Length(S) do
begin
if ((i mod 2)=1) then
begin
Result:=Result + ansistring(Chr(StrToInt('0x' + Copy(S, i, 2)))); end;
end;
end;
function HexScan(t:tstream; s:ansistring):integer;
var
i,j: integer;
p: pansichar;
begin
Result:=-1;
getmem(p, t.size); // ---- 分配内存
t.readbuffer(p^, t.size ); // ---- 读
for i:=0 to t.size -1 do
begin
for j:=1 to length(s) do
begin
if p[i+j]<>s[j] then // ---- 有一个不同即退出
begin
break;
end;
end;
if j>length(s) then // ---- 依据
begin
Result:=i+1;
break;
end;
end;
freemem(p);
t.seek(0, soBeginning); // ---- 返回文件头
end;procedure TForm1.btn1Click(Sender: TObject);
var
MyFile: TFileStream;
Code: ansistring;
mm: ansistring;
Addr: Integer;
begin
MyFile:=TFileStream.Create('E:\1.exe', fmShareDenyNone);
Code:='83C40484C07502B30184DB74598D9538F7FFFF5268E8030000';//确定这个exe中有这个特征码
Addr:=HexScan(MyFile, HexToString(Code));
mm:=HexToString(Code);
if Addr<>0 then
begin
form1.lbl1.caption:=IntToStr(Addr);//这里的Addr没有返回地址 返回-1
end;
end;end.
是在2010下的 ,原先的代码是delphi7下的,可以找到地址没问题
但是2010下无法找到,原先的string都转ansistring了,为什么还是不对呢?特征码
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
btn1: TButton;
lbl1: TLabel;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function HexToString(S: ansistring): ansistring;
var
i: integer;
Begin
Result := '';
for i := 1 to Length(S) do
begin
if ((i mod 2)=1) then
begin
Result:=Result + ansistring(Chr(StrToInt('0x' + Copy(S, i, 2)))); end;
end;
end;
function HexScan(t:tstream; s:ansistring):integer;
var
i,j: integer;
p: pansichar;
begin
Result:=-1;
getmem(p, t.size); // ---- 分配内存
t.readbuffer(p^, t.size ); // ---- 读
for i:=0 to t.size -1 do
begin
for j:=1 to length(s) do
begin
if p[i+j]<>s[j] then // ---- 有一个不同即退出
begin
break;
end;
end;
if j>length(s) then // ---- 依据
begin
Result:=i+1;
break;
end;
end;
freemem(p);
t.seek(0, soBeginning); // ---- 返回文件头
end;procedure TForm1.btn1Click(Sender: TObject);
var
MyFile: TFileStream;
Code: ansistring;
mm: ansistring;
Addr: Integer;
begin
MyFile:=TFileStream.Create('E:\1.exe', fmShareDenyNone);
Code:='83C40484C07502B30184DB74598D9538F7FFFF5268E8030000';//确定这个exe中有这个特征码
Addr:=HexScan(MyFile, HexToString(Code));
mm:=HexToString(Code);
if Addr<>0 then
begin
form1.lbl1.caption:=IntToStr(Addr);//这里的Addr没有返回地址 返回-1
end;
end;end.
是在2010下的 ,原先的代码是delphi7下的,可以找到地址没问题
但是2010下无法找到,原先的string都转ansistring了,为什么还是不对呢?特征码
解决方案 »
- <Delphi COM深入编程>需要的朋友自取吧
- 文件管理的思路
- 老大帮忙:初学Delphi 请给出ADO连接数据库的字符串代码?
- 请教达人解救!!不懂
- 我用了一段关于建树的代码,可是老是会出现错误,有谁能帮我解释一下啊??
- 始终没找到access中较全面的函数说明文挡(sql语句中可用的函数)
- 为纪念本人认识电脑5周年,我自己写的一点东西!
- sql可以用别名排序吗?我可以给100分,也可以再给100分.很急,拜托!!!!
- 关于SQL 2000
- 编数据库程序,如何截获用户名/密码输入的对话框?
- 想在DBGrid展示的查询结果加一列Checkbox用于让用户“选中”或“取消选中”,怎么样才能实现?
- 什么样的人适合做IT领导?
begin
if p[i+j]<>s[j] then
begin
break;
end;
end;
if j>length(s) then//这里j的值是不确定的,除非把上面的for循环换成while