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

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.
  2. Turanchocks_

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

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

    comstream Member

    Joined:
    11 Aug 2015
    Messages:
    35
    Likes Received:
    11
    Reputations:
    0
    Исправляю. Спасибо
     
  4. 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.
  5. 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.
  6. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    828
    Likes Received:
    815
    Reputations:
    90
    _________________________
    BillyBons likes this.
  7. altblitz

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

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

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

    [​IMG]
     
  8. t0ma5

    t0ma5 Reservists Of Antichat

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

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

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

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

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

    t0ma5 Reservists Of Antichat

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

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

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

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

    nenarokom New Member

    Joined:
    12 Nov 2015
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
  13. altblitz

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

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

    mankurt13 Well-Known Member

    Joined:
    18 Oct 2019
    Messages:
    378
    Likes Received:
    1,543
    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.
  15. CKAP

    CKAP Well-Known Member

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

    Зы. На кодебай есть такой Мерлин, он там норм вводные статы написал, вплодь до :потрогать ядро.
     
    quite gray and altblitz like this.
  16. 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.
  17. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    652
    Likes Received:
    2,865
    Reputations:
    8
    А в свободное от спасения мира дел.. наверное обсуждает на бордах квантовую физику и шлет нахер нубов, которые не к месту и не к стати, лезут со своими жалкими MOVами (:) Да ADDшками
     
    altblitz likes this.
  18. 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.
  19. 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.
  20. CKAP

    CKAP Well-Known Member

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