请教个问题,delphi搜索并替换内存中的字符串做过吗? 比如,已运行的一个exe文件叫 test.exe,它的内存里内在如 aaaa 这个字符串,想把它在内存中生成的这个字符串aaaa都替换成另一个字符串,如 bbbb如果实现啊?拜谢了
解决方案 »
- 可用分没了,怎么赚?
- 加分!!!一直苦闷的问题:请问在delphi中,怎样才能怎样才能排出名次?(只求排出名次,不用按升降序排列)
- [Fatal Error] Required package 'dxtrmdD6' not found什么意思?
- TForm的Create都参数重载问题
- 怎么手动加载TtreeView数据?
- 关于读取问题,望大家给点意见!
- OnFetchProgress事件在什么时候触发啊?
- 当图片比image大的时候,如何将图片按比例全部显示在image框中?
- 关于DELPHI6的一个大问题,可能是BUG
- 问一下,指针到底有什么用?链表到底是干什么用的,请说的实际一些?
- delphi的idudpserver与TIdSocketHandle的关系?
- 需要做一个3层的系统 客户端超10万 使用什么架构比较合理 请有经验者讨论下
var
Size,s,l:Integer;
begin
Result:=False;
Size:=lstrlen(szData);
l:=1;
for s:=1 to Size do
begin
if lpData ^ = szData^ then Inc(l)
else
Break;
Inc(lpData);
Inc(szData);
end;
if l = Size then Result:=True;
Dec(szData,l);
end;function ReplaceData(lpData,szData:PChar):Integer;
var
Size,l:Integer;
begin
Result:=0;
if CheckData(lpData,szData) then
begin
Size:=lstrlen(szData);
for l:=1 to Size do
begin
lpData^:=szData^;
Inc(lpData);
Inc(szData);
end;
Result:=Size;
end;
end;procedure ReplaceMem(lpData:Pointer;Size:Integer;szData:Pointer);
var
l:Integer;
begin
while Size > 1 do
begin
if PChar(lpData)^ = PChar(szData)^ then
begin
l:=ReplaceData(lpData,szData);
end
else
Inc(PChar(lpData),l);
end;
end;随手写的,没调试,应该可以
调用ReplaceMem就OK。
参数1:要被替换内存指针
参数2:要被替换的内存总大小
参数3:要替换的数据内存指针
test.exe进程的内存里所有 aaaa 字符串 替换成 bbbb 怎么实现呢?还得找到这个进程,再读取其内存,查找其中所有的 aaaa,再一一替换
查找,CE那个算是不错的算法,再简单的很难写出来了
Delphi内存搜索与读写
http://www.unpack.cn/thread-38342-1-1.html
.................
stContext:=keyADO.CreateBlobStream(keyADO.FieldByName('Content'),bmRead);
stContext.Position:=0;
SetLength(S,stContext.size);
stContext.Read(S[0],stContext.size);
if Pos(keystr,Widestring(S))>0 then
........................ keyADO.edit;
FreeAndNil(stContext);//释放流以备下一循环使用
SetLength(S,0);S:=nil;