Главная страница
    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
4-85769
S&G
2002-08-06 13:49
2002.09.26
как поместить текст в Edit, находящийся в окне чужой проги?


3-85351
pavit
2002-09-04 11:49
2002.09.26
Самостоятельное соединение с базой через ADOConnection


6-85624
Александр_
2002-07-22 11:08
2002.09.26
формат строки запроса IE


14-85700
NetBreaker666
2002-09-02 21:58
2002.09.26
А есть ли какие-нибудь официальные сертификаты для программеров.


1-85558
Ag2002
2002-09-13 17:34
2002.09.26
Количество





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