Переход c MASM на FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем KindEcstasy, 20 фев 2007.

  1. KindEcstasy

    KindEcstasy New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    22
    Все налево и направо кричат о крутости FASM'a. Вот и решил я потихоньку слезать с MASM и перейти на FASM. Подскажите пожалуйста те, у кого была такая-же проблемка. Как бы перейти так, что бы потом не было мучительно больно. И ещё, в Flat Assembler'e обязательно импорт вручную прописывать, или это как-то уже решено, а то блин как-то неудобно... или просто мне так кажеться?
     
  2. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    KindEcstasy
    А зачем целиком переходить?! Я вот лично пользую как MASM, так и FASM - в зависимости от поставленных задач.
    Насчет импорта - напиши макрос, который все автоматом сделает за тебя :)
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    есть стандартные, зачем еще что-то писать?
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    а с чем связан переход?
    в чём ты увидел преимущества FASM перед MASM или MASM перед FASM?
     
  5. Gambit

    Gambit New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2007
    Сообщения:
    11
    Не совсем понятно: чего ты хочешь... Берешь доку и... ;) Если у тебя есть (или появятся) конкретные вопросы - задавай - поможем ;)
    FASM более низкоуровневый,чем MASM, но я согласен с RamMerLabs - если неудобно и нет надобности, то зачем переходить? Из-за "крутости"?;) Юзай MASM, пока он выполняет то, что ты хочешь...
     
  6. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    у FASM появилась поддержка отладочной информации?
     
  7. KindEcstasy

    KindEcstasy New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    22
    Всем спасибо. Для себя всё решил: останусь на MASM и потихоньку буду привыкать к FASM. Тему можно закрывать.
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    конечно, нет.
    Код (Text):
    1. include "win32ax.inc"
     
  9. Mescalito

    Mescalito New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2005
    Сообщения:
    78
    Адрес:
    Харьков
    А я вручную всегда импорт прописываю... собственно из-за этого и перешёл на fasm сразу после iczelion'а и Зубкова (осознание offset и макро пришло позже)
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    чтоб познать истинное дао нужно и файл создавать вручную :))

    Код (Text):
    1. IMAGE_DOS_SIGNATURE  =      5A4Dh      ; MZ
    2. IMAGE_NT_SIGNATURE   =  00004550h      ; PE00
    3. IMAGE_FILE_MACHINE_I386             =      014ch  ; Intel 386
    4.  
    5. IMAGE_FILE_RELOCS_STRIPPED          =  0001h  ; Relocation info stripped from file
    6. IMAGE_FILE_EXECUTABLE_IMAGE         =  0002h  ; File is executable  (i.e. no unresolved externel references)
    7. IMAGE_FILE_LINE_NUMS_STRIPPED       =  0004h  ; Line nunbers stripped from file
    8. IMAGE_FILE_LOCAL_SYMS_STRIPPED      =  0008h  ; Local symbols stripped from file
    9. IMAGE_FILE_32BIT_MACHINE            =  0100h  ; 32 bit word machine
    10.  
    11. ; Section characteristics
    12. IMAGE_SCN_CNT_CODE                  =  00000020h  ; Section contains code
    13. IMAGE_SCN_CNT_INITIALIZED_DATA      =  00000040h  ; Section contains initialized data
    14. IMAGE_SCN_CNT_UNINITIALIZED_DATA    =  00000080h  ; Section contains uninitialized data
    15. IMAGE_SCN_MEM_EXECUTE               =  20000000h  ; Section is executable
    16. IMAGE_SCN_MEM_READ                  =  40000000h  ; Section is readable
    17. IMAGE_SCN_MEM_WRITE                 =  80000000h  ; Section is writeable
    18.  
    19. IMAGE_SUBSYSTEM_WINDOWS_GUI         =         2   ; Image runs in the Windows GUI subsystem
    20. IMAGE_NUMBEROF_DIRECTORY_ENTRIES    =        16
    21.  
    22.  
    23.  
    24. IMAGE_BASE           =  00400000h
    25. NUMBER_OF_SECTIONS   =         2
    26. FILE_ALIGNMENT       =  00000200h
    27. SECTION_ALIGNMENT    =  00001000h
    28.  
    29.  
    30. IMAGE_DOS_HEADER:     ; DOS .EXE header
    31. e_magic     dw IMAGE_DOS_SIGNATURE         ; Magic number        /*   0h  */
    32. e_cblp      dw 0         ; Bytes on last page of file            /*   2h  */
    33. e_cp        dw 0         ; Pages in file                         /*   4h  */
    34. e_crlc      dw 0         ; Relocations                           /*   6h  */
    35. e_cparhdr   dw 0         ; Size of header in paragraphs          /*   8h  */
    36. e_minalloc  dw 0         ; Minimum extra paragraphs needed       /*  0Ah  */
    37. e_maxalloc  dw 0         ; Maximum extra paragraphs needed       /*  0Ch  */
    38. e_ss        dw 0         ; Initial (relative) SS value           /*  0Eh  */
    39. e_sp        dw 0         ; Initial SP value                      /*  10h  */
    40. e_csum      dw 0         ; Checksum                              /*  12h  */
    41. e_ip        dw 0         ; Initial IP value                      /*  14h  */
    42. e_cs        dw 0         ; Initial (relative) CS value           /*  16h  */
    43. e_lfarlc    dw 0         ; File address of relocation table      /*  18h  */
    44. e_ovno      dw 0         ; Overlay number                        /*  1Ah  */
    45. e_res       rw 4         ; Reserved words                        /*  1Ch  */
    46. e_oemid     dw 0         ; OEM identifier (for e_oeminfo)        /*  24h  */
    47. e_oeminfo   dw 0         ; OEM information; e_oemid specific     /*  26h  */
    48. e_res2      rw 10         ; Reserved words                       /*  28h  */
    49. e_lfanew    dd IMAGE_NT_HEADERS         ; File address of new exe header        /*  3Ch  */
    50. ; IMAGE_DOS_HEADER
    51.  
    52. align 4
    53. IMAGE_NT_HEADERS:
    54. Signature dd IMAGE_NT_SIGNATURE
    55. IMAGE_FILE_HEADER:
    56. Machine                 dw IMAGE_FILE_MACHINE_I386
    57. NumberOfSections        dw NUMBER_OF_SECTIONS
    58. TimeDateStamp           dd %t
    59. PointerToSymbolTable    dd 0
    60. NumberOfSymbols         dd 0
    61. SizeOfOptionalHeader    dw IMAGE_OPTIONAL_HEADER_SIZE
    62. Characteristics         dw IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_EXECUTABLE_IMAGE or \
    63.                            IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or \
    64.                            IMAGE_FILE_32BIT_MACHINE
    65. ; IMAGE_FILE_HEADER
    66. IMAGE_OPTIONAL_HEADER:
    67. ; Standard fields
    68. Magic                      dw 010Bh
    69. MajorLinkerVersion         db 0
    70. MinorLinkerVersion         db 0
    71. SizeOfCode                 dd 0
    72. SizeOfInitializedData      dd 0
    73. SizeOfUninitializedData    dd 0
    74. AddressOfEntryPoint        dd CODE_RVA + (START - _CODE)
    75. BaseOfCode                 dd 0
    76. BaseOfData                 dd 0
    77. ; NT additional fields
    78. ImageBase                      dd IMAGE_BASE
    79. SectionAlignment               dd SECTION_ALIGNMENT
    80. FileAlignment                  dd FILE_ALIGNMENT
    81. MajorOperatingSystemVersion    dw 4
    82. MinorOperatingSystemVersion    dw 0
    83. MajorImageVersion              dw 0
    84. MinorImageVersion              dw 0
    85. MajorSubsystemVersion          dw 4
    86. MinorSubsystemVersion          dw 0
    87. Win32VersionValue              dd 0
    88. SizeOfImage                    dd (IMPORT_RVA+IMPORT_SIZE)+((SECTION_ALIGNMENT-1)-((IMPORT_RVA+IMPORT_SIZE)+SECTION_ALIGNMENT-1) mod SECTION_ALIGNMENT)
    89. SizeOfHeaders                  dd _CODE
    90. CheckSum                       dd 0
    91. Subsystem                      dw IMAGE_SUBSYSTEM_WINDOWS_GUI
    92. DllCharacteristics             dw 0
    93. SizeOfStackReserve             dd 100000h
    94. SizeOfStackCommit              dd 1000h
    95. SizeOfHeapReserve              dd 100000h
    96. SizeOfHeapCommit               dd 1000h
    97. LoaderFlags                    dd 0
    98. NumberOfRvaAndSizes            dd IMAGE_NUMBEROF_DIRECTORY_ENTRIES
    99. ;    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
    100. Data_Directories:
    101. IMAGE_DIRECTORY_ENTRY_EXPORT            dd 0,0      ;  0   // Export Directory
    102. IMAGE_DIRECTORY_ENTRY_IMPORT            dd IMPORT_RVA,IMPORT_SIZE      ;  1   // Import Directory
    103. IMAGE_DIRECTORY_ENTRY_RESOURCE          dd 0,0      ;  2   // Resource Directory
    104. IMAGE_DIRECTORY_ENTRY_EXCEPTION         dd 0,0      ;  3   // Exception Directory
    105. IMAGE_DIRECTORY_ENTRY_SECURITY          dd 0,0      ;  4   // Security Directory
    106. IMAGE_DIRECTORY_ENTRY_BASERELOC         dd 0,0      ;  5   // Base Relocation Table
    107. IMAGE_DIRECTORY_ENTRY_DEBUG             dd 0,0      ;  6   // Debug Directory
    108. ;      IMAGE_DIRECTORY_ENTRY_COPYRIGHT dd 0,0      ;  7   // (X86 usage)
    109. IMAGE_DIRECTORY_ENTRY_ARCHITECTURE      dd 0,0      ;  7   // Architecture Specific Data
    110. IMAGE_DIRECTORY_ENTRY_GLOBALPTR         dd 0,0      ;  8   // RVA of GP
    111. IMAGE_DIRECTORY_ENTRY_TLS               dd 0,0      ;  9   // TLS Directory
    112. IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG       dd 0,0      ; 10   // Load Configuration Directory
    113. IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT      dd 0,0      ; 11   // Bound Import Directory in headers
    114. IMAGE_DIRECTORY_ENTRY_IAT               dd 0,0      ; 12   // Import Address Table
    115. IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT      dd 0,0      ; 13   // Delay Load Import Descriptors
    116. IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR    dd 0,0      ; 14   // COM Runtime descriptor
    117.                                         dd 0,0      ; 15
    118. ; Data_Directories
    119. ; IMAGE_OPTIONAL_HEADER
    120. IMAGE_OPTIONAL_HEADER_END:
    121. IMAGE_OPTIONAL_HEADER_SIZE = IMAGE_OPTIONAL_HEADER_END - IMAGE_OPTIONAL_HEADER
    122. ; IMAGE_NT_HEADERS
    123. IMAGE_SECTION_HEADER1:
    124. Name1                    db ".text",0,0,0
    125. ;    union {
    126. ;            DWORD   PhysicalAddress
    127. VirtualSize1             dd CODE_SIZE
    128. ;    } Misc;
    129. VirtualAddress1          dd CODE_RVA
    130. SizeOfRawData1           dd _IMPORT - _CODE
    131. PointerToRawData1        dd _CODE
    132. PointerToRelocations1    dd 0
    133. PointerToLinenumbers1    dd 0
    134. NumberOfRelocations1     dw 0
    135. NumberOfLinenumbers1     dw 0
    136. Characteristics1         dd IMAGE_SCN_CNT_CODE or IMAGE_SCN_MEM_EXECUTE or IMAGE_SCN_MEM_READ
    137. ; IMAGE_SECTION_HEADER1
    138. IMAGE_SECTION_HEADER2:
    139. Name2                    db ".idata",0,0
    140. ;    union {
    141. ;            DWORD   PhysicalAddress
    142. VirtualSize2             dd IMPORT_SIZE
    143. ;    } Misc;
    144. VirtualAddress2          dd IMPORT_RVA
    145. SizeOfRawData2           dd IMPORT_SECTION_END - _IMPORT
    146. PointerToRawData2        dd _IMPORT
    147. PointerToRelocations2    dd 0
    148. PointerToLinenumbers2    dd 0
    149. NumberOfRelocations2     dw 0
    150. NumberOfLinenumbers2     dw 0
    151. Characteristics2         dd IMAGE_SCN_CNT_INITIALIZED_DATA or IMAGE_SCN_MEM_READ
    152. ; IMAGE_SECTION_HEADER2
    153. IMAGE_SECTION_HEADER2_END:
    154. times ((FILE_ALIGNMENT-1)-(IMAGE_SECTION_HEADER2_END+FILE_ALIGNMENT-1) mod FILE_ALIGNMENT) db 0
    155.  
    156. _CODE:
    157. CODE_RVA = _CODE + ((SECTION_ALIGNMENT-1)-(_CODE+SECTION_ALIGNMENT-1) mod SECTION_ALIGNMENT)
    158. szTest  db  "Test",0
    159. align 4
    160. START:
    161.     push 0
    162.     push 0
    163.     db 068h
    164.     dd (szTest-_CODE)+CODE_RVA+IMAGE_BASE
    165.     push 0
    166.     db 0FFh,015h
    167.     dd (MessageBox-_IMPORT)+IMPORT_RVA+IMAGE_BASE
    168.     push 0
    169.     db 0FFh,015h
    170.     dd (ExitProcess-_IMPORT)+IMPORT_RVA+IMAGE_BASE
    171.  
    172. _CODE_END:
    173. CODE_SIZE = _CODE_END - _CODE
    174. times ((FILE_ALIGNMENT-1)-(_CODE_END+FILE_ALIGNMENT-1) mod FILE_ALIGNMENT) db 0
    175.  
    176. _IMPORT:
    177. IMPORT_RVA = (CODE_RVA+CODE_SIZE) + ((SECTION_ALIGNMENT-1)-((CODE_RVA+CODE_SIZE)+SECTION_ALIGNMENT-1) mod SECTION_ALIGNMENT)
    178.  
    179.     dd 0,0,0,IMPORT_RVA+(kernel_name - _IMPORT),IMPORT_RVA+(kernel_table - _IMPORT)
    180.     dd 0,0,0,IMPORT_RVA+(user_name - _IMPORT),IMPORT_RVA+(user_table - _IMPORT)
    181.     dd 0,0,0,0,0
    182.  
    183. kernel_table:
    184.     ExitProcess dd IMPORT_RVA+(_ExitProcess - _IMPORT)
    185.     dd 0
    186. user_table:
    187.     MessageBox dd IMPORT_RVA+(_MessageBoxA - _IMPORT)
    188.     dd 0
    189.  
    190. kernel_name db 'KERNEL32.DLL',0
    191. user_name db 'USER32.DLL',0
    192.  
    193. _ExitProcess dw 0
    194.     db 'ExitProcess',0
    195.  
    196. _MessageBoxA dw 0
    197.     db 'MessageBoxA',0
    198. _IMPORT_END:
    199. IMPORT_SIZE = _IMPORT_END - _IMPORT
    200. IMPORT_SECTION_END = _IMPORT_END + ((FILE_ALIGNMENT-1)-(_IMPORT_END+FILE_ALIGNMENT-1) mod FILE_ALIGNMENT)
    201. times ((FILE_ALIGNMENT-1)-(_IMPORT_END+FILE_ALIGNMENT-1) mod FILE_ALIGNMENT) db 0
     
  11. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    В WinHex'e.
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Asterix
    изврат =\
     
  13. Asvald

    Asvald New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2006
    Сообщения:
    58
    Это смотря для каких целей, так, например, так для самостоятельного исследования PE формата очень даже полезно(нестандартное выравнивание секций, изменение любых полей в заголовке и т.д.)
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Asvald
    ну это да. а когда пишешь программку сложную какуюнить, совсем не хочется думать про флаги заголовков и все остальное =)
     
  15. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Кстати сам перешел с masm на fasm. Вначале было непривычно, сейчас жить без него не могу.
    Кстати, еще один плюс фасма - его можно таскать с собой, собирая прогу из исходников на любом компе (он весит ~120Кб с инклудами, вместо 20Мб :)
     
  16. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Asterix
    Распечатаю и буду юзеров пугать )))
     
  17. Interlagos

    Interlagos New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2007
    Сообщения:
    1
    Кстати, да :)
    Лично я вижу преимущество FASMa над MASMом как раз в том, что его можно таскать с собой
    А вообще для себя на первых порах никакой разницы не ощущаю
    ИМХО даже на fasmе проще
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Фасм очень гибкий и расширяемый, поэтому мне нравится )