Форум: "Основная";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
ВнизКак получить контрольную сумму (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c