Главная страница
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.012 c
1-85591
Talvin
2002-09-14 23:20
2002.09.26
Базы данных!


8-85616
Yaro
2002-01-13 04:29
2002.09.26
Fast draw from array


1-85503
race1
2002-09-17 09:18
2002.09.26
определение формата


14-85686
Игорь Шевченко
2002-08-28 12:23
2002.09.26
Встреча мастаков в Москве


14-85680
NetBreaker666
2002-09-01 23:29
2002.09.26
Зацените :