Сейчас на форуме: zds, UniSoft (+5 невидимых)

 eXeL@B —› Программирование —› Не могу понять в чём ошибка
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 мая 2013 19:17
· Личное сообщение · #1

Здравствуйте, уважаемые форумчане! Я недавно решил пересесть с VisualBasic на ассемблер, решил использовать flat assembler. Вроде бы понемногу всё покоряю, но у меня возникла проблема с выделением памяти. Вот код:
Code:
  1. format PE GUI 4.0
  2. entry code
  3. include 'win32a.inc'
  4.  
  5. qerror:
  6. ;invoke MessageBox,0,eax,eax,MB_OK
  7. invoke ExitProcess,0
  8.  
  9. code:
  10. mov eax, 4
  11. invoke VirtualAlloc,0,eax,MEM_COMMIT,PAGE_EXECUTE_READWRITE ; выделяем память
  12. test eax,eax ; в случае ошибки в eax будет ноль, поэтому провряем eax
  13. jz qerror ; если не получилось выделить память переходим к сообщению об ошибке
  14.  
  15. invoke ExitProcess,0 ; Завершаем работу
  16.  
  17. library kernel,'C:\Windows\System32\KERNEL32.DLL',\
  18. user,'C:\Windows\System32\USER32.DLL'
  19.  
  20. import kernel,\
  21. ExitProcess,'ExitProcess',\
  22. VirtualAlloc,'VirtualAlloc'
  23.  
  24. import user,\
  25. MessageBox,'MessageBoxA'

Два дня курения документации из гугла ничего не дали. После компиляции и запуска экзешника последний падает. Что может быть, помогите пожалуйста




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 02 мая 2013 19:31
· Личное сообщение · #2

Файл без импорта получается. Так попробуй:
Code:
  1. format PE GUI 4.0
  2. entry start
  3. include 'win32a.inc'
  4.  
  5. section '.code' code readable executable
  6.  
  7. qerror:
  8. ;invoke MessageBox,0,eax,eax,MB_OK
  9. invoke ExitProcess,0
  10.  
  11. start:
  12. mov eax, 4
  13. invoke VirtualAlloc,0,eax,MEM_COMMIT,PAGE_EXECUTE_READWRITE ; выделяем память
  14. test eax,eax ; в случае ошибки в eax будет ноль, поэтому провряем eax
  15. jz qerror ; если не получилось выделить память переходим к сообщению об ошибке
  16.      
  17. invoke ExitProcess,0 ; Завершаем работу
  18.  
  19. section '.idata' import data readable writeable
  20.  
  21. library kernel,'C:\Windows\System32\KERNEL32.DLL',\
  22. user,'C:\Windows\System32\USER32.DLL'
  23.      
  24. import kernel,\
  25. ExitProcess,'ExitProcess',\
  26. VirtualAlloc,'VirtualAlloc'
  27.      
  28. import user,\
  29. MessageBox,'MessageBoxA' 


-----
Nulla aetas ad discendum sera


| Сообщение посчитали полезным: man43

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 мая 2013 19:32
· Личное сообщение · #3

Возможно это немного прояснит ситуацию:
Code:
  1. Сигнатура проблемы:
  2.   Имя события проблемы:    APPCRASH
  3.   Имя приложения: 123231.EXE
  4.   Версия приложения:       0.0.0.0
  5.   Отметка времени приложения:       51828204
  6.   Имя модуля с ошибкой:    StackHash_7f02
  7.   Версия модуля с ошибкой: 0.0.0.0
  8.   Отметка времени модуля с ошибкой: 00000000
  9.   Код исключения: c0000005
  10.   Смещение исключения:     0000109a
  11.   Версия ОС:      6.1.7601.2.1.0.256.48
  12.   Код языка:      1049
  13.   Дополнительные сведения 1:        7f02
  14.   Дополнительные сведения 2:        7f022125304f18ad699d994932123797
  15.   Дополнительные сведения 3:        7608
  16.   Дополнительные сведения 4:        7608b4ae9ea426de1951d7cc02c7dab2

Вроде бы какие-то проблемы с привилегиями, но екзешник запускаю и от администратора и от простого юзера - результат одинаков...



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 мая 2013 19:34
· Личное сообщение · #4

Спасибо огромное Flint, не представляешь как мне помог!


 eXeL@B —› Программирование —› Не могу понять в чём ошибка
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати