Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.26;
Скачать: CL | DM;

Вниз

Как получить контрольную сумму (CRC) функции?   Найти похожие ветки 

 
deleon ©   (2002-09-12 08:29) [0]

Точнее как получить понятно...неясно как определить размер памяти, занимаемый функцией? Буду благодарен за любые идеи!


 
MBo ©   (2002-09-12 08:46) [1]

В памяти они располагаются последовательно, полагаю, всегда. Демонстрация:

function a:integer;
begin
result:=2;
end;

function b:integer;
var i:integer;
begin
i:=gettickcount;
result:=i div 1000;
end;

procedure c(var x:integer);
begin
x:=a+b;
end;


procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
c(x);

//контроль адресов
label1.caption:=IntToHex(Cardinal(@a),8)+" "+
IntToHex(Cardinal(@b),8)+" "+IntToHex(Cardinal(@c),8);
//размер
label2.caption:="A length: "+IntToStr(Cardinal(@b)-Cardinal(@a))+" "+
"B length: "+IntToStr(Cardinal(@c)-Cardinal(@b));
end;


 
Ученик ©   (2002-09-12 09:03) [2]

Доберутся и до функции проверяющей CRC :-)


 
deleon ©   (2002-09-12 09:10) [3]

2[MBo]спасибо! то что нужно!
2[Ученик]Пусть добираются, но жизнь им все-равно будет усложнена :)


 
deleon ©   (2002-09-13 08:24) [4]

Возникла проблема! Т.к. процедуры и фунции при запуске приложения почти всегда располагаются не в одних и тех же адресных пространствах их CRC постоянно различается! Каким образом еще можно проверить целостность тела функции (процедуры)?


 
Viktor Kushnir ©   (2002-09-13 09:45) [5]

А ты смещения посчитай.


 
Ketmar ©   (2002-09-13 10:16) [6]

прочесть из тела PE fixup"ы и учитывать...

Satanas Nobiscum! 13-Sep-XXXVII A.S.


 
Anatoly Podgoretsky ©   (2002-09-13 10:22) [7]

deleon © (13.09.02 08:24)
Умная мысль, не считай в памяти, а считай образ на диске, он не должен меняться


 
NeyroSpace ©   (2002-09-13 10:29) [8]

А красиво и не получается... :-(

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type TFunctor = function(a,b:integer):integer;
type Tprocedure = procedure(x,y:integer);
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Func:TFunctor;
Proc:TProcedure;
i:integer;

implementation

{$R *.DFM}

function add(x,y:integer):integer;
begin
result := x + y;
end;

procedure add2(x,y:integer);
begin
x := x + y;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
func := add;
proc := add2;
form1.Caption := inttostr(sizeof(proc));
end;

end.


 
deleon ©   (2002-09-13 10:46) [9]

SizeOf дает всегда 4 байта, оно и верно, это же указатель...
2[Anatoly Podgoretsky] а как считать образ на диске?



Страницы: 1 вся ветка

Текущий архив: 2002.09.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
3-85387
Kaginava
2002-09-05 08:33
2002.09.26
Округление числа средствами InterBase в поле типа Float


1-85512
ed_209
2002-09-10 11:57
2002.09.26
Jpeg & png size


4-85775
Dmitry Raduzhan
2002-08-13 14:21
2002.09.26
Список процессов


1-85602
Ag2002
2002-09-14 12:13
2002.09.26
TreeView


7-85715
Alex
2002-07-16 19:04
2002.09.26
Modem