tabelCRC16:array [0..$FF] of Word =
($0000,$C0C1,$C181,$0140,$C301,$03C0,$0280,$C241
,$C601,$06C0,$0780,$C741,$0500,$C5C1,$C481,$0440
,$CC01,$0CC0,$0D80,$CD41,$0F00,$CFC1,$CE81,$0E40
,$0A00,$CAC1,$CB81,$0B40,$C901,$09C0,$0880,$C841
,$D801,$18C0,$1980,$D941,$1B00,$DBC1,$DA81,$1A40
,$1E00,$DEC1,$DF81,$1F40,$DD01,$1DC0,$1C80,$DC41
,$1400,$D4C1,$D581,$1540,$D701,$17C0,$1680,$D641
,$D201,$12C0,$1380,$D341,$1100,$D1C1,$D081,$1040
,$F001,$30C0,$3180,$F141,$3300,$F3C1,$F281,$3240
,$3600,$F6C1,$F781,$3740,$F501,$35C0,$3480,$F441
,$3C00,$FCC1,$FD81,$3D40,$FF01,$3FC0,$3E80,$FE41
,$FA01,$3AC0,$3B80,$FB41,$3900,$F9C1,$F881,$3840
,$2800,$E8C1,$E981,$2940,$EB01,$2BC0,$2A80,$EA41
,$EE01,$2EC0,$2F80,$EF41,$2D00,$EDC1,$EC81,$2C40
,$E401,$24C0,$2580,$E541,$2700,$E7C1,$E681,$2640
,$2200,$E2C1,$E381,$2340,$E101,$21C0,$2080,$E041
,$A001,$60C0,$6180,$A141,$6300,$A3C1,$A281,$6240
,$6600,$A6C1,$A781,$6740,$A501,$65C0,$6480,$A441
,$6C00,$ACC1,$AD81,$6D40,$AF01,$6FC0,$6E80,$AE41
,$AA01,$6AC0,$6B80,$AB41,$6900,$A9C1,$A881,$6840
,$7800,$B8C1,$B981,$7940,$BB01,$7BC0,$7A80,$BA41
,$BE01,$7EC0,$7F80,$BF41,$7D00,$BDC1,$BC81,$7C40
,$B401,$74C0,$7580,$B541,$7700,$B7C1,$B681,$7640
,$7200,$B2C1,$B381,$7340,$B101,$71C0,$7080,$B041
,$5000,$90C1,$9181,$5140,$9301,$53C0,$5280,$9241
,$9601,$56C0,$5780,$9741,$5500,$95C1,$9481,$5440
,$9C01,$5CC0,$5D80,$9D41,$5F00,$9FC1,$9E81,$5E40
,$5A00,$9AC1,$9B81,$5B40,$9901,$59C0,$5880,$9841
,$8801,$48C0,$4980,$8941,$4B00,$8BC1,$8A81,$4A40
,$4E00,$8EC1,$8F81,$4F40,$8D01,$4DC0,$4C80,$8C41
,$4400,$84C1,$8581,$4540,$8701,$47C0,$4680,$8641
,$8201,$42C0,$4380,$8341,$4100,$81C1,$8081,$4040);
function GetCRC16(p:pointer;length:integer):Word;
var b1,b2:byte;
crc:Word;
var i:integer;
begin
CRC:=0;
for i:=0 to length-1 do
begin
CRC:= (CRC shr 8) xor TabelCRC16[byte(CRC) xor Byte(PChar(p))];
end;
CRC:=CRC xor $0;
GetCRC16:=CRC;
end;
Hex
byte1 dd D3D1h,0 =>undefined symbol
как можно решить эту проблемму.
Заранее спасибо.
byte1 dd 0D3D1h,0
Заранее спасибо.
У меня кое-что есть, только оставь свой адрес... (электронный, естественно : )
http://www.google.ru/search?hl=ru&q=portable+executable%2Cdocumentation&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=
P.S.: На васме был цикл статей Iczeliona по PE.
Немагу разобраться
//******************** Program Entry Point ********
:00401000 E802000000 call 00401007
:00401005 EBF9 jmp 00401000
* Referenced by a CALL at Address:
|:00401000
|
:00401007 6A01 push 00000001
* Reference To: user32.MessageBeep, Ord:019Ch
|
:00401009 E80C000000 Call 0040101A
:0040100E 68C8000000 push 000000C8
* Reference To: kernel32.Sleep, Ord:0260h
|
:00401013 E808000000 Call 00401020
:00401018 C3 ret
:00401019 CC int 03
* Referenced by a CALL at Address:
|:00401009
|
* Reference To: user32.MessageBeep, Ord:019Ch
|
:0040101A FF2508204000 Jmp dword ptr [00402008]
* Reference To: kernel32.Sleep, Ord:0260h
|
:00401020 FF2500204000 Jmp dword ptr [00402000]
:00401026 00000000000000000000 BYTE 10 DUP(0)
я записываю в первую строку 06FEBh и имею такой вид
//******************** Program Entry Point ********
:00401000 EB6F jmp 00401071
:00401002 0000000000000000 BYTE 8 DUP(0)
:0040100A 0C00 or al, 00
:0040100C 0000 add byte ptr [eax], al
:0040100E 68C8000000 push 000000C8
* Reference To: kernel32.Sleep, Ord:0260h
|
:00401013 E808000000 Call 00401020
:00401018 C3 ret
:00401019 CC int 03
* Reference To: user32.MessageBeep, Ord:019Ch
|
:0040101A FF2508204000 Jmp dword ptr [00402008]
* Reference To: kernel32.Sleep, Ord:0260h
|
:00401020 FF2500204000 Jmp dword ptr [00402000]
:00401026 00000000000000000000 BYTE 10 DUP(0)
Спасибо всем.
Посоветуйте хороший Hex редактор
а в обще их как собак - на вкус и цвет ))
Если быть чуть точнее то есть ли такой hexedit каторый бы мог HEX код переводит 6811304000h в push 0040311 если можно только под WINDOWS
Это уже дизасемблер .))
Подскажите пожалуйста алгоритм подсчёта CRC если можно на MASM
CRC - это понятие растяжимое... Но принцип такой: суммируешь все "слова" защищенного контрольной суммой диапазона по модулю M=2^N (N - разрядность слова) и сравниваешь полученную сумму с где-то сохраненным значением контрольной суммы или с нулем (это т.н. нуль-выровненная контрольная сумма).
То что ты описал - это CheckSum.
А CRC это циклклическое бинарное деление.
Хотя обычно вычисляется через таблицы. Могу дать код для генерации и вычисления произвольного CRC.
Код:
Надо CRC вычислить файла какого либо как это будет выглядеть.
здесь), я уже не говорю про аппаратные реализации - там производители оборудования извращаются как могут!
Scaiman, найти подобные алгоритмы в сети очень легко и самому! Вот, например, давняя тема с "Волжского": http://forum.vlz.ru/viewtopic.php?t=25843. Описание алгоритма "слайсинг бай эйт" в первую очередь нужно искать на официальном сайте Intel: http://www.intel.com/technology/comms/perfnet/index.htm
Pavia, так он недавно про PE-формат спрашивал, а там вроде бы используются обычные контрольные суммы, вот я и подумал... А вообще, как я и говорил, CRC - это понятие растяжимое! Одних только CRC в обычном понимании этого слова (на основе бинарного деления) насчитывается не один десяток (см.
Scaiman, найти подобные алгоритмы в сети очень легко и самому! Вот, например, давняя тема с "Волжского": http://forum.vlz.ru/viewtopic.php?t=25843. Описание алгоритма "слайсинг бай эйт" в первую очередь нужно искать на официальном сайте Intel: http://www.intel.com/technology/comms/perfnet/index.htm
Программа такого вида
.code
start:
invoke CreateFile,addr file1,GENERIC_ALL,FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
cmp eax,0FFFFFFFFh
je _error
mov fileh,eax
invoke CreateFileMapping,fileh,NULL,PAGE_READWRITE,0,0,0
cmp eax,0
je _error
mov filem,eax
invoke MapViewOfFile,filem,FILE_MAP_ALL_ACCESS,0,0,0
xor eax,eax
ret
end start
она неможет произвести чтение
Если запустить вручную то всё нармально.
Заранее спасибо.
Проблему решил.