Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Диалоговое окно c битмапом (FASM)
Посл.ответ Сообщение

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

Создано: 26 января 2008 14:12
· Личное сообщение · #1

Здравствуйте уважаемые !
Один хороший человек поделился исходником диалогбокса с битмапом на MASM , я же собственно хочу переписать исходник на язык FASMа ( пока безуспешно ) .
Хотелось бы обратить ваше внимание на нижепревиденый код ( ошибка при компиляции .data? illegal instruction!)



format PE 4.0

include 'win32ax.inc'
include 'macro\if.inc'

section '.data' data readable writeable

.data

.data?

hinstance dd ?

section '.code' code readable executable

.code


proc DialogProc hwnddlg,msg,wparam,lparam



.if uMsg==WM_CLOSE
invoke EndDialog,hWnd,0
mov eax,true

.elseif uMsg==WM_INITDIALOG
invoke LoadIcon,hinstance,20
push eax
invoke SendMessage,hWnd,WM_SETICON,1,eax
pop eax
invoke SendDlgItemMessage,hWnd,104,STM_SETIMAGE,IMAGE_ICON,eax

invoke GetDlgItem,hWnd,102
invoke SetWindowPos,eax,0,0,0,100,100,SWP_NOZORDER OR SWP_NOMOVE OR SWP_FRAMECHANGED
mov eax,true

.else
mov eax,FALSE
.endif
ret
endp


start:
invoke GetModuleHandle,0
mov [hinstance],eax
invoke DialogBoxParam,eax,100,0,HWND_DESKTOP, DialogProc ,0
invoke ExitProcess,eax
end start


В чем моя ошибка ?



Ранг: 9.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 26 января 2008 14:35 · Поправил: _taha_
· Личное сообщение · #2

Сначала хотел помочь... А потом понял, что бесполезно

>>section '.data' data readable writeable
>>
>>.data
>>
>>.data?

Что это??

>>format PE 4.0

имена переменных...

где секция импорта?

Весь сорц одна большая ошибка

Читай мануалы по fasm'у!!!



Ранг: 20.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 26 января 2008 15:18
· Личное сообщение · #3

CLOPOMOR
Твой исходник какой-то странный, посмотри пример в атаче

0384_26.01.2008_CRACKLAB.rU.tgz - bitmap.rar



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

Создано: 26 января 2008 15:28
· Личное сообщение · #4

_taha_

Неужели все так безнадежно ( A?

Да шут с ним кривым форматом, добавлю GUi , не в нем дело

Недопонял ... Какая секция импорта ? Кого откуда импортируем?

То есть этот код MASM :

include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib

равносилен импортированию DLL библиотек в FASM?

data import

БЛА БЛА

end data

Обьясни что конкретно , где какие строки как исправить

_taha_ пишет:
Весь сорц одна большая ошибка


Таки да и весь ? Да ну...

_taha_ пишет:
Читай мануалы по fasm'у!!


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

ЗЫ Ни Калашников с Рихтерем ,ни Айсзелион не заменят живого понятного общения , пусть даже "синтетического" форумного , это не говоря о буржуйско - английских попромтченых доках ( я когда учился изучал немецкий ) .



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

Создано: 26 января 2008 15:40 · Поправил: CLOPOMOR
· Личное сообщение · #5

ReZiDenT_USSR

Это кусок от кейгена , там несколько битмапов и иконка импортируются из ресурса и выводятся на участки площади окна. Странный он очевидно потому что я над ним так живо "поработал " в корявом порыве периписать под FASM ( я в этом чайник , ковыряю фасмовские эксемплы , c регистрами играюсь ,потихому подбираюсь к вызову Api функций ,о синтаксисе масма понятия не имею)

Спасибо тебе за аттач . Красиво слушай
Может знаеш где в сети можно найти исходники простых приложений на FASMе?



Ранг: 9.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 26 января 2008 16:19
· Личное сообщение · #6

>Да ну...

функция proc DialogProc hwnddlg,msg,wparam,lparam

обращаешся .if uMsg==WM_CLOSE
=)))

Тыбы хоть с именами переменных определился

fasm не будет за тебя клеить импорт.. ты должен создать секцию импорта и там с помощью макросов указать что будешь использовать и из каких библиотек..

section '.idata' import data readable writeable

library kernel,'KERNEL32.DLL',
user,'USER32.DLL'

import kernel,
GetModuleHandle,'GetModuleHandleA',
ExitProcess,'ExitProcess'

import user,
DialogBoxParam,'DialogBoxParamA'

и тд

хотя если инклудишь win32ax.inc можно писать и так:

include 'win32ax.inc'

.code

start:
invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!","Win32 Assembly",MB_OK
invoke ExitProcess,0

.end start

а исходники простых приложений и макросов можно найти в папках example и macro



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

Создано: 26 января 2008 17:30 · Поправил: CLOPOMOR
· Личное сообщение · #7

ReZiDenT_USSR

Ты не мог бы дать некоторые разьяснения по поводу своего кода ? Они бы мне несколько помогли ,вопросы я постарался поставить как можно четче ( в виде коментариев )


hInstance dd ?
hBitmap dd ?
ps rb 10h ; что это ? 60h,10h - некие смещения ?
hdc dd ?
hMemDC dd ?
rect rb 60h
num dd 400 ; далее по коду встечается только в численом значении 400 (?)
hicon dd ?

section '.code' code readable executable

start:

invoke GetModuleHandle,0 : получаем хендл приложения ?

mov [hInstance],eax ; значение регистра помещаем в область памяти ( где находится переменная)?

invoke LoadIcon,[hInstance],31; загружаем иконку в память по ее идентификатору в файле ресурсов ?

mov [hicon],eax ;перемещаем значение регистра в область памяти с иконкой?

invoke DialogBoxParam,[hInstance],1000,HWND_DESKTOP,DialogProc,0 ; задаем параметры диалогбокса по идентификатору 1000 в файле ресурсов ?

or eax,eax ; если значение регистров 0 то выходим ?
jz exit

exit:
invoke ExitProcess,0
ret ; повторяем процедуру?

proc DialogProc hwnddlg,msg,wparam,lparam ; процедура создания окна ?
push ebx esi edi; сохраняем регистры

cmp [msg],WM_PAINT : вызовы функции (обработчики сообщений )?
je go
cmp [msg],WM_CLOSE
je wmclose
cmp [msg],WM_INITDIALOG
je sentt
xor eax,eax
jmp finish ; безусловный переход на метку финиш



go:

invoke LoadBitmap,[hInstance],400 ; грузим рисунок , что означает число 400 (как я понял это наше num)?
mov [hBitmap],eax
invoke BeginPaint,[hwnddlg],ps ; начинаем рисовать ?
mov [hdc],eax
invoke CreateCompatibleDC,[hdc] ;
mov [hMemDC],eax
invoke SelectObject,[hMemDC],[hBitmap] ; просто копирование из одной области памяти в другую ?
invoke GetClientRect,[hwnddlg],rect ; эта строка не очень понятна...
invoke BitBlt,[hdc],0,0,300,200,[hMemDC],0,0,SRCCOPY ; и эта
invoke DeleteDC,[hMemDC] ; удаляем рисунок ?
invoke EndPaint,[hwnddlg],ps; заканчиваем прорисовку?

ret



sentt :

invoke SendMessage,[hwnddlg],WM_SETICON,0,[hicon]; что это за процедура ? она задает иконку заголовка?
ret







wmclose:
invoke EndDialog,[hwnddlg],0 ; уничтожаем окно ?

finish:


pop edi esi ebx ; как я понял восстанавливаем регистры
ret
endp ; заканчиваем процедуру ?





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


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