[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Эх.. Fasm Rulit - нету мозгоебки с компилом
     
  2. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    чуть попозже выложу текст ошибки, которую масм выдает при таком способе=\

    возможно, но я уже купил книжку Калашникова, а она про masm. хотел в электронной версии прочитать, но решил купить.

    еще вопрос: в каком случае надо компилить в com, а в каком в exe?

    +еще один: зачем нужны файлы в расширении *.obj?

    Спасибо!=)
     
    #22 Piflit, 8 Jun 2007
    Last edited: 8 Jun 2007
  3. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    После ассемблирования (с помощью ml) исходник превращается в промежуточную форму - объектный модуль (.obj). Для генерации exe'шника необходимо запустить компоновщик (link), указав ему объектный модуль.
     
    1 person likes this.
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну COM - это уже отжившее своё.
    Такчто в любом случае лучше компилить EXE
    Хотя у комов размер меньше.

    Вообще у ассемблеров не очень большое различие.
    Вот я с легкостью перешел с TASM на FASM и при этом я понял, что с FASM'a надо было начинать с самого начала. Потому что на нем можно тварить чудеса.
    // Анекдот в тему: Решил хакер блины печь, первый блин как всегда вышел Комом, а второй уже EXE'шником
     
    madik and Piflit like this.
  5. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    в тему))

    я тоже хотел начать с fasm'a, но не нашел подходящей литературы, поэтому пришлось поучить masm.
    2 slesh, в чем основные различия tasm/masm и fasm? (наиболее интересен синтаксис)
     
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    FASM рулит в том что не надо мучаться с компилом.
    Все параметры компила пишутся в исходнике проги.
    Вот к примеру некоторые из них:
    1) format PE GUI at 5000000h - компилит в PE EXE под графическую оболочку и базовый адрес кода - 5000000h
    2) format PE - тоже PE EXE но под консоль
    3) format PE64 - под 64 битные системы
    4) use16 - 16-ти битный bin файла
    5) use32 - 32-х битный bin файла
    6) format ELF - вообще под линух.

    Ну и в томже духе. И вообще в FASM можно ресурсы прописывать внутри кода программы.
     
  7. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    2 slesh
    1. если указать в исходнике format PE или format PE GUI at 5000000h, то строчкой ниже надо писать use16 или use32?
    2. почему com весит 25 байт, а ехе 1 кб, причем при запуске ехе вылезает ошибка. вот сам код:
    Code:
    format PE ; com компилился с format binary
    use16   ; закомментивание этой строчки не помогло
    org 100h
    
    mov ah,9
    mov dx,msg
    int 21h
    
    mov ah,0
    int 16h
    
    int 20h
    
    msg db 'Hello World$'        
     
  8. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    2Piflit:
    1. Формат PE подразумевает 32 битную адресацию.
    2. com - программа на диске находится в таком же состоянии как и в памяти, а в exe присутствует ещё туча всякой служебной инфы, PE заголовок, стаб и т.д.

    И ещё, какие нафик прерывания, если ты пишешь под винду? =) Или тогда уже пиши под дос.
     
    1 person likes this.
  9. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Этот код не может исполняться под Windows(иметь PE формат), т.к. напрямую использует прерывания.
     
  10. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    нафиг дос))) буду писать под винду, просто сорц из книжки был именно такой...
    чувствую, придется еще одну покупать, типа "асм под вин32"...
     
  11. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Ниасилишь скорее всего сейчас под винду, попрактикуйся под дос.
    Под винду можешь глянуть Уроки Iczelion'а (http://wasm.ru/publist.php?list=1), правда там под масм, но суть та же.
     
    1 person likes this.
  12. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    я сейчас и не собираюсь, только начал=)
    килограммы мануалов и wasm.ru мне в помощь))

    кстати, я оттуда (wasm.ru) почти дочитал цикл статей про Ollydbg. познавательно))

    ЗЫ но ведь дос приложения можно запускать под вин?... через командную строчку... и тогда их соответственно надо компилить в com, как в моем исходнике... я прав?)
     
  13. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    да =)
     
  14. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    И .exe тоже, только директивы поменять нужно, в fasm'e, к сожалению, сейчас не скажу какие именно. Васм, опять же, в помощь. =)
     
  15. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    RTFM _http://flatassembler.net/docs.php
     
  16. Tikson

    Tikson Elder - Старейшина

    Joined:
    9 Oct 2005
    Messages:
    263
    Likes Received:
    42
    Reputations:
    14
    как открыть com программу в CodeView?
    у меня открываются только exe
     
  17. tcl

    tcl Banned

    Joined:
    17 Jun 2007
    Messages:
    35
    Likes Received:
    49
    Reputations:
    40
    Без понимания ассемблера в дос, ты будешь виндовс чайником.
     
  18. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    нужно обьединить два исходника на masm, но когда я включаю модули из второй в первую, вылезают ошибки в модуле windows.inc, огромная куча, вида:
    syntax error: in structure
    structure improperly initialized

    symbol type conflict: bool
    symbol redefenition: hinst
    если его закомментить то ошибки исчезают

    и в user32.inc ошибка symbol redefinition : wsprintfA

    т.е. как я понял какие-то структуры из windows.inc как-то перекрываются со структурами из других модулей?
    как это можно решить, можно ли вторую программу как-нибудь отдельным модулем c подпрограммой сделать, а из первой её вызывать?

    Code:
    ;модули первой программы
    EXTERN  shutdown@8:NEAR
    EXTERN  recv@16:NEAR
    EXTERN  send@16:NEAR
    EXTERN  accept@12:NEAR
    EXTERN  listen@8:NEAR
    EXTERN  bind@12:NEAR
    EXTERN  closesocket@4:NEAR
    EXTERN  socket@12:NEAR
    EXTERN  CharToOemA@8:NEAR
    EXTERN  WSAStartup@8:NEAR
    EXTERN  wsprintfA:NEAR
    EXTERN  GetLastError@0:NEAR 
    EXTERN  ExitProcess@4:NEAR
    EXTERN  lstrlenA@4:NEAR
    EXTERN  WriteConsoleA@20:NEAR
    EXTERN  GetStdHandle@4:NEAR
    
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\ws2_32.lib
    includelib \masm32\lib\winmm.lib
    include    \masm32\include\kernel32.inc
    include    \masm32\include\winmm.inc
    
    ;модули второй программы
    include \masm32\include\windows.inc
    include \masm32\include\masm32.inc
    include \masm32\include\user32.inc
    include \masm32\include\wsock32.inc
    includelib \masm32\Lib\masm32.lib
    includelib \masm32\Lib\wsock32.lib
    
     
  19. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Выход - закомментировать прототип wsprintfA в windows.inc
    Это ошибка в масме, wsprintfA объявлена и в user32.inc (где и должна быть) и в windows.inc (где ее за каким-то хреном поместили).
     
  20. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    выдрал фтп сервер из пинча
    вроде бы компилиться ml /c /coff /Cp ftp.asm

    потом линкую link /subsystem:windows ftp.obj
    вылезают ошибки unresolved external symbol _SendReply@8
    unresolved external symbol _MainSockListen@0
    unresolved external symbol _ServeThread@4

    в файле obj к функциям SendReply, MainSockListen, ServeThread добавляются какие-то цифры и нижняя черточка перед _функция@8 _функция@0 _функция@4 и линкер не может понять их

    что это?
    у каво есть рабочий исходник ftp сервера?

    ниже то что добавил в файл ftp.asm
    Code:
    .586P
    .MODEL FLAT, stdcall
    include Inc\windows.inc
    include Inc\kernel32.inc
    include Inc\user32.inc
    include Inc\advapi32.inc
    include Inc\ws2_32.inc
    include Inc\wsock32.inc
    include Inc\oaidl.inc
    include Inc\pinch.inc
    include Inc\ole32.inc
    include Inc\shlwapi.inc
    include Inc\oleaut32.inc
    include Inc\shell32.inc
    include Inc\masm32.inc
    include Inc\rasapi32.inc
    include Inc\gdi32.inc
    include Inc\oaidl.inc
    include Inc\aplib.inc
    include Inc\urlmon.inc
    include Inc\wininet.inc
    includelib Lib\ole32.lib
    includelib Lib\kernel32.lib
    includelib Lib\user32.lib
    includelib Lib\oleaut32.lib
    includelib Lib\advapi32.lib
    includelib Lib\shlwapi.lib
    includelib Lib\shell32.lib
    includelib Lib\masm32.lib
    includelib Lib\wsock32.lib
    includelib Lib\ntdll.lib
    includelib Lib\ws2_32.lib
    includelib Lib\rasapi32.lib
    includelib Lib\gdi32.lib
    includelib Lib\urlmon.lib
    includelib Lib\aplib.lib
    includelib Lib\wininet.lib
    
    start:
    	invoke startftp
    end start
     
    #40 Satell, 19 Jun 2007
    Last edited by a moderator: 29 Apr 2008
    1 person likes this.