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: