Ассемблер. Начало.

Discussion in 'Реверсинг' started by comstream, 24 Jan 2019.

  1. comstream

    comstream Member

    Joined:
    11 Aug 2015
    Messages:
    35
    Likes Received:
    11
    Reputations:
    0
    Всем привет!

    Не так давно начал изучать взрывной для меня и для моего моСка курс

    «PROGRAMMING ASSEMBLER»

    Код пишу в NotePad++ с подсветкой синтаксиса Assebly, а компилирую и дебажу в Microsoft Visual Studio 15 .

    Выкладываю пример решения простенькой задачи (для меня, как начинающего это было совсем не просто).

    ЗАДАЧА:

    Создайте программу, выводящую на экран все четырёхзначные числа последовательности 1000 1003 1006 1009 1012 1015 ….

    Решение:


    [​IMG]

    [​IMG]

    [​IMG]

    Создайте программу, выводящую на экран все четырёхзначные числа последовательности 1000 1003 1006 1009 1012 1015 ….
    .MODEL FLAT, STDCALL
    SetConsoleTitleA PROTO: DWORD; функция установки заголовка консоли
    GetStdHandle PROTO: DWORD
    WriteConsoleA PROTO: DWORD, DWORD, DWORD, DWORD, DWORD
    ReadConsoleA PROTO: DWORD, DWORD, DWORD, DWORD, DWORD
    ExitProcess PROTO: DWORD
    Sleep PROTO: DWORD
    .const
    sConsoleTitle BYTE «1000 to 9999»,0
    numC WORD 1000d
    numB WORD 9999d
    sleepTime WORD 5000d
    increment WORD 3d
    stringLenght BYTE 6d
    .data
    number BYTE 4 DUP(0),10,13;Массив для хранения разрядов числа (10,13 — символы перевода каретки)

    .code
    main PROC

    ;push OFFSET sConsoleTitle
    ;call SetConsoleTitleA

    INVOKE SetConsoleTitleA, OFFSET sConsoleTitle
    xor ECX,ECX
    mov CX,numC
    ;цикл
    wh1:
    cmp CX,numB
    jnl endwh1
    call show
    add CX, increment
    jmp wh1
    endwh1:

    ;push sleepTime
    ;call Sleep

    INVOKE Sleep, sleepTime

    ;push 0
    ;call ExitProcess

    INVOKE ExitProcess, 0
    ret
    Main ENDP

    ; процедура разбития на разряды
    show PROC
    LOCAL hStdout :DWORD
    push EAX
    INVOKE GetStdHandle, -11
    mov hStdout, EAX
    pop EAX
    ;push EAX
    ;выделение 1000

    mov AX,CX
    xor DX,DX
    mov BX,1000d
    div BX
    or AL,30h
    mov number[0],AL
    ;выделение 100
    mov AX,DX
    xor DX,DX
    mov BX,100d
    div BX
    or AL,30h
    mov number[1],AL
    ;выделение 10
    mov AX,DX
    xor DX,DX
    mov BX,10d
    div BX
    or AL,30h
    mov number[2],AL
    ;выделение единиц
    or DL,30h
    mov number[3],DL
    ;Выводим число
    push ECX
    ;push 0
    ;push 0
    ;push 6d
    ;push OFFSET number
    ;push hStdout
    ;call WriteConsoleA

    INVOKE WriteConsoleA, hStdout, OFFSET number, stringLenght, 0, 0
    pop ECX
    ret
    show ENDP
    END main



    Результат работы:

    [​IMG]

    Поддерживаю критику в комментариях. Спасибо

    С Уважением, C0mstr3am
     
    #1 comstream, 24 Jan 2019
    Last edited: 24 Jan 2019
    CKAP and BillyBons like this.
    1. Turanchocks_

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

      Joined:
      11 May 2013
      Messages:
      1,326
      Likes Received:
      3,283
      Reputations:
      17
      Для начала - прячем код под спойлер. Смайлики в простынях - пригрешение
       
      K800 likes this.
      1. comstream

        comstream Member

        Joined:
        11 Aug 2015
        Messages:
        35
        Likes Received:
        11
        Reputations:
        0
        Исправляю. Спасибо
         
        1. Damper

          Damper Member

          Joined:
          6 Jul 2015
          Messages:
          51
          Likes Received:
          18
          Reputations:
          1
          Для "совсем начала" я бы советовал >>ЭТОТ<< курс.Конечно,не без погрехов,но один из простейших и толковых курсов.
           
          #4 Damper, 9 Mar 2019
          Last edited: 29 May 2020
          CKAP likes this.
          1. altblitz

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

            Joined:
            5 Jun 2009
            Messages:
            3,691
            Likes Received:
            3,145
            Reputations:
            236
            Этот MS синтаксис - путь в тупик.
            Правильный ассемблер - на синтаксисе Intel и с ассемблером GAS - GNU Assembler.

            Желаешь научится в asm coding?
            Скачай Turbo Debugger Borland и пару простейших cracks для изучения. Там - всё что нужно на практике.

            Кстати.
            GAS умеет вызывать и обращаться к функциям и процедурам .dll libraries MS.
            GAS умеет выравнивать массивы .data и .code, по 32-битной адресации в памяти, для самого быстрого доступа к данным и ввода инструкций в конвейер процессора для обработки. MS - такого не умеет.
             
            CKAP likes this.
            1. t0ma5

              t0ma5 Reservists Of Antichat

              Joined:
              10 Feb 2012
              Messages:
              828
              Likes Received:
              815
              Reputations:
              90
              какие то абстракции в коде видно, это уже не асм) когда то очень давно был хороший курс от калашникова, хм даже что то гуглится http://publ.lib.ru/ARCHIVES/K/KALASHNIKOV_Oleg_Aleksandrovich/_Kalashnikov_O.A..html :) я по этому курсу смог разобраться в основах
               
              _________________________
              BillyBons likes this.
              1. altblitz

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

                Joined:
                5 Jun 2009
                Messages:
                3,691
                Likes Received:
                3,145
                Reputations:
                236
                Каким редактором текста пользуется некто comstream?
                Всё кал. Даже mcedit и micro.

                Годно - sublime text. С лицензией от Сноудена.

                [​IMG]
                 
                1. t0ma5

                  t0ma5 Reservists Of Antichat

                  Joined:
                  10 Feb 2012
                  Messages:
                  828
                  Likes Received:
                  815
                  Reputations:
                  90
                  блиц речь про асм была)) а ты тут баши какие то продвигаешь
                   
                  _________________________
                  quite gray and Spinus like this.
                  1. altblitz

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

                    Joined:
                    5 Jun 2009
                    Messages:
                    3,691
                    Likes Received:
                    3,145
                    Reputations:
                    236
                    Так или иначе, любой проект начинается с систематизации файлов.

                    Кто станет запускать GAS ради одного файла?
                    Нужно будет подключить - файлы .desktop и ресурсы с иконками.

                    sublime text, обучен в цветовой синтакс и asm.
                    Это хотел сказать ))
                     
                    1. t0ma5

                      t0ma5 Reservists Of Antichat

                      Joined:
                      10 Feb 2012
                      Messages:
                      828
                      Likes Received:
                      815
                      Reputations:
                      90
                      извини блиц, но любое телодвижение начинается с "оо прикольная тема, попробую сделать". остальное вторично. если речь идёт о рил разработке, то спорить не буду, там без грамотного редактора нечего делать
                       
                      _________________________
                      quite gray, CKAP and altblitz like this.
                      1. altblitz

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

                        Joined:
                        5 Jun 2009
                        Messages:
                        3,691
                        Likes Received:
                        3,145
                        Reputations:
                        236
                        И о чём Блиц говорит?
                        Разобрать досконально keygen с само-упаковщиком - и если не хватит терпения, забыть asm.

                        5% - творчества, 95% - blood, sweat and tears.
                         
                        1. nenarokom

                          nenarokom New Member

                          Joined:
                          12 Nov 2015
                          Messages:
                          1
                          Likes Received:
                          0
                          Reputations:
                          0
                          простые уроки для тех, кому ближе Linux x86-64: https://github.com/0xAX/asm
                           
                          1. altblitz

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

                            Joined:
                            5 Jun 2009
                            Messages:
                            3,691
                            Likes Received:
                            3,145
                            Reputations:
                            236
                            Из своего опыта или по наслышке?
                             
                            1. mankurt13

                              mankurt13 Well-Known Member

                              Joined:
                              18 Oct 2019
                              Messages:
                              378
                              Likes Received:
                              1,542
                              Reputations:
                              3
                              Скушно тут в разделе реверс. Заметил это ассемблероначало и решил некропостнуть: так ассемблер начинать не надо.
                              1. В задаче ни слова о том, что нужно вставлять паузу - это художник ее там так видит?
                              2. Везде, где можно и нельзя, используются 16бит регистры (как в книжках про ассемблер на досе) в 32бит режиме - зачем? Это удлинняет каждую инструкцию на 1 байт префикса. Это к вопросу о том, почему не надо дебажить студией.
                              3. Ни малейшего намека на оптимизацию - делить одно и то же число на 1000, 100 и 10 безусловно очень хрестоматийно, но ужасно убого смотрится.
                              4. То, что планируешь использовать в программе более 1 раза, оформляй как процедуру/функцию, не планируешь - не оформляй. Сишные привычки начиная ассемблер лучше забыть. ecx в качестве счетчика в цикле, где есть вызовы апи - так себе решение. Взял бы ebx/esi/edi - и пушить-попить ничего не понадобилось бы.
                              5. Консольные утилиты сейчас могут быть полезны только своим свойством вываливать их вывод в файл для дальнейшей обработки. Чтоб это работало WriteConsoleA надо махнуть на WriteFile. Тогда утилита и в консоль строчки выгрузит и с 'test.exe>test.txt' как надо отработает.
                              Code:
                              format pe console 4.0
                              include 'win32ax.inc'
                              entry main
                              
                              section '.code' code data readable executable
                              
                              proc main
                                          locals
                                              hStdOut            dd ?
                                              nIoBytesCount    dd ?
                                              szBuffer        rb 8
                                          endl
                                          invoke GetStdHandle,STD_OUTPUT_HANDLE
                                          mov [hStdOut],eax
                                          mov DWORD[szBuffer + 04],0x0A0D
                                          mov esi,1000
                                          .next:
                                          .if esi < 10000
                                              mov eax,esi
                                              mov edi,4
                                              mov ecx,10
                                              @@:
                                              xor edx,edx
                                              div ecx
                                              add dl,'0'
                                              mov [szBuffer + edi - 1],dl
                                              dec edi
                                              jne @B
                                              invoke WriteFile,[hStdOut],addr szBuffer,6,addr nIoBytesCount,0
                                              add esi,3
                                              jmp .next
                                          .endif
                                          ret
                              endp
                              
                              section '.data' data readable writable
                              data import
                                  library kernel32,'kernel32.dll'
                                  include 'api\kernel32.inc'
                              end data
                               
                              quite gray likes this.
                              1. CKAP

                                CKAP Well-Known Member

                                Joined:
                                9 Oct 2015
                                Messages:
                                652
                                Likes Received:
                                2,865
                                Reputations:
                                8
                                Ну так то наконец то в ветку заглянул ОТЕЦ.
                                --------------------------------------------
                                Для ТС, курсы нахер, они нужны разве только, что бы наглядно разок посмотреть намагию, ну и для быстрого понимания дебага. Лучше это словарь в руке и соответствующие борды. Коих не мало, но народ там бывает поехавшим наглухо. Это нужно учитывать эсли нахер сразу же начнуть посылать.

                                Зы. На кодебай есть такой Мерлин, он там норм вводные статы написал, вплодь до :потрогать ядро.
                                 
                                quite gray and altblitz like this.
                                1. altblitz

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

                                  Joined:
                                  5 Jun 2009
                                  Messages:
                                  3,691
                                  Likes Received:
                                  3,145
                                  Reputations:
                                  236
                                  И что так сразу - тронувшиеся умом на компиляции кернела?
                                  Вот человек, врач и анестезиолог Con Kolivas - пишет патчи кернел, интерактивно скоростные. MuQSS.

                                  [​IMG]

                                  И спасает людей от недугов CoronaV - https://www.abc.net.au/news/2020-04...uipment-to-face-coronavirus-covid-19/12120588
                                   
                                  CKAP likes this.
                                  1. CKAP

                                    CKAP Well-Known Member

                                    Joined:
                                    9 Oct 2015
                                    Messages:
                                    652
                                    Likes Received:
                                    2,865
                                    Reputations:
                                    8
                                    А в свободное от спасения мира дел.. наверное обсуждает на бордах квантовую физику и шлет нахер нубов, которые не к месту и не к стати, лезут со своими жалкими MOVами (:) Да ADDшками
                                     
                                    altblitz likes this.
                                    1. altblitz

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

                                      Joined:
                                      5 Jun 2009
                                      Messages:
                                      3,691
                                      Likes Received:
                                      3,145
                                      Reputations:
                                      236
                                      Есть форум-блог, обсуждения и развития - http://ck-hack.blogspot.com/
                                      http://ck.kolivas.org/patches/5.0/5.6/5.6-ck${_ckpatchversion}/$_ckpatch.xz
                                       
                                      CKAP likes this.
                                      1. altblitz

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

                                        Joined:
                                        5 Jun 2009
                                        Messages:
                                        3,691
                                        Likes Received:
                                        3,145
                                        Reputations:
                                        236
                                        [​IMG]

                                        Сегодня, и NOP не в моде. Девелоперы Clear Linux Intel, меняют на zero - обнуление регистров процессора, сексуально-васисуального ))
                                         
                                        CKAP likes this.
                                        1. CKAP

                                          CKAP Well-Known Member

                                          Joined:
                                          9 Oct 2015
                                          Messages:
                                          652
                                          Likes Received:
                                          2,865
                                          Reputations:
                                          8
                                          Збсь.. я пока подтягиваю Инглишь Лэнг.. С линупсами тоже такое. Мож я есче что не докурил. Но вот ставил затестить лубунту на 1но ядро, 2 рам.. боль и бубен.. работала конечно, но не шустро по сравнению с той же семкой небо и земля. Семка просто божила. Винт конечно оставил, будет скучно попробую оптимизировать. Данка шён вообщем.