purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 4:31 am

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




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

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Почему не работает данный код?
Код:
1
2
3
4
5
6
7
8
9
10
Procedure decrypt(start, size)
 !    MOV dword edi,[p.v_start]
 !    MOV dword ecx,[p.v_size]
 !    @@:
 !    XOR byte[edi],8
 !    INC edi
 !    DEC ecx
 !    TEST ecx,ecx
 !    JNZ @b
EndProcedure



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

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 239
Благодарил (а): 32 раз.
Поблагодарили: 22 раз.
Пункты репутации: 0
с чего вы взяли что не работает?
Код
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Procedure decrypt(start, size)
 !    MOV dword edi,[p.v_start]
 !    MOV dword ecx,[p.v_size]
 !    @@:
 !    XOR byte[edi],8
 !    INC edi
 !    DEC ecx
 !    TEST ecx,ecx
 !    JNZ @b
EndProcedure
 
q.q=0
 
decrypt(@q, 8)
 
Debug Hex(q,#PB_Quad)
 
decrypt(@q, 8)
 
Debug Hex(q,#PB_Quad)



зы. PB5.31x32
зызы. если х64 - тогда надо править есесно (edi=>rdi, ecx=>rcx)


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
MrF писал(а):
Почему не работает данный код?
Код:
1
2
3
4
5
6
7
8
9
10
Procedure decrypt(start, size)
 !    MOV dword edi,[p.v_start]
 !    MOV dword ecx,[p.v_size]
 !    @@:
 !    XOR byte[edi],8
 !    INC edi
 !    DEC ecx
 !    TEST ecx,ecx
 !    JNZ @b
EndProcedure


Я так понимаю ты хочешь побитывую проверку если совпал бит значит исключить его(обнулить)
ошибка возможна в том что проверяешь по десятичному числу и цифра 8 в данномм случае это 4 бит пиши в битах тогда лучше или заранее предполагай это если будешь писать в десятичном. :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
 
Procedure decrypt(start, size)
 !MOV dword edi,[p.v_start]
 !MOV dword ecx,[p.v_size]
 !@@:
 !XOR byte[edi],10000000b
 !INC edi
 !DEC ecx
 !TEST ecx,ecx
 !JNZ @b
EndProcedure
 Procedure decrypt1(start, size)
 !MOV dword edi,[p.v_start]
 !MOV dword ecx,[p.v_size]
 !@@:
 !XOR byte[edi],80h
 !INC edi
 !DEC ecx
 !TEST ecx,ecx
 !JNZ @b
EndProcedure
  Procedure decrypt2(start, size)
 !MOV dword edi,[p.v_start]
 !MOV dword ecx,[p.v_size]
 !@@:
 !XOR byte[edi],128
 !INC edi
 !DEC ecx
 !TEST ecx,ecx
 !JNZ @b
EndProcedure
*mem=AllocateMemory(100)
 
decrypt(*mem,2)
 
Debug PeekA(*mem)
Debug PeekA(*mem+1)
Debug PeekA(*mem+2)
Debug PeekA(*mem+3)
Debug PeekA(*mem+4)
Debug Bin(PeekA(*mem))
FreeMemory(*mem)
 
*mem=AllocateMemory(100)
 
decrypt1(*mem,2)
 
Debug PeekA(*mem)
Debug PeekA(*mem+1)
Debug PeekA(*mem+2)
Debug PeekA(*mem+3)
Debug PeekA(*mem+4)
Debug Bin(PeekA(*mem))
FreeMemory(*mem)
 
*mem=AllocateMemory(100)
 
decrypt2(*mem,2)
 
Debug PeekA(*mem)
Debug PeekA(*mem+1)
Debug PeekA(*mem+2)
Debug PeekA(*mem+3)
Debug PeekA(*mem+4)
Debug Bin(PeekA(*mem))
FreeMemory(*mem)
 



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

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

Да нет, это обычное ксор-шифрование.

Спасибо всем. Разобрался в чем дело - пытался записать в защищенный участок памяти. VirtualProtect_ решает проблему.

А как использовать ассемблерную отладку? У меня всегда в ней пишет "Данные в настоящий момент недоступны."


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

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
MrF писал(а):
А как использовать ассемблерную отладку? У меня всегда в ней пишет "Данные в настоящий момент недоступны."


OllyDBG наше фсе
Я делаю так, в коде, перед участком который хочу посмотреть под асм отладчиком, ставлю штук 5 нопов (!nop) сохраняю в экзе и гружу в олю. Дальше дело техники 8)

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


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

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

Это да, но бывает код кривой и отладчик пурика ругается на левые строки, например на первую строку, хотя там вообще пусто. Т.е. такое даже не скомпилить.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Сб апр 25, 2015 10:18 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
MrF писал(а):
Это да, но бывает код кривой и отладчик пурика ругается на левые строки,
Конечно если отладчик выключен в строке с ошибкой. А к таким строкам, в частности относятся и асм строки, непосредственно передаваемые фасму.
Если нужно знать место ошибки в асм коде или пошагово его выполнять, необходимо включить поддержку асма.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
EnableASM
 
Procedure decrypt(start, size)
  MOV edi, start
  MOV ecx, size
  ! @@:
  XOr byte[edi],8
  INC edi
  DEC ecx
  TEST ecx,ecx
  ! JNZ @b
EndProcedure
 
q.q=0
 
decrypt(@q, 8)
Debug Hex(q,#PB_Quad)
 
decrypt(@q, 8)
Debug Hex(q,#PB_Quad)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


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

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

Сейчас пример не найду, но на днях что-то экспериментировал и там с включенной поддержкой такой косяк был.

Так а как ShowAssemblyViewer() пользоваться?


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

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 239
Благодарил (а): 32 раз.
Поблагодарили: 22 раз.
Пункты репутации: 0
MrF писал(а):
Так а как ShowAssemblyViewer() пользоваться?
Код
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
EnableASM
ShowAssemblyViewer()
 
Procedure decrypt(start, size)
  CallDebugger
  MOV edi, start
  MOV ecx, size
  ! @@:
  XOR byte[edi],8
  INC edi
  DEC ecx
  TEST ecx,ecx
  ! JNZ @b
EndProcedure
 
q.q=0
 
decrypt(@q, 8)
Debug Hex(q,#PB_Quad)
 
decrypt(@q, 8)
Debug Hex(q,#PB_Quad)
 


далее шагаем и смотрим изменения регистров (как-то так)


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

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Kuzmat писал(а):
MrF писал(а):
Так а как ShowAssemblyViewer() пользоваться?
Код
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
EnableASM
ShowAssemblyViewer()
 
Procedure decrypt(start, size)
  CallDebugger
  MOV edi, start
  MOV ecx, size
  ! @@:
  XOR byte[edi],8
  INC edi
  DEC ecx
  TEST ecx,ecx
  ! JNZ @b
EndProcedure
 
q.q=0
 
decrypt(@q, 8)
Debug Hex(q,#PB_Quad)
 
decrypt(@q, 8)
Debug Hex(q,#PB_Quad)
 


далее шагаем и смотрим изменения регистров (как-то так)

Как то не доработан отладчик не даёт просматривать изменение данных в регистре к примеру в edi только изменяет адрес а также данных FPU? :roll:


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

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
А ассемблерные процедуры можно использовать? Типа:
Код:
1
2
3
!proc Text
...
!endp


Или только пуриковские?


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 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
39
40
41
42
43
44
45
 
Procedure.f PolarAngle(x.f)
!FLD dword ptr p.v_x
!FSIN
!FSTP dword ptr p.v_x
ProcedureReturn x
EndProcedure
Procedure.f PolarAngle1(x.f)
!CALL slohzenie
!FSIN
!FSTP dword ptr p.v_x
ProcedureReturn x
!slohzenie:
!FLD dword ptr p.v_x
!FCOS
!Ret
EndProcedure
 
Procedure.f PolarAngle2(x.f)
!FLD dword ptr p.v_x
!FSIN
!CALL slohzen
!FLD dword ptr p.v_x
ProcedureReturn x
!slohzen:
!FCOS
!Ret
EndProcedure
 
Procedure.f PolarAngle3(x.f)
!FLD dword ptr p.v_x
!CALL slohze
!FSIN
!FSTP dword ptr p.v_x
ProcedureReturn x
!slohze:
!FCOS
!ret
EndProcedure
 
Debug PolarAngle(10)
Debug PolarAngle1(10)
Debug PolarAngle2(10)
Debug PolarAngle3(10)
 



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

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

Т.е. вызов по меткам? В принципе и такое подойдет. Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Фасм
СообщениеДобавлено: Чт июн 11, 2015 11:22 am 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Начал изучать FASM, хочу вывести MessageBox с кнопками Да/Нет, при нажатии на "Да" ещё один Message. Что не так? В документации прочитал что ифы поддерживаются
Код:
1
2
3
4
5
6
7
8
9
10
11
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
      end if
      invoke ExitProcess, 0
 
.end start

Пришлось вот так писать
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
include 'win32ax.inc'
 
.code
   start:
     invoke MessageBox, HWND_DESKTOP, "Hi!", invoke GetCommandLine, MB_YESNO
      cmp eax, IDYES
      je yes
      invoke ExitProcess, 0
 
   yes:
     invoke MessageBox, HWND_DESKTOP, "You pressed Yes!", "", MB_OK
 
.end start


_________________
Пурик - лучший язык программирования


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

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


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

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


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

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