Форум программистов, компьютерный форум, киберфорум
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для NoNaMe
2607 / 745 / 160
Регистрация: 10.06.2009
Сообщений: 2,948

Masm64 and FASM64, win_API, Examples

22.03.2015, 23:19. Показов 20596. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Предисловие.
По скорости написания программы: макро ассемблеры, требуют меньше времени чем любой другой язык программирования.


Наша собственная "студия"
Masm64 - Набор макросов
link и ml64 из x86_amd64. v.9.0 или link из amd64
x64dbg Для удобства работы.
и/или
IDA Мне лично нравится консольная версия.
и/или
Hiew - Hacker's view
и/или
FARManager или аналоги
Данный список будет дополняться

И так вы собрали свою начальную лабораторию для работы.

Example 0

main64.asm

make64.bat
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
 
if not exist rsrc.rc goto empty
rc /v rsrc.rc
cvtres /machine:ix86 rsrc.res
:empty
 
if exist "%1.obj" del "%1.obj"
if exist "%1.exe" del "%1.exe"
 
D:\masm\masm64\bin\ml64 /I"D:\masm\masm64\include" /c /Cp "%1.asm"
if errorlevel 1 goto errasm
 
if not exist rsrc.obj goto nores
 
D:\masm\masm64\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF "%1.obj" rsrc.res
if errorlevel 1 goto errlink
 
dir "%1.*"
goto TheEnd
 
:nores
D:\masm\masm64\bin\Link /LIBPATH:"D:\masm\masm64\lib" /ENTRY:WinMain /SUBSYSTEM:WINDOWS /ALIGN:16 /stub:stub.exe "%1.obj"
if errorlevel 1 goto errlink
dir "%1.*"
goto TheEnd
 
:errlink
echo _
echo Link error
goto TheEnd
 
:errasm
echo _
echo Assembly Error
goto TheEnd
 
:TheEnd
call debug.exe "%1.exe"

makecon64.bat
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
 
if not exist rsrc.rc goto empty
rc /v rsrc.rc
cvtres /machine:ix86 rsrc.res
:empty
 
if exist "%1.obj" del "%1.obj"
if exist "%1.exe" del "%1.exe"
 
D:\masm\masm64\bin\ml64 /I"D:\masm\masm64\include" /c /Cp "%1.asm"
if errorlevel 1 goto errasm
 
if not exist rsrc.obj goto nores
 
D:\masm\masm64\bin\Link /SUBSYSTEM:CONSOLE /OPT:NOREF "%1.obj" rsrc.res
if errorlevel 1 goto errlink
 
dir "%1.*"
goto TheEnd
 
:nores
D:\masm\masm64\bin\Link /LIBPATH:"D:\masm\masm64\lib"  /MERGE:.data=.text  /MERGE:.rdata=.text /ENTRY:WinMain /SUBSYSTEM:CONSOLE /ALIGN:16 /stub:stub.exe "%1.obj"
if errorlevel 1 goto errlink
dir "%1.*"
goto TheEnd
 
:errlink
echo _
echo Link error
goto TheEnd
 
:errasm
echo _
echo Assembly Error
goto TheEnd
 
:TheEnd
call debug.exe "%1.exe"


MERGE:.rdata=.text - Мы помещаем не инициализированные переменные в сегмент .text
MERGE:.data=.text - Мы помещаем инициализированные переменные в сегмент .text
ALIGN:16 - Уменьшаем размер готового бинарника
stub:stub.exe - Заголовок программы

call AllocConsole или invoke AllocConsole Очень важна если компилироваться под WINDOWS. А если компилироваться под CONSOLE можно данный вызов опустить.

Ну вот мы написали своё первое консольное приложение для win64, научились его собирать в готовый бинарник.
Дальше я-бы предложил его доработать в TASM, но это совсем другая история.

p.s.
Думаю к концу данной темы мы получим консольную обёртку для написания собственного приложения.
Прошу ваши предложения для написания 1-го примера приложения.
Самый красивый и лаконичный язык программирования, Машинный Код. (с)
Это мой первый пост на данном форуме, сильно не пинайте.

Добавлено через 4 часа 18 минут
Example 1
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
OPTION DOTNAME
option casemap:none
 
include temphls.inc
include win64.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
 
OPTION PROLOGUE:rbpFramePrologue
OPTION EPILOGUE:rbpFrameEpilogue
 
.data
msgtw    db 'cp1251 Привет из консоли!',13,10
msgtr    db ?
stdout   dd ?
stdin    dd ?
cWritten dd ?
cReaden  dd ?
color    db 0FFh
 
.code
WinMain proc <12> ;parmarea 1*8 bytes
LOCAL msg:MSG
    call  AllocConsole                                     ;New Console?
    invoke SetConsoleCP, 1251                              ;Console chcp1251
    invoke  SetConsoleOutputCP, 1251                       ;Output  chcp1251
 
    invoke  GetStdHandle, STD_INPUT_HANDLE
    mov stdin,  eax
    invoke  GetStdHandle, STD_OUTPUT_HANDLE
    mov stdout, eax
 
    invoke  SetConsoleMode, eax, ENABLE_PROCESSED_OUTPUT
 
;0x00 Black        - Black #000000 - #000000
;0x01 Navy Blue    - Black #000080 - #000000
;0x02 Green        - Black #008000 - #000000
;0x03 Teal         - Black #008080 - #000000
;0x04 Maroon       - Black #800000 - #000000
;0x05 Purple       - Black #800080 - #000000
;0x06 Olive        - Black #808000 - #000000
;0x07 Silver       - Black #c0c0c0 - #000000
;0x08 Gray         - Black #808080 - #000000
;0x09 Blue         - Black #0000ff - #000000
;0x0A Lime         - Black #00ff00 - #000000
;0x0B Cyan         - Black #00ffff - #000000
;0x0C Red          - Black #ff0000 - #000000
;0x0D Magenta      - Black #ff00ff - #000000
;0x0E Yellow       - Black #ffff00 - #000000
;0x0F White        - Black #ffffff - #000000
    xor rax, rax
    mov rax, 0FFh - 16 цветов фона и 16 цветов текста
metka:
    push rax ; в стек
    invoke  SetConsoleTextAttribute, stdout, rax ; rax берём из регистра
    invoke  WriteConsole, stdout, ADDR msgtw, sizeof msgtw, ADDR cWritten, NULL
    pop rax ; из стека
    SUB rax, 1 ; минус -1
    jnz metka ; если не ноль повторим
 
    invoke  FlushConsoleInputBuffer
    invoke  ReadConsole,   stdin, ADDR msgtr, SIZEOF msgtr, ADDR  cReaden, NULL
 
    invoke  FreeConsole
;invoke ExitProcess,0 
;    xor     eax, eax
    call    ExitProcess
ret
WinMain endp
end


пример цикла, я рад увидеть ваши предложения по поводу модификации данного цикла.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2015, 23:19
Ответы с готовыми решениями:

Как в FASM64 вывести число на экран?
Писал только на MASM под DOS решил попробовать FASM format PE64 GUI entry start include 'includes\win64a.inc' section '.data'...

Bootstrap examples н
Вот только начинаю разбираться с Bootstrap, беру вот этот сэмпл https://getbootstrap.com/docs/4.0/examples/album/ копирую всю...

Borland/CBuilder6/Examples
Если у кого нибудь есть C++Builder 6, вышлите пожалуйста папочку Examples. Она лежит &quot;Корневой каталог(Обычно C:/Program...

40
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
30.08.2023, 12:14
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ra508 Посмотреть сообщение
Win64. Простой битмэп
стоит поменять картинку как не работает тоже бит мэп
не ясно по какому принципу отображаются изображения можете ответить ?
ra508,
ну очень информативно! Как меняли картинку? Не работает тоже бит мэп -- Что конкретно не работает? И почему ТОЖЕ? В чем это проявляется? Что отвечать спрашивающему если ra508 не может сформулировать свою мысль и прикрепить к сообщению исходный текст программы и получившийся ехе?
В чем был смысл поднятия темы, написанной в 2015?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2023, 12:14
Помогаю со студенческими работами здесь

The type `Examples.Collections.Generic.Node<T>' does not contain a constructor that takes `0' arguments
Ошибка: в: using System; namespace Examples.Collections.Generic { public class Node2&lt;T&gt; : Node&lt;T&gt;, IPrintable { ...

Ошибка в Struts: Error: 500 Location: /examples/green/Struts1st.jsp
Есть такая проблема. Вроде делаю всё правильно, т.е. имеем struts-config.xml: &lt;?xml version='1.0' encoding='ISO-8859-1' ?&gt; ...

Masm64
Пыталась написать программу на masm64, но компилятор то библиотеку не открывает, то команда неизвестная, то ещё что-то. Попыталась...

Masm64 и winAPI
Здравствуйте. даже не знаю в какую тему писать, с получившейся проблемой. Нужно написать графическое приложение на winAPI но обязательным...

Соглашения о вызовах и masm64
Недавно начал создавать dll на масме64 для си++. Почитал на http://msdn.microsoft.com/ru-ru/library/ms235286.aspx соглашение о вызовах в...


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

Или воспользуйтесь поиском по форуму:
41
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru