Форум программистов, компьютерный форум, киберфорум
Наши страницы
FASM
Войти
Регистрация
Восстановить пароль
 
New Asm
0 / 0 / 0
Регистрация: 15.09.2017
Сообщений: 9
#1

Как правильно писать процедуру с использованием функции Windows? - FASM

16.10.2017, 12:44. Просмотров 247. Ответов 3
Метки нет (Все метки)

Как правильно писать процедуру с использованием функции Windows?

Пробую писать процедуры на FASM.
Простые процедуры получаются, а вот процедура с функцией Windows не компилируется.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
format PE GUI
include 'F:\ASM\fasmw17164\INCLUDE\win32ax.inc'
 
.code
  start:
 
       call wsp                                                
 
       invoke  MessageBox,HWND_DESKTOP,stri, 'Test',MB_OK,
       invoke  ExitProcess,0
 
    wsp:
        invoke wsprintf, stri, patt, [tst]
        ret
 
  .end start
 
     tst     dd 50h
     patt    db 'Test = %u',0
     stri     db '                  ',0
Как правильно написать, чтобы работало?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2017, 12:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как правильно писать процедуру с использованием функции Windows? (FASM):

Как правильно писать сайты с использованием php
добрый день. долго время писал на c++(qt)/java Сейчас необходимо написать...

Как правильно писать обращение к функции
Доброго времени суток. Ответе пожалуйста на такие вопросы: 1. Кнопка, на...

Как правильно при определении функции писать название компоненте?
Добрый день, Перелопатил код проекта и решил засунуть повторяющиеся части...

Как писать правильно?
switch (true) { case ($a == $aa and $b == $bb): case ($a == $ab and...

Как писать правильно?
Привет, форумчане... Мой вопрос, больше к профессионалам. Какой из этих двух...

Как на писать правильно ?
В одномерном массиве, состоящем из N вещественных элементов, вычислить: 1) ...

3
R71MT
3244 / 1110 / 265
Регистрация: 29.07.2014
Сообщений: 2,125
Записей в блоге: 4
16.10.2017, 13:52 #2
Цитата Сообщение от New Asm Посмотреть сообщение
invoke wsprintf, stri, patt, [tst]
укажи cinvoke (добавь "с" спереди)
printf не очищает за собой стек, поэтому у тебя адрес возврата подменяется
0
New Asm
0 / 0 / 0
Регистрация: 15.09.2017
Сообщений: 9
16.10.2017, 14:08  [ТС] #3
Работает!
Спасибо!

Добавлено через 2 минуты
Работают и call n stdcall одинаково, в чём между ними разница не знаю.
0
Jin X
❗❗ RTFM 👈
4007 / 1151 / 151
Регистрация: 14.12.2014
Сообщений: 2,292
Записей в блоге: 5
Завершенные тесты: 2
16.10.2017, 17:47 #4
Можно сделать вывод сразу в консоль вот так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
format  PE Console
entry   start
 
include 'win32axp.inc'
 
.code
 
start:
 
        mov     eax,1
        cinvoke printf, <'Hello world number %i',10>, eax
        invoke  ExitProcess, 0
 
section '.idata' import data readable
 
library kernel32, 'kernel32.dll',\
        msvcrt, 'msvcrt.dll'
 
        import_kernel32
 
import  msvcrt,\
        printf, 'printf'
 
        all_api
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2017, 17:47
Привет! Вот еще темы с решениями:

Как правильно перекомпилировать под windows функции connect, accept, bind?
компилятор пишет ошибку &quot;переопределение. другая кмпоновка&quot; смотрю про...

Как правильно писать условия (if)
Почему выводит последний метод, хотя не должен выводить его, не так ли? ...

Как правильно писать код?
Всем привет! Знаю javascript уже очень долго, много проектов писал, сразу...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru