Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

Как подсчитать CRC   Найти похожие ветки 

 
Kotka   (2002-12-27 00:23) [0]

Алгоритм CRC у меня есть, но вот с использованием проблемы:
надо как-то загрузить функцию в память. А как загрузить не имею ни малейшего понятия.


 
ION T   (2002-12-27 00:40) [1]

а что, именно функцию надо в память загрузить? Так винда сама туда загрузит при первом обращении к содержащей её странице памяти.....


 
Rouse_   (2002-12-27 01:13) [2]

Видимо идет речь о библиотеке содержащую функцию.
Если так то LoadLibrary

В противном случае вопрос поставлен неверно, придется отослать вот сюда http://delphi.mastak.ru/vopros/index.html

Желаю успехов


 
Модж   (2002-12-27 01:49) [3]

Погадаем ;)

А мне вот кажется, что все, что необходимо знать, дабы подсчитать контольную сумму некоторой процедуры, это знать адреса ее начала и конца.
Вот ЭТО можно сделать примерно так:


procedure X (a: word);
asm
push bx
mov bx,a
pop bx
end;

procedure TForm1.Button1Click(Sender: TObject);
var a,a1,a2: DWORD;
begin
x(1);
a := DWORD(@TForm1.Button1Click)-DWORD(@X);
ShowMessage (Inttostr(a));
end;


Объясню. Выясняем длину процедуры X в памяти.
ОЧЕНЬ ВАЖНО.Данный пример ПРАВИЛЬНО определит размер (8 байт). НО.
Так как все дело будет компилятором выравниваться по 4-х битной границе, то нашу конкретную процедуру следует просмотреть под отладчиком и заранее узнать ее размер. Если он не будет кратен 4-м, то дополнить ее нужным количеством NOP, иначе размер будет показан равным ближайшему большему числу, кратному 4-м. Вот так.

ВПРОЧЕМ, если заранее зашить в программу конкретный размер процедуры узнаваемый под отладчиком или хоть бы hiew, то зачем тогда вообще извращаться?

Погадаем ;)


 
Kotka   (2002-12-27 02:05) [4]

Модж

Почти угадал
Мне надо а) получить указатель на загруженную виндой определенную функцию
б) получить ее размер
в пред примере я не понял, какую функцию ты мерил, если х, то зачем нужна строка @TForm1.Button1Click


 
Kotka   (2002-12-27 16:08) [5]

Yo


 
Sha   (2002-12-27 20:37) [6]

Задача.
Определить длину поезда, зная положение головного вагона :)


 
Kotka   (2002-12-27 22:53) [7]

Почему на этом форуме знающий любят издеваться над чайниками и при этом нихрена не помогают!!!


 
Rouse_   (2002-12-27 22:57) [8]

McSimm (18.06.02 09:45)

const
CRC32_Table: array[0..255] of LongWord =
($00000000,$77073096,$EE0E612C,$990951BA,$076DC419,$706AF48F,$E963A535,$9E6495A3,
$0EDB8832,$79DCB8A4,$E0D5E91E,$97D2D988,$09B64C2B,$7EB17CBD,$E7B82D07,$90BF1D91,
$1DB71064,$6AB020F2,$F3B97148,$84BE41DE,$1ADAD47D,$6DDDE4EB,$F4D4B551,$83D385C7,
$136C9856,$646BA8C0,$FD62F97A,$8A65C9EC,$14015C4F,$63066CD9,$FA0F3D63,$8D080DF5,
$3B6E20C8,$4C69105E,$D56041E4,$A2677172,$3C03E4D1,$4B04D447,$D20D85FD,$A50AB56B,
$35B5A8FA,$42B2986C,$DBBBC9D6,$ACBCF940,$32D86CE3,$45DF5C75,$DCD60DCF,$ABD13D59,
$26D930AC,$51DE003A,$C8D75180,$BFD06116,$21B4F4B5,$56B3C423,$CFBA9599,$B8BDA50F,
$2802B89E,$5F058808,$C60CD9B2,$B10BE924,$2F6F7C87,$58684C11,$C1611DAB,$B6662D3D,
$76DC4190,$01DB7106,$98D220BC,$EFD5102A,$71B18589,$06B6B51F,$9FBFE4A5,$E8B8D433,
$7807C9A2,$0F00F934,$9609A88E,$E10E9818,$7F6A0DBB,$086D3D2D,$91646C97,$E6635C01,
$6B6B51F4,$1C6C6162,$856530D8,$F262004E,$6C0695ED,$1B01A57B,$8208F4C1,$F50FC457,
$65B0D9C6,$12B7E950,$8BBEB8EA,$FCB9887C,$62DD1DDF,$15DA2D49,$8CD37CF3,$FBD44C65,
$4DB26158,$3AB551CE,$A3BC0074,$D4BB30E2,$4ADFA541,$3DD895D7,$A4D1C46D,$D3D6F4FB,
$4369E96A,$346ED9FC,$AD678846,$DA60B8D0,$44042D73,$33031DE5,$AA0A4C5F,$DD0D7CC9,
$5005713C,$270241AA,$BE0B1010,$C90C2086,$5768B525,$206F85B3,$B966D409,$CE61E49F,
$5EDEF90E,$29D9C998,$B0D09822,$C7D7A8B4,$59B33D17,$2EB40D81,$B7BD5C3B,$C0BA6CAD,
$EDB88320,$9ABFB3B6,$03B6E20C,$74B1D29A,$EAD54739,$9DD277AF,$04DB2615,$73DC1683,
$E3630B12,$94643B84,$0D6D6A3E,$7A6A5AA8,$E40ECF0B,$9309FF9D,$0A00AE27,$7D079EB1,
$F00F9344,$8708A3D2,$1E01F268,$6906C2FE,$F762575D,$806567CB,$196C3671,$6E6B06E7,
$FED41B76,$89D32BE0,$10DA7A5A,$67DD4ACC,$F9B9DF6F,$8EBEEFF9,$17B7BE43,$60B08ED5,
$D6D6A3E8,$A1D1937E,$38D8C2C4,$4FDFF252,$D1BB67F1,$A6BC5767,$3FB506DD,$48B2364B,
$D80D2BDA,$AF0A1B4C,$36034AF6,$41047A60,$DF60EFC3,$A867DF55,$316E8EEF,$4669BE79,
$CB61B38C,$BC66831A,$256FD2A0,$5268E236,$CC0C7795,$BB0B4703,$220216B9,$5505262F,
$C5BA3BBE,$B2BD0B28,$2BB45A92,$5CB36A04,$C2D7FFA7,$B5D0CF31,$2CD99E8B,$5BDEAE1D,
$9B64C2B0,$EC63F226,$756AA39C,$026D930A,$9C0906A9,$EB0E363F,$72076785,$05005713,
$95BF4A82,$E2B87A14,$7BB12BAE,$0CB61B38,$92D28E9B,$E5D5BE0D,$7CDCEFB7,$0BDBDF21,
$86D3D2D4,$F1D4E242,$68DDB3F8,$1FDA836E,$81BE16CD,$F6B9265B,$6FB077E1,$18B74777,
$88085AE6,$FF0F6A70,$66063BCA,$11010B5C,$8F659EFF,$F862AE69,$616BFFD3,$166CCF45,
$A00AE278,$D70DD2EE,$4E048354,$3903B3C2,$A7672661,$D06016F7,$4969474D,$3E6E77DB,
$AED16A4A,$D9D65ADC,$40DF0B66,$37D83BF0,$A9BCAE53,$DEBB9EC5,$47B2CF7F,$30B5FFE9,
$BDBDF21C,$CABAC28A,$53B39330,$24B4A3A6,$BAD03605,$CDD70693,$54DE5729,$23D967BF,
$B3667A2E,$C4614AB8,$5D681B02,$2A6F2B94,$B40BBE37,$C30C8EA1,$5A05DF1B,$2D02EF8D);

function Q_CRC32(P: Pointer; L: Cardinal): LongWord;
asm
PUSH EBX
MOV EBX,EAX
MOV EAX,$FFFFFFFF
PUSH ESI
TEST EDX,EDX
JE @@qt
@@lp: MOVZX ESI,BYTE PTR [EBX]
MOVZX ECX,AL
XOR ECX,ESI
SHR EAX,8
XOR EAX,DWORD PTR [ECX*4+CRC32_Table]
INC EBX
DEC EDX
JNE @@lp
@@qt: POP ESI
NOT EAX
POP EBX
end;

Желаю успехов


 
Jeer   (2002-12-27 23:53) [9]

Kotka © (27.12.02 22:53)
Почему на этом форуме знающий любят издеваться над чайниками и при этом нихрена не помогают!!!


Потому что Вам надо хотя бы задуматься над своими вопросами (их формулировкой), не получив ожидаемого ответа:)


 
Rouse_   (2002-12-28 00:41) [10]

> Jeer © (27.12.02 23:53)
Мной была дана функция которую реально запрашивал автор.
Кто издевается?
А над формулировкой вопросов всетаки думать надо.
Как Вам такая постановка вопроса "И скока это будет продолжаться..?"

Желаю успехов


 
Jeer   (2002-12-28 00:59) [11]

Rouse_ © (28.12.02 00:41)

Или я о чем или торможу уже.
Это автор вопроса спросил почему над ним издеваются:)

И это ему я ответил.
А как вычислять CRC - он ведь знает:)


 
Моджахед   (2003-01-03 03:05) [12]

>
> Мне надо а) получить указатель на загруженную виндой
> определенную функцию
> б) получить ее размер
> в пред примере я не понял, какую функцию ты мерил, если х, то ? > зачем нужна строка @TForm1.Button1Click

Отвечаю.
а) Указатель функции X я показал как получить
б)Функция func1 занимает в памяти байт столько:
@func2-@func1,
если func2 в тексте программы описывается после функции func1

а функция TForm1.Button1Click и есть та самая func2.
Но внимательно прочти мой предыдущий пост по поводу кратности 4-м.

Сорри, что долго не постил. Был занят (Везет же людям - На Н.Г. отдыхают).



 
Sha   (2003-01-03 10:16) [13]

2 Kotka © (27.12.02 16:08), Kotka © (27.12.02 22:53)

> в пред примере я не понял, какую функцию ты мерил, если х, то зачем нужна строка @TForm1.Button1Click
> Почему на этом форуме знающий любят издеваться над чайниками и при этом нихрена не помогают!!!

В своем ответе Sha © (27.12.02 20:37)
> Определить длину поезда, зная положение головного вагона :)
я не издевался, а намекал, что для определения длины процедуры необходимо знать положение ее начала и конца. Намек понят не был :(

2 Rouse_ © (27.12.02 22:57)
Я давно люблю считать CRC. Мой способ чуть быстрее:

function GetNewCRC(OldCRC: cardinal; StPtr: pointer; StLen: integer): cardinal;
asm
test edx,edx;
jz @ret;
neg ecx;
jz @ret;
sub edx,ecx; // Address after last element

push ebx;
mov ebx,0; // Set ebx=0 & align @next to paragraph
@next:
mov bl,al;
xor bl,byte [edx+ecx];
shr eax,8;
xor eax,cardinal [CRCtable+ebx*4];
inc ecx;
jnz @next;
pop ebx;

@ret:
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.007 c
7-37413
kaif
2002-11-03 14:32
2003.01.13
работа с потоком ввода


1-37068
Gayrus
2003-01-01 16:43
2003.01.13
String в TStream


3-36913
tomat
2002-12-17 05:52
2003.01.13
InterBase, Trigger


1-37187
ferrik
2002-12-30 14:32
2003.01.13
Индексы


1-37001
Armageddon
2002-12-27 17:55
2003.01.13
Создание динамического массива





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