purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 6:32 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Ср фев 15, 2017 8:08 pm 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 144
Благодарил (а): 70 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
MrF
это моя же первая ссылка! :wink:
Цитата:
на странице:
http://www.purebasic.fr/english/viewtopic.php?f=35&t=47313&hilit=IMUL
представлен код для Murmur3_32, который считает аналогично одноименному от manhunter'a


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Ср фев 15, 2017 8:30 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
А, ну да. Но сути не меняет, что это модификация с дополнительным числом $e6546b64


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Ср фев 15, 2017 11:21 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 552
Благодарил (а): 2 раз.
Поблагодарили: 30 раз.
Пункты репутации: 9
MrF писал(а):
А, ну да. Но сути не меняет, что это модификация с дополнительным числом $e6546b64

Основная наверное суть не в модификации кода а в том что если сменить последний символ ! на другой то хеш сумма одна и та же,такой алгоритм может дать сбой?
:roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
Procedure.l MurmurHash3(*key, len.l, seed.l = 0)
  EnableASM
  MOV eax, seed
  MOV ecx, len
 
    MOV edx, *key
    !push ebx
    !push ecx
 
  !mov ebx, eax
  !sub ecx, 4
  !js mh3_tail
  ; body
  !mh3_body_loop:
 
    !mov eax, [edx]
    !add edx, 4
 
  !imul eax, 0xcc9e2d51
  !rol eax, 15
  !imul eax, 0x1b873593
  !xor ebx, eax
  !rol ebx, 13
  !imul ebx, 5
  !add ebx, 0xe6546b64
  !sub ecx, 4
  !jns mh3_body_loop
  ; tail
  !mh3_tail:
 !xor eax, eax
  !add ecx, 3
  !js mh3_finalize
  !jz mh3_t1
  !dec ecx
  !jz mh3_t2
 
    !mov al, [edx + 2]
    !shl eax, 16
    !mh3_t2: mov ah, [edx + 1]
    !mh3_t1: mov al, [edx]
 
  !imul eax, 0xcc9e2d51
  !rol eax, 15
  !imul eax, 0x1b873593
  !xor ebx, eax
  ; finalization
  !mh3_finalize:
 
    !pop ecx
 
  !xor ebx, ecx
  !mov eax, ebx
  !shr ebx, 16
  !xor eax, ebx
  !imul eax, 0x85ebca6b
  !mov ebx, eax
  !shr ebx, 13
  !xor eax, ebx
  !imul eax, 0xc2b2ae35
  !mov ebx, eax
  !shr ebx, 16
  !xor eax, ebx
 
    !pop ebx
   
 
  ProcedureReturn
EndProcedure
 
          S$="Hello, World!"
          Debug MurmurHash3(@S$,Len(S$),10)
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Ср фев 15, 2017 11:43 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Сергейчик писал(а):
если сменить последний символ ! на другой то хеш сумма одна и та же

Может потому что у тебя программа в юникод компилится, а ты используешь функцию len() вместо StringByteLength()?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Пт фев 17, 2017 12:57 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 552
Благодарил (а): 2 раз.
Поблагодарили: 30 раз.
Пункты репутации: 9
MrF писал(а):
Сергейчик писал(а):
если сменить последний символ ! на другой то хеш сумма одна и та же

Может потому что у тебя программа в юникод компилится, а ты используешь функцию len() вместо StringByteLength()?

программа действительно в юникоде только вот явно это не с лен
сделал свой подсчёт и всё равно тоже самое.
Значит возможно само тело функции не в юникоде может быть или алгоритм брешет?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
Procedure.l MurmurHash3(*key, seed.l = 0)
!MOV dword eax,DWORD PTR esp+4
!loc:        
!MOV word cx,word ptr eax
!add dword eax,2
!TEST cx,cx
!JNZ short loc
!SUB dword eax,DWORD PTR esp+4
!SAR eax,1
!DEC eax
!imul eax,2
 
  !MOV ecx,eax; len
  !MOV eax,DWORD PTR esp+8; seed
 
 
    !MOV edx,DWORD PTR esp+4; *key
    !push ebx
    !push ecx
 
  !mov ebx, eax
  !sub ecx, 4
  !js mh3_tail
  ; body
  !mh3_body_loop:
 
    !mov eax, [edx]
    !add edx, 4
 
  !imul eax, 0xcc9e2d51
  !rol eax, 15
  !imul eax, 0x1b873593
  !xor ebx, eax
  !rol ebx, 13
  !imul ebx, 5
  !add ebx, 0xe6546b64
  !sub ecx, 4
  !jns mh3_body_loop
  ; tail
  !mh3_tail:
 !xor eax, eax
  !add ecx, 3
  !js mh3_finalize
  !jz mh3_t1
  !dec ecx
  !jz mh3_t2
 
    !mov al, [edx + 2]
    !shl eax, 16
    !mh3_t2: mov ah, [edx + 1]
    !mh3_t1: mov al, [edx]
 
  !imul eax, 0xcc9e2d51
  !rol eax, 15
  !imul eax, 0x1b873593
  !xor ebx, eax
  ; finalization
  !mh3_finalize:
 
    !pop ecx
 
  !xor ebx, ecx
  !mov eax, ebx
  !shr ebx, 16
  !xor eax, ebx
  !imul eax, 0x85ebca6b
  !mov ebx, eax
  !shr ebx, 13
  !xor eax, ebx
  !imul eax, 0xc2b2ae35
  !mov ebx, eax
  !shr ebx, 16
  !xor eax, ebx
 
    !pop ebx
   
 
  ProcedureReturn
EndProcedure
 
          S$="Hello, World3"
          Debug MurmurHash3(@S$,10)
 



Последний раз редактировалось Сергейчик Пт фев 17, 2017 5:04 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Пт фев 17, 2017 4:41 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Сергейчик писал(а):
только вот явно это не с лен

У тебя какая версия пурика? У меня на 5.30 и выше нормально код(предпоследний который) работает, хеши разные у разных строк

Сергейчик писал(а):
сделал свой подсчёт и всё равно тоже самое.

Так у тебя в еах ложится количество символов, а не количество байт, а код с байтами работает, а не с символами. Начни менять символы с W и дальше, и хеш будет тот же.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Пт фев 17, 2017 5:20 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 552
Благодарил (а): 2 раз.
Поблагодарили: 30 раз.
Пункты репутации: 9
MrF писал(а):
Сергейчик писал(а):
только вот явно это не с лен

У тебя какая версия пурика? У меня на 5.30 и выше нормально код(предпоследний который) работает, хеши разные у разных строк

Сергейчик писал(а):
сделал свой подсчёт и всё равно тоже самое.

Так у тебя в еах ложится количество символов, а не количество байт, а код с байтами работает, а не с символами. Начни менять символы с W и дальше, и хеш будет тот же.

А вон чего...
Подправил последний код,типа подсчёт байтов в юникодной строке(и действительно хеш стал разный) :D


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Чт мар 16, 2017 6:51 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Код:
1
2
3
4
5
6
7
8
9
10
11
12
!Macro label addr{
! result =  addr - 4000000
! result =  result mod 3
!}
 
Procedure lbl()
  !label lbl  
  !mov eax, result
  ProcedureReturn
EndProcedure
 !lbl:
Debug Hex(lbl())


Почему отказывается работать этот код? Или почему кроме сложения и вычитания другие операторы не хотят работать?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB