Page 6 of 10
Re: ряд вопросов по FASM
Posted: Fri Aug 29, 2014 3:12 pm
by CleverMouse
68.16 - это нормальный способ загрузки в том числе и PE-драйверов, но имя драйвера должно заканчиваться нулевым символом. В 68.21 нужно указывать полный путь и дополнительно указывать командную строку.
Re: ряд вопросов по FASM
Posted: Tue Oct 07, 2014 4:19 am
by punk_joker
Имеется структура
Code: Select all
notify_struct:
dd 7
dd 0
.msg dd 0
dd 0
dd 0
db '/sys/@notify', 0
И переменная
Как поместить n-й байт в notify_struct.msg?
Пробовал так:
Code: Select all
mov al, [path]
mov byte[notify_struct.msg], al
Но в итоге в Notify выводится мусор.
Re: ряд вопросов по FASM
Posted: Tue Oct 07, 2014 7:43 am
by e-andrew
notify_struct.msg - всего лишь ссылка. Варианта два:
а) если path уже не нужен, то
Code: Select all
mov eax, path + 1
add eax, [n]
mov [eax], byte 0
mov [notify_struct.msg], path
P.S.: если будет ошибка на строчке path + 1, то помести в eax сначала path, а потом inc eax
б) создать еще один буфер, в него поместить n символов в цикле. Потом mov [notify_struct.msg], buffer
Code: Select all
mov eax, buffer
mov ebx, path
mov ecx, [n]
@@:
mov dl, byte [ebx]
mov byte [eax], dl
inc eax
inc ebx
loop @b
mov [notify.msg], buffer
;-----
buffer rd 4096
А можно просто пересохранить байт [path + n + 1], потом сделать как в первом варианте, потом вернуть тот байт
Re: ряд вопросов по FASM
Posted: Tue Oct 07, 2014 11:48 am
by punk_joker
Как-то это полегче делалось. С месяц назад я это уже делал, но исходники были утеряны. А вот теперь немогу понять как делал.
Re: ряд вопросов по FASM
Posted: Tue Oct 07, 2014 1:01 pm
by dunkaist
I'm not sure I understand you correctly, but here is my version:
Code: Select all
; eax = n
movzx eax, byte[path + eax]
mov [notify_struct.msg], eax
Re: ряд вопросов по FASM
Posted: Tue Oct 07, 2014 2:40 pm
by e-andrew
Моя ошибка, прочитал n байт, а не n-ый. Тогда dunkaist прав. Можно еще так
Code: Select all
; eax = n
mov al, byte[path + eax]
mov byte[notify_struct.msg], al
Но при вызове нужно передавать не байт, а адрес, т.е. все ровно нужно создать где-то строку, в нее поместить нужный байт, затем 0, а потом mov [notify.msg], buffer, где buffer, строка, которую нужно вывести
Re: ряд вопросов по FASM
Posted: Tue Oct 07, 2014 7:54 pm
by punk_joker
Снова я с тупыми вопросами. Не могу разобраться с организацией кода для удаления tmp-дисков. Проблема скорее всего с неправильным заполнением структуры отдаваемой ф68.17. Буду рад если кто укажет на ошибки, а то у меня уже мозг кипит.
Re: ряд вопросов по FASM
Posted: Tue Oct 07, 2014 9:58 pm
by dunkaist
Hint: 'vdm d' deletes /tmp0.
Re: ряд вопросов по FASM
Posted: Wed Oct 15, 2014 10:09 pm
by punk_joker
И снова я с подобным вопросом. На этот раз немогу организовать создание tmp-диска, и прошу снова указать в каком направлении копать.
Re: ряд вопросов по FASM
Posted: Thu Oct 16, 2014 9:02 am
by punk_joker
Проблема локализирована. Код снова работает, но неожиданным образом.
Re: ряд вопросов по FASM
Posted: Wed Oct 22, 2014 8:20 am
by punk_joker
Помогите разобраться, почему edit_box ведет себя не так как надо. На события мыши он вроде как вообще не реагирует, покрайней мере фокус не снимается. А при событии нажатия клавиатуры он и воввсе ведет себя непонятным образом.
Re: ряд вопросов по FASM
Posted: Wed Oct 22, 2014 8:46 am
by Mario_r4
punk_joker wrote:На события мыши он вроде как вообще не реагирует, покрайней мере фокус не снимается.
Spoiler:
Желательно:
А также в mouse_dd
Я в opendialog сделал:
Code: Select all
mov edi,edit1
or [edi+44],dword ed_focus
И да, я знаю, что использовать "магические" числа неправильный путь, но так вышло.
Можно сразу сделать:
punk_joker wrote:А при событии нажатия клавиатуры он и воввсе ведет себя непонятным образом.
Re: ряд вопросов по FASM
Posted: Sat Oct 25, 2014 8:09 pm
by IgorA
Есть вопрос по FPU. Пишу функцию которая множит матрицу m(4*4) на вектор v(4). Пока что для упрощения беру единичную матрицу, т. е. после умножения я должен получить исходный вектор. Проблема в том что первое число получаемого вектора равно 1.0, другие числа совпадают. Вычисляю числа вектора в цикле потому для всех чисел по идее используются одни и те же формулы. Потому-то и не могу понять почему именно первое число делается единицей
Сама функция для тех кто не хочет смотреть весь код.
Code: Select all
align 4
proc func_mv, m:dword, v:dword
pushad
mov ebx,[m]
mov edx,[v]
mov ecx,4
.cycle_0:
finit
fld dword[edx]
fld dword[edx+4]
fld dword[edx+8]
fld dword[ebx] ;st0 = m[0]
fmul st0,st3 ;st0 *= v.coord.X
fld dword[ebx+4] ;st0 = m[1]
fmul st0,st3 ;st0 *= v.coord.Y
fld dword[ebx+8] ;st0 = m[2]
fmul st0,st3 ;st0 *= v.coord.Z
fadd dword[ebx+12] ;st0 += m[3]
fadd st0,st1 ;st0 += v.coord.Z * m[2]
fadd st0,st2 ;st0 += v.coord.Y * m[1]
fstp dword[edx] ;v.coord.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3]
add ebx,16 ;следущая строка матрицы
add esi,4 ;следущая координата вектора
loop .cycle_0
stdcall print_matrix,[v],1
popad
ret
endp
.........
align 4
matr1 dd 1.0,0.0,0.0,0.0
dd 0.0,1.0,0.0,0.0
dd 0.0,0.0,1.0,0.0
dd 0.0,0.0,0.0,1.0
vect1 dd 0.5,0.7,0.9,1.1
Re: ряд вопросов по FASM
Posted: Sat Oct 25, 2014 8:57 pm
by dunkaist
У тебя ведь даже не планировалось умножение матрицы на вектор:
Code: Select all
fld dword[edx]
fld dword[edx+4]
fld dword[edx+8]
...
fstp dword[edx] ; v.coord.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3]
Вот так выводит 0.5 0.7 0.9 1.1:
Code: Select all
proc func_mv, m:dword, v:dword
pushad
mov ebx,[m]
mov edx,[v]
mov esi,edx
mov ecx,4
.cycle_0:
finit
fld dword[edx]
fld dword[edx+4]
fld dword[edx+8]
fld dword[edx+12]
;fwait
fld dword[ebx] ;st0 = m[0]
fmul st0,st4 ;st0 *= v.coord.X
fld dword[ebx+4] ;st0 = m[1]
fmul st0,st4 ;st0 *= v.coord.Y
fld dword[ebx+8] ;st0 = m[2]
fmul st0,st4 ;st0 *= v.coord.Z
fld dword[ebx+12]
fmul st0, st4
fadd st0,st1 ;st0 += v.coord.Z * m[2]
fadd st0,st2 ;st0 += v.coord.Y * m[1]
fadd st0,st3
fstp dword[esi] ;v.coord.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3]
; fincstp
; fincstp
;fwait
add ebx,16
add esi,4
;fwait
loop .cycle_0
stdcall print_matrix,[v],1
popad
ret
endp
Re: ряд вопросов по FASM
Posted: Sat Oct 25, 2014 9:58 pm
by IgorA
Спасибо. Кажется понял я пропустил 4-ю координату, и забыл сделать сдвиг по вектору при выводе результата, потому последняя единица попадала в начало вектора. Остальные координаты не менялись, а я считал что они пересчитанные.
Уже много раз менял этот код в ходе экспериментов и много чего уже сделанного правильно выкинул из него. В начале вообще планировал загрузку вектора вынести перед циклом, чтобы не грузить его 4 раза, и по идее он будет меняться с каждым циклом, так что доработка еще будет нужна.