Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объясните пожалуйста! ASM под Windows, Fasm & WinAPI 
V
    Опции темы
drZmeu
  Дата 3.5.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



Объясните пожалуйста! Программирование на ASM под Windows
Привет знатоки ASM наверное самого интересного языка.
Я решил потихоньку начать изучать ASM под Windows и тут же наткнулся на проблему и понял что ничего пока не понимаю в ASM под Windows и под DOS наверное тоже =)))
Я в проекте попытался задействовать 3 WinAPI функции GetModuleFileName,
MessageBox,
ExitProcess
Так вот я не знаю как  правильно работать с функцией GetModuleFileName под ASM под C++ понятно!
Пожалуйста разъясните как и что куда вносить и т.д
Или отправьте куданить  где это объясняется.
С уважением,
drZmeu.

Код

format PE GUI 4.0
entry start
include 'win32a.inc'
section '.data' data readable writeable
_title TCHAR 'Name Progsss',0
_buf   dd ?
section '.code' code readable executable
start:
xor eax,eax
invoke GetModuleFileName,0,eax,DWORD[_buf]
mov [_buf],eax
invoke MessageBox,0,_buf,_title,MB_OK
invoke ExitProcess,0

section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'  


Компилятор FASM 1.67.21 но это не очень важно.
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
drZmeu
Дата 3.5.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



Прощу прошения за свою нелепость и глупость уже разобрался сам  smile 
Тяжеловато переходить с Visual C++ на FASM  smile 
У мну есть ещё несколько вопросов например как склеить 2 строки дайте пожалуйста линк на какой нить ликбез по программирования на ASM под Windows

Кому интересно сделал то что хотел таким макаром
Код

format PE GUI 4.0
entry start
include 'win32a.inc' 
section '.data' data readable writeable  
_title TCHAR 'Name Progsss',0
_buf   rb 100h   
section '.code' code readable executable
start:                         
invoke GetModuleFileName,0,_buf,100h
invoke MessageBox,0,_buf,_title,MB_OK
invoke ExitProcess,0

section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'          

Мне кажется что-то тут неправильно =\
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
anwe
Дата 3.5.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Склеить две строки так:
lstrcat, addr_строки_к_которой_клеишь,addr добавляемой_строки
PM MAIL   Вверх
drZmeu
Дата 3.5.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



Ооо спасибо большое =)

Добавлено через 26 секунд
Я думал это только в C++ можно так =)))
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
anwe
Дата 3.5.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



invoke же еще.
PM MAIL   Вверх
drZmeu
Дата 3.5.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



Я думал invoke служит для объявления winAPI!
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
anwe
Дата 3.5.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Это макроопределение, заменяющее call с передачей параметров вызываемой функции.
PM MAIL   Вверх
drZmeu
Дата 3.5.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



Хорошо вынужден согласится поскольку в ASM не рублю да и счетаю что ты прав =)
А можешь привести пример заменив invoke на call в моём верхнем примере?
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
anwe
Дата 3.5.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Код

push   100h
push   _buf
push   0
call   GetModuleFileName

PM MAIL   Вверх
drZmeu
  Дата 3.5.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



Оооо спасибо большое =)
А где об этом можно прочитать побольше просто пример я написал по подобию тех программ которые были в папке EXAMPLES и шли вместе в FASM
Или всё равно как писать что invoke что call ,,,???,,,

Добавлено через 4 минуты и 34 секунды
Эммммммм.
Я переписал так:
Код

format PE GUI 4.0
entry start
include 'win32a.inc' 
section '.data' data readable writeable  
_title TCHAR 'Name Progsss',0
_buf   rb 100h   
section '.code' code readable executable
start:                         
;------------------------------------
push 100h
push _buf
push 0
call GetModuleFileName
;------------------------------------
invoke MessageBox,0,_buf,_title,MB_OK
invoke ExitProcess,0

section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'             

А он зараза меня на *** послал ='(
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
drZmeu
Дата 3.5.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



На самом деле чтоб не дергать вас уважаемые эксперты! Я хотел бы получить от вас направление на книжку или материал по ASM я опишу что я хочу узнать а решать вам! Просто я немогу слегка въехать 
в ASM после языка высокого уровня он настолько забивает мозги что ужс.
Я привожу пример кода в котором я буду говорить что мне непонятно а вы дайте мне направление на литературу!
Код

format PE GUI 4.0
entry start

include 'win32a.inc'  

section '.data' data readable writeable 

_title TCHAR 'Hellow World',0     ;Имя окна
_class TCHAR 'deeeeeeeee =)))',0 ;Его класс

wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class   

msg MSG
section '.code' code readable executable
start:       
invoke GetModuleHandle,0  
mov [wc.hInstance],eax      
invoke LoadIcon,0,IDI_APPLICATION 
mov [wc.hIcon],eax
invoke LoadCursor,0,IDC_ARROW
mov [wc.hCursor],eax
invoke RegisterClass,wc

invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME,128,128,256,192,NULL,NULL,[wc.hInstance] 

msg_loop:
invoke GetMessage,msg,NULL,0,0
or eax,eax
jz end_loop
invoke    TranslateMessage,msg
invoke    DispatchMessage,msg
jmp msg_loop

end_loop:
invoke ExitProcess,[msg.wParam]

proc WindowProc hwnd,wmsg,wparam,lparam
push ebx esi edi     
cmp [wmsg],WM_DESTROY
je  wmdestroy
defproc:
invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
jmp    finish
wmdestroy:
invoke    PostQuitMessage,0
xor    eax,eax
finish:
pop    edi esi ebx
ret
endp

section '.idata' import data readable writeable

library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'

include 'api\kernel32.inc'
include 'api\user32.inc'
 

Первое что меня интересует тут это 
Код

invoke GetModuleHandle,0  
mov [wc.hInstance],eax

Почему в wc.hInstance мы заносим содержимое из eax
Код

invoke GetMessage,msg,NULL,0,0
or eax,eax

Тоже самое я так понимаю eax выступает переменной в которой будет результат работы?
Код

proc WindowProc hwnd,wmsg,wparam,lparam
push ebx esi edi     

Вот тут если мы открываем стек то почему только для 3 параметров хотя WindowProc параметра 4
если мы конечно для него открываем если не для него то для чего тогда?
и т.д Вот мне собственно нужна книжечка где это будет описано!
Я правда извиняюсь за такие вопросы но мне нужна помощ ! =)))
С уважением,
drZmeu 
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
anwe
Дата 4.5.2007, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Цитата(drZmeu @  3.5.2007,  22:51 Найти цитируемый пост)
Первое что меня интересует тут это 

код Ассемблера
1:
2:

invoke GetModuleHandle,0  
mov [wc.hInstance],eax


Почему в wc.hInstance мы заносим содержимое из eax

wc.hInstance - это часть  структуры WNDCLASS, которая используется при регистрации класса твоего окна. А почему из еах? - Потому что результат выполнения API-функций помещается именно туда. Что означает wc.hInstance - ниже.

Цитата

код Ассемблера 
1:
2:

 invoke GetMessage,msg,NULL,0,0
or eax,eax


Тоже самое я так понимаю eax выступает переменной в которой будет результат работы?



Аналогично: результат в еах. А через or проверяется его  равенство нулю. Смотри строкой ниже идет сравнени jnz.

Цитата

код Ассемблера 
1:
2:

 proc WindowProc hwnd,wmsg,wparam,lparam
push ebx esi edi     

 
Вот тут если мы открываем стек то почему только для 3 параметров хотя WindowProc параметра 4
если мы конечно для него открываем если не для него то для чего тогда?



Посмотри на 48 строку кода. Там значение этих регистров восстанавливается. Так работаtт винда: она не затрагивает эти регистры и "надеется и ожидает от тебя", что и ты их не поменяешь. smile Поэтому их надо сохранить. 4 параметра функции здесь не причем.

Ну а теперь ссылки, как просил. Дополнение к первому вопросу про wc.hInstance конечно же найдешь в msdn. А начальная литература здесь: Iczelion
PM MAIL   Вверх
drZmeu
Дата 4.5.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



Оооо. Спасибо огромное что разъяснил очень многое стало понятно и за литературу огромное спасибо ;) тему можно считать закрытой =)
Ещё раз спасибо anwe тебе +1 =)
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
drZmeu
Дата 4.5.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: нет
Всего: 1



И заключительный вопрос! =)
Почему не работает этот код
Код

format PE GUI 4.0
entry start
include 'win32a.inc' 
section '.data' data readable writeable  
_title TCHAR 'Name Progsss',0
_buf   rb 100h   
section '.code' code readable executable
start:                         
;------------------------------------
push 100h
push _buf
push 0
call GetModuleFileName
;------------------------------------
invoke MessageBox,0,_buf,_title,MB_OK
invoke ExitProcess,0
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'   

Я поковырялся в отладчике и так меня и не осенило =( Но кое что я понял! Да вы и сами поймете загрузив программу в OllyDbg или в какой нить другой отладчик!
Ну и конечно рабочий вариант
Код

format PE GUI 4.0
entry start
include 'win32a.inc' 
section '.data' data readable writeable  
_title TCHAR 'Name Progsss',0
_buf   rb 100h   
section '.code' code readable executable
start:                         
invoke GetModuleFileName,0,_buf,100h
invoke MessageBox,0,_buf,_title,MB_OK
invoke ExitProcess,0
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'          

А вопрос мой почему же не работает?
С уважением,
drZmeu
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
anwe
Дата 5.5.2007, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Не наю, не наю. В MASM'е работает и так и так.
А, кажется, догадываюсь. Надо прописать соглашение о передаче параметров функции: как в сях stdcall. Но где - не знаю.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.