purebasic.info

PureBasic forum
Текущее время: Пн июн 18, 2018 1:16 am

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Чт июн 11, 2015 4:10 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Код:
1
2
3
4
5
6
7
8
9
10
 
include 'win32ax.inc'
.code
   start:
     invoke MessageBox, HWND_DESKTOP, "Hi!", invoke GetCommandLine, MB_YESNO
      .if eax =IDYES  ;Error - invalid value
         invoke MessageBox, HWND_DESKTOP, "You pressed Yes!", "", MB_OK
      .endif
      invoke ExitProcess, 0
.end start



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Вс май 29, 2016 9:03 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
А кто нибудь делал через директиву extrn доступ к процедуре?
И может есть какие инклудники с поддержкой extrn?(пурик же сам по call имя не ставит директиву extrn с именем) :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
!extrn _wcslen
!extrn _memset@12
Global s.s="55555555555555555555555"
Global r.i
!push 20
!push 48h
!PUSH ptr v_s
!call _memset@12
!PUSH ptr v_s
!CALL _wcslen
!mov dword [v_r],eax
Debug s
Debug r
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Вс июн 19, 2016 5:59 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Вот пару вариантов как можно сделать.
А в целом нужно делать или переводить макросы фасма :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
 
Global r.i
!jmp rrr
!myprocr:;{
!p.p_a equ esp+4
!p.p_b equ esp+8
    !MOV dword eax,[p.p_a]
    !add dword eax,[p.p_b]
    !RETn 8
;}
!myprocr2:;{
!p.p_a equ ebp+8
!p.p_b equ ebp+12
     !push ebp
     !mov ebp,esp
    !MOV dword eax,[p.p_a]
    !add dword eax,[p.p_b]
    !push eax
    !push 50
    !call myprocr
    !MOV esp,ebp
    !pop ebp
    !RETn 8
;}
   
 !rrr:  
    !push 20
    !push 20
    !call myprocr
    !mov dword [v_r],eax
 MessageRequester("",Str(r))
    !push 50
    !push 50
    !call myprocr2
    !mov dword [v_r],eax
 
MessageRequester("",Str(r))
 



Вложения:
Комментарий к файлу: Через макрос
55.rar [2.84 KiB]
Скачиваний: 113
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Вс июн 19, 2016 7:18 am 
Не в сети
профессор

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Ну можно и на пурика процедуры прыгнуть :D
Код:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
 
Procedure.i SravnenieHisla_UTF16(*s,*s1,b.b)
!SravnenieHisla_UTF16:  
 
                 !db  56h,57h,53h,80h,7Ch,24h,18h,1,75h,7Ah,8Bh
                !db 74h,24h,10h,8Bh,7Ch,24h,10h,83h,0EEh,2,83h
                !db 0C6h,2,66h,83h,3Eh,0,74h,23h,66h,83h,3Eh
                !db 39h,7Dh,0F1h,66h,83h,3Eh,30h,7Fh,0Ch,66h,83h
                !db 3Eh,2Eh,74h,6,66h,83h,3Eh,2Dh,75h,0DFh,66h
                !db 8Bh,6,66h,89h,7,83h,0C7h,2,0EBh,0D4h,66h
                !db 0C7h,7,2 dup(0),8Bh,74h,24h,14h,8Bh,7Ch
                !db 24h,14h,83h,0EEh,2,83h,0C6h,2,66h,83h,3Eh
                !db 0,74h,23h,66h,83h,3Eh,39h,7Dh,0F1h,66h,83h
                !db 3Eh,30h,7Fh,0Ch,66h,83h,3Eh,2Eh,74h,6,66h
                !db 83h,3Eh,2Dh,75h,0DFh,66h,8Bh,6,66h,89h,7
                !db 83h,0C7h,2,0EBh,0D4h,66h,0C7h,7,2 dup(0)
                !db 0EBh,65h,80h,7Ch,24h,18h,2,75h,5Eh,8Bh,74h
                !db 24h,10h,8Bh,7Ch,24h,10h,83h,0EEh,4,83h,0C6h
                !db 2,83h,0C6h,2,66h,83h,3Eh,0,74h,13h,81h
                !db 3Eh,0Dh,0,0Ah,0,74h,0ECh,66h,8Bh,6,66h
                !db 89h,7,83h,0C7h,2,0EBh,0E4h,66h,0C7h,7,2 dup(0)
                !db 8Bh,74h,24h,14h,8Bh,7Ch,24h,14h,83h,0EEh,4
                !db 83h,0C6h,2,83h,0C6h,2,66h,83h,3Eh,0,74h
                !db 13h,81h,3Eh,0Dh,0,0Ah,0,74h,0ECh,66h,8Bh
                !db 6,66h,89h,7,83h,0C7h,2,0EBh,0E4h,66h,0C7h
                !db 7,2 dup(0),8Bh,74h,24h,10h,66h,83h,3Eh
                !db 2Dh,74h,0Ch,8Bh,7Ch,24h,14h,66h,83h,3Fh,2Dh
                !db 74h,17h,0EBh,20h,8Bh,7Ch,24h,14h,66h,83h,3Fh
                !db 2Dh,74h,16h,0B8h,4 dup(0FFh),5Bh,5Fh,5Eh,0C2h
                !db 0Ch,0,0B8h,3Eh,3 dup(0),5Bh,5Fh,5Eh,0C2h
                !db 0Ch,0,6Ah,0,6Ah,0,6Ah,0,6Ah,0,8Bh
                !db 44h,24h,20h,66h,83h,38h,2Eh,74h,30h,66h,83h
                !db 38h,0,74h,14h,83h,0C0h,4,66h,83h,78h,0FEh
                !db 2Eh,74h,16h,66h,83h,78h,0FEh,0,75h,0E3h,83h
                !db 0E8h,2,2Bh,44h,24h,20h,0D1h,0E8h,89h,44h,24h
                !db 0Ch,0EBh,36h,89h,0C3h,2Bh,5Ch,24h,20h,0D1h,2 dup(0EBh)
                !db 14h,89h,0C3h,83h,0C3h,2,2Bh,5Ch,24h,20h,0D1h
                !db 0EBh,66h,83h,38h,0,74h,0Dh,83h,0C0h,4,66h
                !db 83h,78h,0FEh,0,75h,0F0h,83h,0E8h,2,2Bh,44h
                !db 24h,20h,0D1h,0E8h,89h,44h,24h,0Ch,89h,5Ch,24h
                !db 4,8Bh,44h,2 dup(24h),66h,83h,38h,2Eh,74h
                !db 30h,66h,83h,38h,0,74h,14h,83h,0C0h,4,66h
                !db 83h,78h,0FEh,2Eh,74h,16h,66h,83h,78h,0FEh,0
                !db 75h,0E3h,83h,0E8h,2,2Bh,44h,2 dup(24h),0D1h
                !db 0E8h,89h,44h,24h,8,0EBh,35h,89h,0C3h,2Bh,5Ch
                !db 2 dup(24h),0D1h,2 dup(0EBh),14h,89h,0C3h,83h,0C3h
                !db 2,2Bh,5Ch,2 dup(24h),0D1h,0EBh,66h,83h,38h
                !db 0,74h,0Dh,83h,0C0h,4,66h,83h,78h,0FEh,0
                !db 75h,0F0h,83h,0E8h,2,2Bh,44h,2 dup( 24h),0D1h
                !db 0E8h,89h,44h,24h,8,89h,1Ch,24h,83h,7Ch,24h
                !db 4,0,75h,74h,83h,3Ch,24h,0,74h,6Eh,66h
                !db 83h,3Eh,2Dh,74h,27h,8Bh,4Ch,24h,0Ch,39h,0Ch
                !db 24h,7Eh,43h,83h,2Ch,24h,1,39h,0Ch,24h,77h
                !db 48h,0FCh,66h,8Bh,6,66h,39h,7,7Ch,31h,77h
                !db 3Dh,83h,0C6h,2,83h,0C7h,2,0E2h,0EEh,0EBh,33h
                !db 8Bh,4Ch,24h,0Ch,39h,0Ch,24h,7Eh,2Ah,83h,2Ch
                !db 24h,1,39h,0Ch,24h,77h,13h,0FCh,66h,8Bh,  6
                !db 66h,39h,7,7Ch,18h,77h,8,83h,0C6h,2,83h
                !db 0C7h,2,0E2h,0EEh,0B8h,1,3 dup(0),83h,0C4h
                !db 10h,5Bh,5Fh,5Eh,0C2h,0Ch,0,0B8h,4 dup(0FFh)
                !db 83h,0C4h,10h,5Bh,5Fh,5Eh,0C2h,0Ch,0,83h,7Ch
                !db 24h,4,0,74h,7Ah,83h,3Ch,24h,0,75h,74h
                !db 66h,83h,3Eh,2Dh,74h,2Ah,8Bh,4Ch,24h,8,39h
                !db 4Ch,24h,4,7Eh,48h,83h,6Ch,24h,4,1,39h
                !db 4Ch,24h,4,77h,4Bh,0FCh,66h,8Bh,6,66h,39h
                !db 7,7Ch,42h,77h,32h,83h,0C6h,2,83h,0C7h,  2
                !db 0E2h,0EEh,0EBh,36h,8Bh,4Ch,24h,8,39h,4Ch,24h
                !db 4,7Eh,2Ch,83h,6Ch,24h,4,1,39h,4Ch,24h
                !db 4,77h,13h,0FCh,66h,8Bh,6,66h,39h,7,7Ch
                !db 0Ah,77h,16h,83h,0C6h,2,83h,0C7h,2,0E2h,0EEh
                !db 0B8h,4 dup(0FFh),83h,0C4h,10h,5Bh,5Fh,5Eh,0C2h
                !db 0Ch,0,0B8h,1,3 dup(0),83h,0C4h,10h,5Bh
                !db 5Fh,5Eh,0C2h,0Ch,0,83h,7Ch,24h,4,0,0Fh
                !db 84h,0C7h,3 dup(0),83h,3Ch,24h,0,0Fh,84h
                !db 0BDh,3 dup(0),66h,83h,3Eh,2Dh,74h,48h,8Bh
                !db 4,24h,39h,44h,24h,4,0Fh,8Ch,9Ch,3 dup(0)
                !db 0Fh,87h,88h,3 dup(0),8Bh,4Ch,24h,0Ch,39h
                !db 4Ch,24h,8,77h,19h,0FCh,66h,8Bh,6,66h,39h
                !db 7,7Ch,75h,0Fh,87h,7Dh,3 dup(0),83h,0C6h
                !db 2,83h,0C7h,2,0E2h,0EAh,0EBh,5Ah,66h,8Bh,6
                !db 66h,39h,7,7Ch,5Dh,77h,69h,83h,0C6h,2,83h
                !db 0C7h,2,0EBh,0EEh,8Bh,4,24h,39h,44h,24h,4
                !db 7Ch,4Ah,77h,56h,8Bh,4Ch,24h,0Ch,39h,4Ch,24h
                !db 8,77h,1Bh,83h,0C6h,2,83h,0C7h,2,0FCh,66h
                !db 8Bh,6,66h,39h,7,7Ch,3Dh,77h,2Dh,83h,0C6h
                !db 2,83h,0C7h,2,0E2h,0EEh,0EBh,18h,83h,0C6h,2
                !db 83h,0C7h,2,66h,8Bh,6,66h,39h,7,7Ch,23h
                !db 77h,13h,83h,0C6h,2,83h,0C7h,2,0EBh,0EEh,31h
                !db 0C0h,83h,0C4h,10h,5Bh,5Fh,5Eh,0C2h,0Ch,0,0B8h
                !db 1,3 dup(0),83h,0C4h,10h,5Bh,5Fh,5Eh,0C2h
                !db 0Ch,0,0B8h,4 dup(0FFh),83h,0C4h,10h,5Bh,5Fh
                !db 5Eh,0C2h,0Ch,0,66h,83h,3Eh,2Dh,74h,21h,8Bh
                !db 4Ch,24h,0Ch,39h,4Ch,24h,8,7Ch,3Eh,77h,4Ah
                !db 0FCh,66h,8Bh,6,66h,39h,7,7Ch,33h,77h,3Fh
                !db 83h,0C6h,2,83h,0C7h,2,0E2h,0EEh,0EBh,43h,8Bh
                !db 4Ch,24h,0Ch,39h,4Ch,24h,8,7Ch,2Bh,77h,1Bh
                !db 83h,0C6h,2,83h,0C7h,2,0FCh,66h,8Bh,6,66h
                !db 39h,7,7Ch,1Ah,77h,0Ah,83h,0C6h,2,83h,0C7h
                !db 2,0E2h,0EEh,0EBh,1Ch,0B8h,1,3 dup(0),83h
                !db 0C4h,10h,5Bh,5Fh,5Eh,0C2h,0Ch,0,0B8h,4 dup(0FFh)
                !db 83h,0C4h,10h,5Bh,5Fh,5Eh,0C2h,0Ch,0,31h,0C0h
                !db 83h,0C4h,10h,5Bh,5Fh,5Eh,0C2h,0Ch,4 dup(0)
EndProcedure
 
DisableDebugger
Global h.s="1234555555555555555555555555555567890"
Global s.s="12345555555555555555555555555555567890"
Global r.i
 
Global SravnenieHisla_UTF16.i=@SravnenieHisla_UTF16()
;
;MessageRequester("",Str(SravnenieHisla_UTF16(@s,@h,4)));
;
!PUSH 5
!PUSH dword ptr v_h
!PUSH dword ptr v_s
!call SravnenieHisla_UTF16;прыжок на адрес метки в процедуре
!mov dword [v_r],eax
MessageRequester("",Str(r))
!PUSH 5
!PUSH dword ptr v_s
!PUSH dword ptr v_h
!call [v_SravnenieHisla_UTF16];прыжок по адресу в глобальной переменной
!mov dword [v_r],eax
MessageRequester("",Str(r))
;
;
;
;
 MessageRequester("", "Начало теста"  )
   time = GetTickCount_()
   For q=0 To 10
   !PUSH 5
!PUSH dword ptr v_h
!PUSH dword ptr v_s
!call [v_SravnenieHisla_UTF16]
   Next
   t.d = (GetTickCount_() - time)/1000
   MessageRequester("", "Количество  циклов=" + q + #CR$ + "Время теста= " + t)
 MessageRequester("", "Начало теста"  )
   time = GetTickCount_()
   For q=0 To 10
SravnenieHisla_UTF16(@s,@h,5)
   Next
   t.d = (GetTickCount_() - time)/1000
   MessageRequester("", "Количество  циклов=" + q + #CR$ + "Время теста= " + t)
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Сб фев 11, 2017 9:36 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6304
Благодарил (а): 19 раз.
Поблагодарили: 187 раз.
Пункты репутации: 48
Есть личный сайтик некого ManHunter, который пишет иногда занятные программы на FASM.
Я пытался переделать его код на Пурик, но не обладая глубокими знаниями в этой области
наверняка наделал ошибок.
Исходник тут. Что я делаю не так?
Код:
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
 
;-----------------------------------------------------------------------
    ; Функция вычисления хеша Murmur
    ; Автор: ManHunter / PCL
    ; http://www.manhunter.ru
    ;-----------------------------------------------------------------------
    ; Параметры:
    ;       lpData - указатель на строку
    ;       dSize  - длина строки
    ;       dSeed  - соль
    ; На выходе:
    ;       EAX = полученный хеш
    ;-----------------------------------------------------------------------
    Procedure    Murmur (lpData.l, dSize.l, dSeed.l)
      #MAGIC = $C6A4A793
       EnableASM
            push    ebx ecx edx esi edi
            mov     ebx,[p.v_dSize]
            imul    ecx,ebx,#MAGIC
            mov     edx,[p.v_dSeed]
            XOr     ecx,edx
            mov     esi,[p.v_lpData]
     
    !loc_loop:
           cmp     ebx,4
            jb      loop_done
     
            mov     eax,dword [esi]
            add     ecx,eax
            imul    ecx,#MAGIC
            mov     eax,ecx
            shr    eax,16
            XOr     ecx,eax
     
            add     esi,4
            sub     ebx,4
            jmp     loc_loop
     
    !loop_done:
           cmp     ebx,3
            je      loc_tail_3
            cmp     ebx,2
            je      loc_tail_2
            cmp     ebx,1
            je      loc_tail_1
            jmp     loc_finish
     
    !loc_tail_3:
           movzx   eax,byte[esi+2]
            shl     eax,16
            add     ecx,eax
    !loc_tail_2:
           movzx   eax,byte[esi+1]
            shl     eax,8
            add     ecx,eax
    !loc_tail_1:
           movzx   eax,byte[esi]
            add     ecx,eax
            imul    ecx,#MAGIC
            mov     eax,ecx
            shr    eax,16
            XOr     ecx,eax
     
    !loc_finish:
           imul    ecx,#MAGIC
     
            mov     eax,ecx
            shr    eax,10
            XOr     ecx,eax
     
            imul    ecx,#MAGIC
     
            mov     eax,ecx
            shr    eax,17
            XOr     eax,ecx
     
            pop     edi esi edx ecx ebx
            ProcedureReturn
       DisableASM    
          EndProcedure
         
          S$="Hello, World!"
          Debug Murmur (@S$,Len(S$),10)
         


_________________
read-only


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

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


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

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1623
Откуда: Алматы
Благодарил (а): 13 раз.
Поблагодарили: 44 раз.
Пункты репутации: 5
спер чужой копирайт и понеслось? :))))


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Сейчас решил бегло глянуть.
и хочу сказать что procedurereturn думаю нужно убрать и написать retn 12(3 параметра для восстанавления стека)
в принципе необязательно
и если брать из стека параметры нужно не забывать что после PUSH ebx ecx edx esi edi
стек смещён на 20 байт и нужно везде добавлять [p.v_dSize+20],[p.v_dSeed+20],[p.v_lpData+20]
или без констант p.v_dSeed писать указатель на стек esp(это вершина стека в этой ячейки адрес возврата),
esp+4(первый аргумент) значит после PUSH ebx ecx edx esi edi первый аргумент будет esp+24. :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
 
    Procedure    Murmur (lpData.l, dSize.l, dSeed.l)
      #MAGIC = $C6A4A793
       EnableASM
            PUSH    ebx ecx edx esi edi
            MOV     ebx,[p.v_dSize+20];[esp+28]
            IMUL    ecx,ebx,#MAGIC
            MOV     edx,[p.v_dSeed+20];[esp+32]
            XOR     ecx,edx
            MOV     esi,[p.v_lpData+20];[esp+24]
     
    !loc_loop:
           CMP     ebx,4
            JB      loop_done
     
            MOV     eax,dword [esi]
            ADD     ecx,eax
            IMUL    ecx,#MAGIC
            MOV     eax,ecx
            SHR    eax,16
            XOR     ecx,eax
     
            ADD     esi,4
            SUB     ebx,4
            JMP     loc_loop
     
    !loop_done:
           CMP     ebx,3
            JE      loc_tail_3
            CMP     ebx,2
            JE      loc_tail_2
            CMP     ebx,1
            JE      loc_tail_1
            JMP     loc_finish
     
    !loc_tail_3:
           MOVZX   eax,byte[esi+2]
            SHL     eax,16
            ADD     ecx,eax
    !loc_tail_2:
           MOVZX   eax,byte[esi+1]
            SHL     eax,8
            ADD     ecx,eax
    !loc_tail_1:
           MOVZX   eax,byte[esi]
            ADD     ecx,eax
            IMUL    ecx,#MAGIC
            MOV     eax,ecx
            SHR    eax,16
            XOR     ecx,eax
     
    !loc_finish:
           IMUL    ecx,#MAGIC
     
            MOV     eax,ecx
            SHR    eax,10
            XOR     ecx,eax
     
            IMUL    ecx,#MAGIC
     
            MOV     eax,ecx
            SHR    eax,17
            XOR     eax,ecx
     
            POP     edi esi edx ecx ebx
            ;!retn 12
            ProcedureReturn
       DisableASM    
          EndProcedure
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Сб фев 11, 2017 2:51 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6304
Благодарил (а): 19 раз.
Поблагодарили: 187 раз.
Пункты репутации: 48
Ошибку не выдает, но и работает как то не правильно - хеш подозрительно одинаковый если поменять ! на 0
Но всё равно спасибо, в АСМе много тонкостей, по одному примеру не выучить :D

_________________
read-only


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Может что с алгоритмом не то?
посмотри тут,может на пурик переведёшь?
https://github.com/aappleby/smhasher

там что то вроде этого
Код:
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
 
Procedure   Murmur (*key,len.i, Seed.i)
 
 #m = $c6a4a793;
 
  #r = 16;
  Protected k.i
  Protected h.i=seed ^ (len * m);
 
  //----------
 
  #Data = *key;
 
  While(len >= 4)
 
    k = *|/1/>Data;
 
    h += k;
    h *= m;
    h ^= h >> 16;
 
    Data += 4;
    len -= 4;
  Until
 
  //----------
 
  Select(len)
 
  Case 3:
   h += Data[2] << 16;
  Case 2:
   h += Data[1] << 8;
  Case 1:
   h += Data[0];
    h *= m;
    h ^= h >> r;
  EndSelect
 
  //----------
 
  h *= m;
  h ^= h >> 10;
  h *= m;
  h ^= h >> 17;
 
 
 
ProcedureReturn h
     
EndProcedure
 



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

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 154
Благодарил (а): 85 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
Цитата:
спер чужой копирайт и понеслось? :))))
- он сам всё спёр (многие программы я находил в исходниках masm на других сайтах, для перевода на PB только усложнил задачу - лучше бы исходный код выкладывал.
Имхо, раздражает манера ManHunter'а писать на fasm: сделал бы давно макрос для подобия инклудов, чтобы вызывать api в строку, добавил бы макросами if-else.. В его прыжках по коду любой запутается даже в примитивных программах.
kvitaliy - интересный случай:). Вроде всё правильно..


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Уважаемый bizdon я бы не был на вашем месте столь категоричен.
Потому что автор капипаста на fasm(при переводе чужого открытого кода на fasm,не своего алгоритма) в данном случае указал ссылку откуда ноги растут.
И считаю правильно он перевёл этот код или неправильно вопрос второстепенный. :roll:


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

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 154
Благодарил (а): 85 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
на странице:
http://www.purebasic.fr/english/viewtopic.php?f=35&t=47313&hilit=IMUL
представлен код для Murmur3_32, который считает аналогично одноименному от manhunter'a
Думаю, на его основе можно запилить и другие варианты - отличия небольшие.
На странице:
http://www.purebasic.fr/english/viewtopic.php?f=12&t=63929&hilit=MurmurHash
приведён си-подобный синтаксис, править его, имхо, одно удовольствие. Однако, с manhunter'ом не сходится..

п.с. после гадания на кофейной гуще, думаю, что ваш код не работает из-за ошибок в памяти, вызванными неправильным применением asm.. Возможно, если написать в на официальный форум в "Coding Questions", то помогут..


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

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
bizdon, там какая-то модификация 32 битного хеша.
Вот тут http://www.purebasic.fr/english/viewtop ... 66#p375166 тоже самое, что и у manhunter'а.


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

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


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

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


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

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