ряд вопросов по FASM
-
Каждый элемен хранит структуру, в которой объявлено пять переменных типа байт(db) следовательно размер элемента в идеале 5 байт.to infinity and beyond
Храни массив указателей на строки.
Если точнее, то хранятся структуры. Все таже, что и в job. Мне необходимо просто вывести kol элемениов массива начиная с element.
to infinity and beyond
Тогда
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 ?
Тобишь пропускать действие пока не будет достигнут элемент с которого необходимо начать вывод?
to infinity and beyond
Нет конечно.
call GetJob - получить адрес нужного элемента.
call GetJob - получить адрес нужного элемента.
Пока ничего не прояснилось. Кстате, в JOB.done что хранится?
to infinity and beyond
А что не понятно-то?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 что хранится?
Все ясно. Просто забыл о том сообщении, идиот. А ведь ответ уже давно был дан.
to infinity and beyond
В идеале программа должна вывести через notify значение переменной wallpaper из ini-файла, но выводится почему-то не то. Подскажите в чем проблема всеже?
- Attachments
-
-
eskin2.zip (1.09 KiB)Downloaded 267 times
-
to infinity and beyond
вместо строк 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
Спасибо, сработало. Я пробовал, ток брал переменную в [], над теор часть перечитать.
to infinity and beyond
В скобках [sz_merror2] пишется значение по адресу sz_merror2. А функция ini_get_str требует сам адрес sz_merror2 куда будет записана считанная строка, потому без скобок.
В примере стояло значение адреса из регистра edi, хотя сам регистр edi в коде встречается впервые в 32-й строке где идет вызов функции ini_get_str. Получалось что значение писалось по неопределенному адресу ведь в регистре могло быть что угодно. А потом значение регистра edi попадало в 4-е четыре байта по адресу sz_merror2.
В примере стояло значение адреса из регистра edi, хотя сам регистр edi в коде встречается впервые в 32-й строке где идет вызов функции ini_get_str. Получалось что значение писалось по неопределенному адресу ведь в регистре могло быть что угодно. А потом значение регистра edi попадало в 4-е четыре байта по адресу sz_merror2.
Пытаюсь загрузить в своей программе драйвер 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, то рисуем окно , иначе выводим сообщение через нотифи и выходим.
Весь код в аттаче
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, то рисуем окно , иначе выводим сообщение через нотифи и выходим.
Весь код в аттаче
- Attachments
-
-
EXAMPLE.7z (1.45 KiB)Downloaded 271 times
-
to infinity and beyond
punk_joker
<<drv db 'tmpdisk' это должен быть полный путь к файлу, а сейчас не пойми что.
Правильная последовательность
<<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:
Last edited by Serge on Fri Aug 29, 2014 3:15 pm, edited 1 time in total.
Who is online
Users browsing this forum: No registered users and 4 guests