...

суббота, 26 октября 2013 г.

Пишем Hello World на ассемблере под Windows RT с использованием winapi

Однажды, совсем недавно, на планшетах с Windows Microsoft потеряла миллионы долларов. Ну а мы сегодня просто будем писать под них на ассемблере.


Нам понадобятся следующие вещи.



  • Установленная Microsoft Visual Studio с поддержкой ARM ассемблера, например 2012.

  • Jailbreak'нутый планшет с установленной Windows RT, например Microsoft Surface RT.




Для начала создадим отдельную папку для проекта, в которой создадим файл arm.asm, содержимое которого под катом.



AREA data, DATA

Text DCB "Hello world(text)", 0x0
Caption DCB "Hello world(caption)", 0x0

EXPORT WinMainCRTStartup
IMPORT __imp_MessageBoxA
IMPORT __imp_ExitProcess

AREA text, CODE
WinMainCRTStartup PROC
movs r3,#0
ldr r2,Caption_ptr
ldr r1,Text_ptr
movs r0,#0
ldr r4,MessageBoxA_ptr
ldr r4,[r4]
blx r4

movs r0,#0
ldr r4,ExitProcess_ptr
ldr r4,[r4]
blx r4

MessageBoxA_ptr DCD __imp_MessageBoxA
ExitProcess_ptr DCD __imp_ExitProcess
Text_ptr DCD Text
Caption_ptr DCD Caption

ENDP
END




Причем у ассемблера в составе Visual Studio 2012 замечана странность: макросы и инструкции обязательно должны содержать перед собой хотя бы один символ табуляции, а вот метки и имена областей памяти наоборот, не должны ничего перед собой содержать(т.е. должны начинаться сразу с начала строки), иначе будут ошибки.

Итак, текст мы набрали, теперь приступим к компиляции. Из меню «Пуск» запускаем:



Microsoft Visual Studio 2012 — Visual Studio Tools — Командная строка VS2012 ARM Cross Tools.



Из открывшегося окна ввода команд переходим в каталог с исходниками, например:

cd \my_arm_proj




Далее последовательно вводим команды:

armasm arm.asm
link arm.obj user32.lib kernel32.lib /subsystem:windows




В итоге на выходе в директории программы получим исполняемый файл arm.exe. Копируем его на планшет, и вуаля!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий