Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-85674
NetBreaker666
2002-09-01 19:38
2002.09.26
Было ли вооще рандеву в Питере ???


6-85630
Игор
2002-07-26 05:04
2002.09.26
Как заполнить поля формы в открытом Internet Explorer


1-85500
id_privin
2002-09-13 12:39
2002.09.26
Как унаследовать форму из одного пакета в другом


1-85509
Серг
2002-09-17 10:20
2002.09.26
Console App


14-85648
Malder
2002-08-27 19:17
2002.09.26
Вывод отчетов - 2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский