delphi 使用RtlComputeCrc32计算例程校验和

bzzcjhmw  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(211)

如何使用RtlComputeCrc32例程来计算例程的校验和/大小?我需要计算上面例程的校验和:

procedure Teste2;
begin
  MessageBox(0, 'Test', 'Info', 0);
end;

https://source.winehq.org/WineAPI/RtlComputeCrc32.html

DWORD RtlComputeCrc32
 (
  DWORD       dwInitial,
  const BYTE* pData,
  INT         iLen
 )

在delphi应该是
function RtlComputeCrc32(dwInitial : DWORD; const pData: TByteArrs; iLen: Integer): DWORD; stdcall; external 'ntdll.dll';
其中TByteArrs是

type
  TByteArrs = array of Byte;

我要求,以防止外部的人操纵的内存,所以防止他们黑它添加nops,jmp,或简单地修改程序的内存。

qnyhuwrf

qnyhuwrf1#

这是一个用于RtlComputeCrc 32的 Delphi 代码示例。它计算文件的CRC-32并显示在Windows控制台上。
`

program CRC32Calculation;

{$APPTYPE CONSOLE}

uses
    SysUtils, Windows;

function RtlComputeCrc32(dwInitial: DWORD; const pData: PByte; iLen: Integer): DWORD; stdcall;
    external 'ntdll.dll' name 'RtlComputeCrc32';

const
    InputFile = 'somefile.bin'; // Set the input file name here

var
    FileBytes: TBytes;
    Crc32: DWORD;
    Crc32String: string;
begin
   // Read the file as bytes
   FileBytes := TFile.ReadAllBytes(InputFile);

   // Calculate the CRC32 checksum using the Win32 API
   Crc32 := RtlComputeCrc32(0, @FileBytes[0], Length(FileBytes));

   // Convert the CRC32 value to hexadecimal string
   Crc32String := IntToHex(Crc32, 8);

   // Display the CRC32 checksum
   WriteLn('CRC32: 0x', Crc32String);   
end.

`

相关问题