如何将一个DCU文件的里面几个字节更改?
即是我知道的十六进制代码为:AA 78 DD BB CC
我想将它改为:AA 65 DD 12 CC.
请给代码!
即是我知道的十六进制代码为:AA 78 DD BB CC
我想将它改为:AA 65 DD 12 CC.
请给代码!
解决方案 »
- delphi 动态验证码提示“invalid gif signature”
- 服装店里的扫描枪扫描出来的数据,怎么导入自己做的系统里啊?
- 有关ListView右键菜单的问题;
- 提问:为什么有的帖子回复没有次数限制,有的帖子却有哪?
- 有研究过 ListBox 自绘可变 item 高度的方法的,请帮忙看看。
- 用wise软件打包的问题?
- 求这样一种treeview控件,当子节点被部分选择时父节点是一种状态(比如显示灰色),当子节点被完全选择时,父节点被打勾,子节点没有被选
- 如何能够做到系统自动升级
- 菜鸟问题:请问各位高手,一个类似98的计算器程序怎么做?能说一下思路吗|??
- 请问用FastReport怎么控制POS机的打印,详细内容请进
- 关于clientDataSet和ADODataSet的区别
- 为什么没反应???
好像很多软件都可以做到这点啊!
procedure EditFile(FileName: string; DestBuffer,
EditBuffer: Pointer; Count: Integer);
var
Step, RetVal, FileSize: Integer;
Buffer: Pointer;
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenReadWrite);
try
GetMem(Buffer, Count);
try
Step := 0;
Stream.Position := Step;
FileSize := Stream.Size - Count;
while Step <= FileSize do
begin
Stream.ReadBuffer(Buffer^, Count);
if CompareMem(Pointer(Buffer), DestBuffer, Count) = 0 then
begin
Stream.Position := Step;
Stream.WriteBuffer(EditBuffer^, Count);
break;
end;
Inc(Step);
Stream.Position := Step;
end;
finally
Free;
end;
finally
Stream.Free;
end;
end;procedure ButtonClick;
var
Dest, Edit: array [0..5] of Byte;
begin
Dest[0] := $DA;
Dest[1] := $AB;
...
Edit[0] := $dd;
Edit[1] := $AA;
EditFile('c:\a.dcu', Dest, Edit);
end;大概是这样吧,没调试。
try finally
FreeMem(Buffer);
//不是Free
end;
while Step <= FileSize do
改
while Step > FileSize do不看了,再看又看到错的我也又要回,自已改吧
你自已定义的嘛while Step <= FileSize do那while没有错,我现在头晕了,不清楚了
EditBuffer: Pointer; Count: Integer):Boolean;
var
Step, RetVal, FileSize: Integer;
Buffer: Pointer;
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenReadWrite);
result := False;
try
GetMem(Buffer, Count);
try
Step := 0;
Stream.Position := Step;
FileSize := Stream.Size - Count;
while Step <= FileSize do
begin
Stream.ReadBuffer(Buffer^, Count);
if CompareMem(Pointer(Buffer), DestBuffer, Count) then
begin
Stream.Position := Step;
Stream.WriteBuffer(EditBuffer^, Count);
break;
Result := True;
end;
Inc(Step);
Stream.Position := Step;
Result := False;
end;
finally
FreeMem(Buffer);
end;
finally
Stream.Free; end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Dest, Edit: array [0..3] of Char;
Path :String;
begin
Path := ExtractFilePath(Application.ExeName);
Dest[0] := #$75;
Dest[1] := #$18;
Dest[2] := #$6A;
Dest[3] := #$EF;
// ...
Edit[0] := #$EB;
Edit[1] := #$18;
Edit[2] := #$6A;
Edit[3] := #$EF;
if EditFile(Path+'a.dcu', Pointer(Dest), Pointer(Edit),Sizeof(Dest)) then
ShowMessage('Good');end;
procedure EditFile(FileName: string; DestBuffer,
EditBuffer: Pointer; Count: Integer);
var
Step, RetVal, FileSize: Integer;
Buffer: Pointer;
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenReadWrite);
try
GetMem(Buffer, Count);
try
Step := 0;
Stream.Position := Step;
FileSize := Stream.Size - Count;
while Step <= FileSize do
begin
Stream.ReadBuffer(Buffer^, Count);
if CompareMem(Pointer(Buffer), DestBuffer, Count) = 0 then
begin
Stream.Position := Step;
Stream.WriteBuffer(EditBuffer^, Count);
break;
end;
Inc(Step);
Stream.Position := Step;
end;
finally
Free;
end;
finally
Stream.Free;
end;
end;procedure ButtonClick;
var
Dest, Edit: array [0..5] of Byte;
begin
Dest[0] := $DA;
Dest[1] := $AB;
...
Edit[0] := $dd;
Edit[1] := $AA;
EditFile('c:\a.dcu', Dest, Edit);
end;
EditBuffer: Pointer; Count: Integer): Boolean;
var
Step, FileSize: Integer;
Buffer: Pointer;
Stream: TFileStream;
begin
Result := False;
Stream := TFileStream.Create(FileName, fmOpenReadWrite);
try
GetMem(Buffer, Count);
try
Step := 0;
Stream.Position := Step;
FileSize := Stream.Size - Count;
while Step <= FileSize do
begin
Stream.ReadBuffer(Buffer^, Count);
if CompareMem(Pointer(Buffer), DestBuffer, Count) then
begin
Stream.Position := Step;
Stream.WriteBuffer(EditBuffer^, Count);
Result := True;
break;
end;
Inc(Step);
Stream.Position := Step;
end;
finally
FreeMem(Buffer);
end;
finally
Stream.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
Dest, Edit: array[0..3] of Byte;
begin
Dest[0] := $3C;
Dest[1] := $70;
Dest[2] := $0B;
Dest[3] := $53;
// ...
Edit[0] := $32;
Edit[1] := $2D;
Edit[2] := $00;
Edit[3] := $72;
if EditFile('c:\temp\a.dcu', @Dest[0], @Edit[0], Sizeof(Dest)) then
ShowMessage('Good')
else
ShowMessage(':(((');
end;这是文件流方式,如果文件不大,可以用TMemoryStream,比较速度会快点,用它的Memory指针,也不用ReadBuffer,直接CompareMem(Pointer(Integer(Memory) + Step), DestBuffer, Count),做循环就得了,代码嘛就自已写了。