win32 и NASM

Тема в разделе "WASM.BEGINNERS", создана пользователем Loginanton, 8 июл 2008.

  1. Loginanton

    Loginanton New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    74
    Кто нибудь выложите пожалуйста пример исходняка на NASM любой проги под win32, подойдёт даже "Хелло Ворлд", а то нимогу нигде найти пример программы под винду на насме :dntknw: Заранее спасибо.

    P.S. у кого стоит делфи от борланда приаттачте плиз или скиньте мне на мыло (Loginanton@mail.ru) доку по MSDN
     
  2. mikityak

    mikityak Забанен

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    160
    Код (Text):
    1. extern MessageBoxA
    2. [section data class=data use32]
    3. string  db  "NASM Test Application: Message Box",0
    4. title       db  "Visual Assembler",0
    5. [section code class=code use32]
    6. ..start:
    7.     push dword 0
    8.     push dword title
    9.     push dword string
    10.     push dword 0
    11.     call MessageBoxA
    12.     ret
     
  3. Loginanton

    Loginanton New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    74
    Скомпилированный экзешник ничего не делает.
    Мой батник:
    nasm -f win32 prax1.asm -o prax1.exe
    pause
     
  4. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    дык, вроде бы насм с примерами идет ;)
     
  5. TriX

    TriX Member

    Публикаций:
    0
    Регистрация:
    7 мар 2008
    Сообщения:
    68
    А он и не будет ничего делать, т.к. "экзешником" не является:) . На выходе от насма ты получаешь объектный файл (obj), как ты, наверное, успел заметить, в комплект поставки насма линкер вообще-то не входит. Я юзал alink, который брал здесь. Там же лежит и либа win32.lib, кою, собственно, и необходимо будет прикрутить, дабы заюзать MessageBox'ы, ну и другие прелести жизни:)
    Код (Text):
    1. extern MessageBoxA
    2.     [section .data]
    3. szTitle: db 'Test',0
    4. szText: db 'Hello from Nasm!',0
    5.     [section .text]
    6. global main
    7. main:
    8.     push dword 0
    9.     push dword szTitle
    10.     push dword szText
    11.     push dword 0  
    12.     call MessageBoxA
    13. ret
    Ну а далее
    nasm -f win32 hello.asm
    alink -oPE hello.obj win32.lib -entry main
    А так, по-дружески..ну его нафик:) Используй fasm, те же преимущества, только ЛИЦОМ к народу;) Удачи.
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Код (Text):
    1. ;@echo off
    2. ;goto make
    3.  
    4. extern __imp__ExitProcess@4
    5. ExitProcess EQU __imp__ExitProcess@4
    6. extern __imp__MessageBoxA@16
    7. MessageBox EQU __imp__MessageBoxA@16
    8. extern __imp__GetCurrentProcessId@0
    9. GetCurrentProcessId EQU __imp__GetCurrentProcessId@0
    10. extern __imp__wsprintfA
    11. wsprintf EQU __imp__wsprintfA
    12.  
    13. %macro push 2-*
    14.   %rep %0
    15.     push  %1
    16.     %rotate 1
    17.   %endrep
    18. %endmacro
    19.  
    20. %macro pop 2-*
    21.   %rep %0
    22.     %rotate -1
    23.     pop  %1
    24.   %endrep
    25. %endmacro
    26.  
    27. %macro invoke 1-*
    28.   %rotate -1
    29.   %rep %0-1
    30.     push  %1
    31.     %rotate -1
    32.   %endrep
    33.   call [%1]
    34. %endmacro
    35.  
    36. %macro cinvoke 1-*
    37.   %rotate -1
    38.   %rep %0-1
    39.     push  %1
    40.     %rotate -1
    41.   %endrep
    42.   call [%1]
    43.   %if (%0-1)
    44.     add esp, 4*(%0-1)
    45.   %endif
    46. %endmacro
    47.  
    48. global _start
    49.  
    50. section .data USE32
    51.  
    52. sz             db  "Hello",0
    53. format_string  db  "PID: %08lX",0
    54.  
    55. section .bss USE32
    56.  
    57. szBuff         resb  64
    58.  
    59. section .text USE32
    60.  
    61. _start:
    62.   invoke GetCurrentProcessId
    63.   cinvoke wsprintf, szBuff, format_string, eax
    64.   invoke MessageBox, 0, szBuff, sz, 0
    65.   invoke ExitProcess, 0
    66.  
    67.  
    68. ;:make
    69. ;SET PROJECTNAME=Hello
    70. ;if exist %PROJECTNAME%.res del %PROJECTNAME%.res
    71. ;if exist %PROJECTNAME%.obj del %PROJECTNAME%.obj
    72. ;if exist %PROJECTNAME%.exe del %PROJECTNAME%.exe
    73. ;if exist *.rc goto rc
    74. ;\nasm\nasmw -fwin32 %PROJECTNAME%.bat
    75. ;\masm32\bin\link /nologo /opt:nowin98 /SUBSYSTEM:WINDOWS /ENTRY:start /release /LIBPATH:\masm32\lib %PROJECTNAME%.obj KERNEL32.LIB USER32.LIB
    76. ;goto exit
    77. ;:rc
    78. ;\nasm\nasmw -fwin32 %PROJECTNAME%.bat
    79. ;\masm32\bin\rc %PROJECTNAME%.rc
    80. ;\masm32\bin\link /nologo /opt:nowin98 /SUBSYSTEM:WINDOWS /ENTRY:start /release /LIBPATH:\masm32\lib %PROJECTNAME%.obj %PROJECTNAME%.res KERNEL32.LIB USER32.LIB
    81. ;del %PROJECTNAME%.res
    82. ;:exit
    83. ;del %PROJECTNAME%.obj
    84. ;echo.
    85. ;pause
    86. ;cls
     
  7. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Вот сайтик, посмотрика.
    http://visual-assembler.pt.vu/
    Много там всякого добра по NASM-у, и не только.
     
  8. Loginanton

    Loginanton New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    74
    Да я пробовал фасм уже - немогу на нём кодить :) Синтаксис в голову не лезет так сказать :) Вот выбрал насм, потому что он и кросплатформенный и к нему отличная дока на русском есть
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    А вот и нет
    Код (Text):
    1. %define ONLY_NASM
    2. %include "nagoa+.inc"
    3. %include "defines.inc"
    4. section .text
    5. start:
    6.     invoke MessageBox,0,Message,wTitle,MB_OK+MB_SYSTEMMODAL
    7.     retn
    8.   wTitle   db 'Iczelion Tutorial #2:MessageBox',0
    9.   Message db 'Win32 Assembly with NASM is Great!',0
    10.  
    11. LAST_BEGIN
    12. __LIBS_   user32,  'user32.DLL'
    13. __IMPORT_ user32,\
    14.           MessageBox,'MessageBoxA',0
    15. LAST_END
    Собираем (естественно подставив свои %nasm_path% и %filename%)
    Код (Text):
    1. %nasm_path%\bin\nasmw -f bin %filename%.asm -o %filename%.exe ^
    2. -I%nasm_path%\include\NASM\
    И на выходе нормальный ехе
     
  10. Loginanton

    Loginanton New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    74
    Вообще то у тебя обычный бинарник :) В комплект насма на самом деле линкер не входит, а "-o" - она просто переименовывает выходной файл. В твоём примере ты просто из .bin переименовываешь в .exe :)
     
  11. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    я для винды на насме пишу так:
    a.asm
    Код (Text):
    1. cpu 386
    2. bits 32
    3.  
    4. global start
    5.  
    6. %macro cextern 1-2
    7.   %if %0 == 1
    8.     extern _%1
    9.     %define %1 _%1
    10.   %else
    11.     extern _%1@%2
    12.     %define %1 _%1@%2
    13.   %endif
    14. %endmacro
    15.  
    16. cextern printf
    17. cextern ExitProcess,4
    18.  
    19. section .text
    20.  
    21. start:
    22.     push    msg
    23.     call    printf
    24.     add esp,byte 4
    25.     push    byte 0
    26.     call    ExitProcess
    27.  
    28. section .data
    29.  
    30.   msg db "hello,world",13,10,0
    makefile
     
  12. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    да,Loginanton правильно сказал - насм - это компилятор,а не линкер. Экзешники напрямую получить нельзя.
     
  13. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Вот именно. На выходе нормальный ЕХЕ

    Вот собрал, и без линкера.
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Ra!N, Loginanton вот на это обратили внимание
    Код (Text):
    1. %define ONLY_NASM
    2. %include "nagoa+.inc"
    3. %include "defines.inc"
    сайт http://visual-assembler.pt.vu/ на главной странице написано Nagoa can also build EXE using only NASM ! в примерах NAGOA_NASM_PACKAGE_RAD_IDE_1_MAR_2004\lab\vasm\project\ONLY_NASM_examples можно найти как делать экзшник с ресурсами и без и dll используя только NASM без всякого линкера, т.е. практически всё как в FASM'е !
    PS Пример S_Alex как раз и взят оттуда
     
  15. TriX

    TriX Member

    Публикаций:
    0
    Регистрация:
    7 мар 2008
    Сообщения:
    68
    S_Alex:
    Эмм, как вообще можно хоть что-то собрать без линкера? Не, ну можно, конечно, и ПЕ-хидер вручную забить, и импорты прописать.. Вот когда на пенсию выйду, времени буит много, тогда, наверное, и займусь:))
    Читаем раздел documentation c nasm.sourceforge.net:
    "The Netwide Assembler, NASM, is an 80x86 and x86-64 assembler designed for portability and modularity. It supports a range of object file formats, including Linux and *BSD a.out, ELF, COFF, Mach-O, Microsoft 16-bit OBJ, Win32 and Win64..."
    Mikl___:
    на ALINK.EXE в папке с этим "nagoa" внимание обратил?:)
    Кабы запустил этот ngoa+, то узрел бы 2 кнопки, на которые надо жать.Первая - asm->obj, а вторая link.
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    А как без линкера работает FASM? И NASM точно такой же (IMHO NASM предшественник FASM'а) и ничего здесь "вручную забивать" не нужно nagoa.inc все это делает за тебя -- может быть это кому-то и не нравится, но NASM и без ALINK.EXE и без компиляторов ресурсов прекрасно работает
     
  17. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Скажу котегорично.
    Верх групости - этот мамонт умер, а доки и кросплатформенность есть и у фасма. Масму отдают предпочтение старперы. Для остальных путь один фасм. Или вы желаете двигаться в обратном направлении?
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    assorted
    Не знаю кого ты там старпёрами называешь, но масм поддерживается майкрософтом, пускай и не в виде отдельного пакета.
     
  19. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Верх глупости говорить так категорично