Page 5 of 10

Posted: Wed Jul 17, 2013 11:47 pm
by punk_joker
Каждый элемен хранит структуру, в которой объявлено пять переменных типа байт(db) следовательно размер элемента в идеале 5 байт.

Re: ряд вопросов по FASM

Posted: Thu Jul 18, 2013 12:06 am
by Asper
Храни массив указателей на строки.

Posted: Thu Jul 18, 2013 12:31 am
by punk_joker
Если точнее, то хранятся структуры. Все таже, что и в job. Мне необходимо просто вывести kol элемениов массива начиная с element.

Re: ряд вопросов по FASM

Posted: Thu Jul 18, 2013 1:06 am
by Asper
Тогда

Code: Select all

ProcessJobArray:
        movzx   eax, [el_index]
        call    GetJob
        mov     esi, eax
        movzx   ecx, [el_quantity]
  .try_next_job:
        ;Process Job element here
        ;.....
        mov     [esi+JOB.done], 1
        inc     [done_jobs_num]
        mov     al, [jobs_num]
        add     al, [el_index]
        cmp     al, [done_jobs_num]
        jle     close_app
    .skip:
        add     esi, JOB.sizeof
        dec     ecx
        jnz     .try_next_job
        ret

;data
el_index db ?
el_quantity db ?


Posted: Thu Jul 18, 2013 1:29 am
by punk_joker
Тобишь пропускать действие пока не будет достигнут элемент с которого необходимо начать вывод?

Re: ряд вопросов по FASM

Posted: Thu Jul 18, 2013 12:12 pm
by Asper
Нет конечно.
call GetJob - получить адрес нужного элемента.

Posted: Thu Jul 18, 2013 3:57 pm
by punk_joker
Пока ничего не прояснилось. Кстате, в JOB.done что хранится?

Re: ряд вопросов по FASM

Posted: Thu Jul 18, 2013 4:08 pm
by Asper
punk_joker wrote:Пока ничего не прояснилось.
А что не понятно-то?
Ты посмотри код GetJob.
Что пытался сделать ты:
mov esi, [Jobs]
add esi, JOB.sizeof*0

В место нуля должен быть номер элемента массивп. Номер хранится в переменной element. Если написать add esi, JOB.sizeof*element программа компилируется но не запускается.
Как это делается в предложенном коде:

Code: Select all

   movzx   eax, [el_index]
   imul eax, JOB.sizeof
   mov  esi, [Jobs+eax]
punk_joker wrote:Кстате, в JOB.done что хранится?
Флаг - выполнена задача или нет. Нужен для того чтобы исключить повторный запуск одной и той же задачи.

Posted: Thu Jul 18, 2013 5:13 pm
by punk_joker
Все ясно. Просто забыл о том сообщении, идиот. А ведь ответ уже давно был дан.

Re: ряд вопросов по FASM

Posted: Sat Jul 05, 2014 1:29 pm
by punk_joker
В идеале программа должна вывести через notify значение переменной wallpaper из ini-файла, но выводится почему-то не то. Подскажите в чем проблема всеже?

Re: ряд вопросов по FASM

Posted: Sat Jul 05, 2014 7:21 pm
by IgorA
вместо строк 32-33:

Code: Select all

	invoke	ini_get_str, ini_path, aDefault, aWallpaper, edi, PATH_MAX_CHARS, 0
	mov [sz_merror2], edi
попробуй написать так:

Code: Select all

	invoke	ini_get_str, ini_path, aDefault, aWallpaper, sz_merror2, PATH_MAX_CHARS, 0
не проверял но думаю что сработает

Re: ряд вопросов по FASM

Posted: Sat Jul 05, 2014 9:19 pm
by punk_joker
Спасибо, сработало. Я пробовал, ток брал переменную в [], над теор часть перечитать.

Re: ряд вопросов по FASM

Posted: Sun Jul 06, 2014 12:30 am
by IgorA
В скобках [sz_merror2] пишется значение по адресу sz_merror2. А функция ini_get_str требует сам адрес sz_merror2 куда будет записана считанная строка, потому без скобок.
В примере стояло значение адреса из регистра edi, хотя сам регистр edi в коде встречается впервые в 32-й строке где идет вызов функции ini_get_str. Получалось что значение писалось по неопределенному адресу ведь в регистре могло быть что угодно. А потом значение регистра edi попадало в 4-е четыре байта по адресу sz_merror2.

Re: ряд вопросов по FASM

Posted: Fri Aug 29, 2014 3:02 pm
by punk_joker
Пытаюсь загрузить в своей программе драйвер tmpdisk.obj

mcall 68, 16, drv
...
drv db 'tmpdisk'

Но программа падает Page Fault
Затем догадываясь что драйвер переведен в PE пробую так

mcall 68, 21, drv,

в итоге, если я конечно не ошибся, в eax я получаю 0, т.е. драйвер не загружается

Вот код проверки
cmp eax, 0
jnz red
mov [notify_struct.msg], err_load
mcall 70, notify_struct
mcall -1

Если в eax не 0, то рисуем окно , иначе выводим сообщение через нотифи и выходим.

Весь код в аттаче

Re: ряд вопросов по FASM

Posted: Fri Aug 29, 2014 3:10 pm
by Serge
punk_joker
<<drv db 'tmpdisk' это должен быть полный путь к файлу, а сейчас не пойми что.
Правильная последовательность

Code: Select all

           mov eax, 68
           mov ebx, 16
           mov ecx, имя_сервиса
           int 0x40
           test eax, eax
           jnz .done             
                                 
	   mov ebx, 21
	   mov ecx, путь_к_драйверу
	   mov edx, cmdline
	   int 0x40
	   test eax, eax
	   jz .fail

.done: