小编Som*_*ody的帖子

Delphi:如何从内存中完全删除String

Var
S1:String;
S2:String;
begin
   S1:='Sensitive Data';
   S2:=Crypt(S1,'encryption key');
   S1:='';
   FreeAndNil(S1);
end;
Run Code Online (Sandbox Code Playgroud)

现在,当我使用像"WinHex"这样的程序搜索我的进程内存时,我可以很容易地找到未加密的字符串!即使我试图创建新的表单来加密这个字符串然后卸载表单但它仍然存在

有没有办法彻底删除它

提前致谢

memory delphi string encryption

6
推荐指数
2
解决办法
1201
查看次数

重命名后如何获得应用程序名称?

在应用程序运行时更改了可执行文件的名称后,两者GetModuleFileNameGetModuleFileNameEx使用PID都将返回原始文件名。

如何获得新的文件名,甚至检测到更改?理想情况下,我宁愿不使用FindFirstChangeNotification

winapi

4
推荐指数
1
解决办法
696
查看次数

如何禁用控制台快速编辑模式

当我点击正在运行的控制台时,它会冻结应用程序,直到我完成选择,

我找到了如何使用“SetConsoleMode”在多种语言中禁用它,但找不到 Delphi 的代码

delphi console pascal console-application

3
推荐指数
1
解决办法
191
查看次数

德尔福:强制卸载注入模块

我使用此代码来确定是否已将特定模块注入到我的应用程序的进程中(我使用它来阻止某些数据包嗅探器软件)

 Var
 H:Cardinal;
 Begin
 H:= GetModuleHandle('WSock32.dll');
 if H >0 then FreeLibrary(H);
 end;
Run Code Online (Sandbox Code Playgroud)

问题是当我打电话给Freelibrary时它什么都不做!

我不想显示消息然后终止应用程序我只想静默卸载注入的模块

提前致谢

delphi module packet-sniffers libraries

2
推荐指数
1
解决办法
2472
查看次数

清除创建的对象内存

我正在使用WMI SMBios获取一些硬件信息

检查uSMBios.pas

我不想让用户看到内存中使用的序列号是什么,所以我试图清除它

我打电话的时候

SMBios:=TSMBios.Create;
//my code
SMBios.free;
Run Code Online (Sandbox Code Playgroud)

SMBios对象仍在许多位置的内存中 WinHex中

我试过这个代码 Destroy Event

    if Assigned(FRawSMBIOSData.SMBIOSTableData) then
    begin
      ZeroMemory(FRawSMBIOSData.SMBIOSTableData,FRawSMBIOSData.Length);
      FreeMem(FRawSMBIOSData.SMBIOSTableData);
    end;
Run Code Online (Sandbox Code Playgroud)

GetSystemFirmwareTable在SMBios中使用API代码很好,但在WMI中它删除了一些内存,但我仍然可以找到几个块

想知道为什么在调用object.free或freeandnil后未使用的内存未被释放

任何想法如何强制应用程序释放它?

delphi security wmi

1
推荐指数
1
解决办法
1171
查看次数

如何替换字符串中出现的有限次数

假设我有字符串"blabla[R]bla[R]blaaa[R]blabla[R]bla[R]bla"

常规replacingOccurrences替换所有出现的情况。我只想换3个。

newString = myString.replacingOccurrences(of: "[R]", with: "(X)")
Run Code Online (Sandbox Code Playgroud)

做出结果"blabla(X)bla(X)blaaa(X)blabla[R]bla[R]bla"

swift

0
推荐指数
1
解决办法
863
查看次数

德尔福:传输图像

Delphi 2010

我通过自定义TCP套接字控件传输图像使用UTF-8

客户端

var
TSS: TStringStream;
STR :String;
JPG:TJPEGImage;
BMP:TBitmap;
begin
Try
BMP.LoadFromFile('C:\1.bmp');

JPG.Assign(BMP);
JPG.CompressionQuality:=80;
JPG.Compress;

TSS:=TStringStream.Create;
JPG.SaveToStream(TSS);

STR:=TSS.DataString;

MyTCPSocket.SendString(STR);


finally
BMP.free;
JPG.free;
TSS.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)

服务器端

Var
TSS: TStringStream;

TSS:=TStringStream.Create;
TSS.WriteString(STR);
TSS.SaveToFile('C:\2.jpg');
Run Code Online (Sandbox Code Playgroud)

这段代码在同一台PC上运行很棒.

当我将图像发送到使用不同编码的其他PC接收图像但我在数据中看到许多错误字符"?????"时的问题

我认为当TStringStream将字节写入文件时,它无法将unicode字符转换为字节,因此它看起来像"?"

任何想法都非常感谢

delphi image stream transfer

-1
推荐指数
1
解决办法
2704
查看次数