Главная страница
    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.46 MB
Время: 0.007 c
7-85707
Cosinus
2002-07-15 15:27
2002.09.26
Подскажите, как из fat32 считать информацию о файле?


1-85469
sizmrebi
2002-09-16 12:43
2002.09.26
Effects:=strikeout


4-85768
Sergserg
2002-08-12 18:08
2002.09.26
CREATEPROCES


4-85764
IronMan
2002-08-10 18:18
2002.09.26
Интерфейс защищенного режима в Дельфи


1-85455
Vrach
2002-09-16 02:02
2002.09.26
Как откомпилить DLL -ку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский