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

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

  1. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    urldownloadtofile тоже подойдет
     
    2 people like this.
    1. Ins3t

      Ins3t Харьковчанин

      Joined:
      18 Jul 2009
      Messages:
      939
      Likes Received:
      429
      Reputations:
      139
      ты стало быть шутишь. но если диалог пошел в этом направление - Intel Manuals научит.
       
      #1342 Ins3t, 9 Feb 2014
      Last edited: 9 Feb 2014
      1. DeepBlue7

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

        Joined:
        2 Jan 2009
        Messages:
        359
        Likes Received:
        50
        Reputations:
        12
        Вопрос по ассемблеру.

        Требуется следующие: из внешней программы сгенерировать так называемый codecave и вбить его в процесс. Дело в прочем не сложное, но столкнулся с следующей проблемой:
        команды JE, JLE и т.п. принимают байты, не совпадающие с реальными байтами адреса назначения (т.е. принимает относительный "оффсет"). Но вот относительно чего ?
         
        1. neviens

          neviens Member

          Joined:
          9 Oct 2013
          Messages:
          82
          Likes Received:
          28
          Reputations:
          3
          Относительно начала следующей команды.
           
          1. DooD

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

            Joined:
            30 Sep 2010
            Messages:
            1,168
            Likes Received:
            450
            Reputations:
            288
            подсмотри адрес в отладчике и вбей его "статично" в код, т.е. не джамп на метку,а джамп на адрес.
             
            1. KIR@PRO

              KIR@PRO from Exception

              Joined:
              26 Dec 2007
              Messages:
              826
              Likes Received:
              291
              Reputations:
              359
              Он то, как раз научит, но ни как не фасмовский мануал! Имейте совесть различать мануалы! Вообще интеловские и амдешные мануалы это библия ассемблера.......
               
              _________________________
              #1346 KIR@PRO, 19 Feb 2014
              Last edited: 19 Feb 2014
              1. Ins3t

                Ins3t Харьковчанин

                Joined:
                18 Jul 2009
                Messages:
                939
                Likes Received:
                429
                Reputations:
                139
                что ты мне пытаешься доказать? я вроде все предельно просто обрисовал. берешь мануал по тому же фасму и читаешь. там чудесно написано как переместить значение из одного регистра в другой, как сравнить значения, умножить одно на другое и вызвать функцию. интеловские мануалы - это всего лишь тутор по работе проца. ассемблер - всего навсего инструмент для работы с ним. и если ты не пишешь свой компилятор ассемблера, или ось какую ниюуть - то тебе по большому счету проебом на то, что на самом деле хранят сегментные регистры, или по каком правилам генерятся опкоды, или как генерятся прерывания. по большому счеты все это имет весьма косвенное отношение к ассемблеру.
                 
                1. KIR@PRO

                  KIR@PRO from Exception

                  Joined:
                  26 Dec 2007
                  Messages:
                  826
                  Likes Received:
                  291
                  Reputations:
                  359
                  С этого надо было начинать, теперь понятно ваше представление о ассемблере. Печально.

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



                  p.s. продолжать дискуссию не вижу смысла, ибо она в таком случае выйдет за рамки топика.
                   
                  _________________________
                  #1348 KIR@PRO, 19 Feb 2014
                  Last edited: 19 Feb 2014
                  1. Ins3t

                    Ins3t Харьковчанин

                    Joined:
                    18 Jul 2009
                    Messages:
                    939
                    Likes Received:
                    429
                    Reputations:
                    139
                    такое впечатление как будто со стенкой разговариваю.

                    может поделишься своим пониманием?

                    опять же слова общие у тебя. я утверждаю что получится. и не нужно мне про бедного человека заливать, которому совет нужет. тебе важнее сей час правым оказаться, а не помочь ему. твои посты не информативны увы. напоминиет чем то:

                    Я: утверждаю, что "XYZ"
                    Ты: НЕТ.
                    Я: да, аргумент1, аргумент2, аргумент3. либо докажи обратное
                    Ты: я же сказал, НЕТ.

                    это говорит человек, который несколько дней назад расплескал 3 страницы нытья из за того что его в гугл направили? не смеши меня. лучше поясняй свою точку зрения если она у тебя есть.
                     
                    1 person likes this.
                    1. KIR@PRO

                      KIR@PRO from Exception

                      Joined:
                      26 Dec 2007
                      Messages:
                      826
                      Likes Received:
                      291
                      Reputations:
                      359
                      Ins3t Я высказал все в самом первом сообщении еще несколько месяцев назад. Я вижу что тебе Ассемблер знаком поверхностно.

                      Конечно можно назвать интеловские мануалы - тутором по процу, но говорить что ассемблер - инструмент для работы с процом это уже грубо. Каждая инструкция ассемблера выступает как источник питания для определенной электрической цепи процессора.


                      ты похож на С++ кодера который поглядел в отладчик, потом ознакомился с fasm/masm/nasm/tasm и теперь считает что знает ассемблер....
                      Тебе к примеру известны префиксы которые при использовании с интрукциями условного перехода указывают на вероятность перехода ожидаемый/не ожидаемый?


                      я тебя умоляю, где ты аргументы приводил? Утрировать у тебя получается красиво! Я же теюе говорю, что по мануалам ни фасама, ни Насама, ни какого либо другого ассемблеру не научишься.... Вот только не надо после этих слов интеловские мануалы приводить, они и есть учебник, но ты не его порекомендовал а мануал от "компилятора".

                      Если для тебя нет разницы между интеловскими мануалами и мануалом от fasm, то рекомендую почитать интеловские мануалы.




                      Даты посмотри, ты очнулся спустя почти пол года... и сейчас пытаешься что то доказывать, что мне это больше надо...


                      ты даты посмотри, пустослов... и перечитай внимательней эти 4 страницы...
                      Если ты считаешь, что с форума слать в гугл это нормально, то удались и ищи все в гугле, новости на ачате итак прочитать сможешь.



                      p.s. модеры, потрите плиз последние сообщения, оффтопа много.
                       
                      _________________________
                      #1350 KIR@PRO, 19 Feb 2014
                      Last edited: 19 Feb 2014
                      1. MaxFast

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

                        Joined:
                        12 Oct 2011
                        Messages:
                        575
                        Likes Received:
                        149
                        Reputations:
                        94
                        Как добавить инклуд с файлом ресурсов в FASM?
                         
                        1. KIR@PRO

                          KIR@PRO from Exception

                          Joined:
                          26 Dec 2007
                          Messages:
                          826
                          Likes Received:
                          291
                          Reputations:
                          359

                          section '.rsrc' resource from 'my_res.RES'
                           
                          _________________________
                          1 person likes this.
                          1. Dimka-nov

                            Dimka-nov New Member

                            Joined:
                            15 Feb 2014
                            Messages:
                            5
                            Likes Received:
                            0
                            Reputations:
                            0
                            В IDA_Pro_Advanced_6.1_Full решил отладить прогу я
                            Вот открываю я программу

                            [​IMG][/url][​IMG] [/img]

                            [​IMG][/URL][/img]

                            [​IMG][/URL][/img]

                            [​IMG][/URL][/img]

                            Вот я ее открыл. Что это за интерфейс? то есть почему я вижу маленьий участок кода?Какие шаги мне придпринять
                             
                            1. #colorblind

                              #colorblind Moderator

                              Joined:
                              31 Jan 2014
                              Messages:
                              631
                              Likes Received:
                              245
                              Reputations:
                              42
                              Удали иду, это лучший выход в твоем случае
                               
                              1. Dimka-nov

                                Dimka-nov New Member

                                Joined:
                                15 Feb 2014
                                Messages:
                                5
                                Likes Received:
                                0
                                Reputations:
                                0
                                Олли ее просто не открывает. Ну начинает открывать, видно также окошко с предуприждением. Жму окей- раз оп и олли пропадает!
                                 
                                1. #colorblind

                                  #colorblind Moderator

                                  Joined:
                                  31 Jan 2014
                                  Messages:
                                  631
                                  Likes Received:
                                  245
                                  Reputations:
                                  42
                                  Скачай сборку, поставь плагины. В проге возможно антиотладка, вот олька и вылетает
                                   
                                  1. Dimka-nov

                                    Dimka-nov New Member

                                    Joined:
                                    15 Feb 2014
                                    Messages:
                                    5
                                    Likes Received:
                                    0
                                    Reputations:
                                    0
                                    Да!! В проге антиотладка, вот олька и вылетает. Против этого помогает Phantom для того чтобы скрыть отладчик нужен всего лишь один плагин. Есть один такой прекрасный плагин - Phantom от Hellspawn-а. Phantom делает свою работу прекрасно, прячет отладчик практически от всего.



                                    Помогите пожалуста распаковать VMProtect!!!

                                    Ниже я приведу суперотличнийший туториал по этому протектору, с ним же комплекс настроенных инструментов. (Автору респект 100%!!!!)


                                    И так. Программа http://webfile.ru/08f06ff4274f699e3d863ad25ae3047e
                                    Дальше я скачиваю и читаю http://webfile.ru/d7006031b798063b4371890321f2fdc3 .
                                    Вот не помню, откуда скачал- видемо откуда то с exelab. К стати
                                    офигено понравилось как написано!!
                                    И вот, делаю.Ищу OEP (стр 21) .
                                    Скрин http://webfile.ru/d091ba9c619edbc5c49beb52d3d6d0bf и http://webfile.ru/00f7273d8ae2336ba5e8df0d004d906d . Вопрос- Наверное ерунда какая то вышла.Или нет?
                                    Я программу запускаю сначала т.е открываю ее в OlliDbg и пытаюсь чирез
                                    Go To- Expression пoйти туда, куда указал скрипт- на 5FD63D.
                                    Cvjnhbnt!!!!Я никуда не прихожу! Я тиряюсь- а что же это и что же я делаю..
                                    Ну просто не знаю, что это, насколько я баран и где!



                                    В общем. Дийствитильно я на OEP или нет? Помогите понять пожалуйста!! И разобрать прогу дальше.
                                    Например мне непонятно удалось ли мне встать на EntryPoint этой программы.
                                    Я сам это не понял. Выполнение скрипта остановилость на строке 5FD63D.
                                    А самое непонятное, что когда я в отладчике OllyDbg снова открыл программу
                                    и попробовал стать на этот адрес, я увидел совсем не то, что при выполнении скрипта.
                                    Увидел отсуцтвие кода, по-сути. Вероятно я туплю зверски.

                                    Выходит что. Когда скрипт выполняит поиск OEP, я после этого в
                                    OllyDbg вижу как будто бы вменяемый код, который начинается с 0040100.
                                    До работы скрипта OllyDbg показывает на тех-же адресах ряды нолей.
                                    Но может так и надо!

                                    А на счет OEP пожалуста напишите-то или нет??
                                     
                                    1. #colorblind

                                      #colorblind Moderator

                                      Joined:
                                      31 Jan 2014
                                      Messages:
                                      631
                                      Likes Received:
                                      245
                                      Reputations:
                                      42
                                      Ты даже на этом форуме, как мудак, умудрился ошибиться разделом. На exelab'e тебе четко сказали, либо обращайся в эту тему https://ssl.exelab.ru/f/index.php?action=vthread&forum=1&topic=17633&page=23, либо отдыхай
                                       
                                      1. gidrokcid

                                        gidrokcid New Member

                                        Joined:
                                        21 Oct 2015
                                        Messages:
                                        1
                                        Likes Received:
                                        0
                                        Reputations:
                                        0
                                        Суть задания такая(VMLab):
                                        раз в секунду запускается АЦП, измеренное значение напряжения, формируемого
                                        управляемым источником напряжения, выдается в двоичном виде на линейку светодиодов.

                                        ; ******************************************************
                                        ; BASIC .ASM template file for AVR
                                        ; ******************************************************

                                        .include "C:\VMLAB\include\m88def.inc"

                                        ; Define here the variables
                                        ;
                                        .def temp =r16

                                        ; Define here Reset and interrupt vectors, if any
                                        ;
                                        reset:
                                        rjmp start
                                        reti ; Addr $01
                                        reti ; Addr $02
                                        reti ; Addr $03
                                        reti ; Addr $04
                                        reti ; Addr $05
                                        reti ; Addr $06 Use 'rjmp myVector'
                                        reti ; Addr $07 to define a interrupt vector
                                        reti ; Addr $08
                                        reti ; Addr $09
                                        reti ; Addr $0A
                                        reti ; Addr $0B This is just an example
                                        reti
                                        rjmp TIM1_OVF
                                        reti ; Addr $0F
                                        reti ; Addr $10
                                        reti ; Addr $11
                                        reti ; Addr $12
                                        reti ; Addr $13
                                        reti ; Addr $14
                                        rjmp interraptADC ; Addr $15 ADC Conversion Complete


                                        ; Program starts here after Reset
                                        ;
                                        start:
                                        ldi r16, low(RAMEND)
                                        out SPL, r16

                                        ldi r16, high(RAMEND)
                                        out SPH, r16

                                        ldi r16, 0b00011111
                                        out DDRB, r16

                                        ldi r16, (1<<CS10)
                                        sts TCCR1B, r16

                                        ldi r16, (1<<TOIE1)
                                        sts TIMSK1, r16


                                        cbi DDRC, 0


                                        ldi r16, (1<<REFS0)|(0<<REFS1)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0) ;îïîðíîå íàðÿæåíèå - íàïðÿæåíèå ïèòàíèÿ...PC0 - íîæêà ÀÖÏ
                                        sts ADMUX, r16

                                        ldi r16, (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2) ;âêë ÀÖÏ...ðàçðåøèë ïðåðûâàíèå îò ÀÖÏ...âûáîð íåïðåðûâíîãî ïðåîáðàçîâàíèÿ...ðàçðåøèë ïðåðûâàíèå ïî ÀÖÏ...÷àñòîòà 1 ÌÃö
                                        sts ADCSRA, r16

                                        ldi r16, (1<<ADTS2)|(1<<ADTS1)|(1<<ADTS0)
                                        sts ADCSRB, r16

                                        sei

                                        forever:

                                        rjmp forever

                                        TIM1_OVF:
                                        sbis interraptADC:
                                        rjmp mll
                                        cbi interraptADC:
                                        reti
                                        mll:
                                        sbi interraptADC:
                                        reti

                                        interraptADC:
                                        ldi r16, (0<<PORTB4)|(0<<PORTB3)|(0<<PORTB2)|(0<<PORTB1)|(0<<PORTB0)
                                        out PORTB, r16

                                        lds r16, ADCH
                                        mov r17, r16

                                        subi r17, 0b11111111 ;255

                                        brsh metka1 ;ïåðåéòè åñëè r16 >= 255

                                        mov r17, r16

                                        subi r17, 0b11001100 ;204
                                        brsh metka2 ;ïåðåéòè åñëè r16 >= 205

                                        mov r17, r16

                                        subi r17, 0b10011001 ;153
                                        brsh metka3 ;ïåðåéòè åñëè r16 >= 153

                                        mov r17, r16

                                        subi r17, 0b10011001 ;102
                                        brsh metka4 ;ïåðåéòè åñëè r16 >= 102

                                        mov r17, r16

                                        subi r17, 0b10011001 ;51
                                        brsh metka4 ;ïåðåéòè åñëè r16 >= 51

                                        reti

                                        metka1:
                                        ldi r16, (1<<PORTB4)|(1<<PORTB3)|(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0)
                                        out PORTB, r16
                                        reti
                                        metka2:
                                        ldi r16, (1<<PORTB3)|(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0)
                                        out PORTB, r16
                                        reti
                                        metka3:
                                        ldi r16, (1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0)
                                        out PORTB, r16
                                        reti
                                        metka4:
                                        ldi r16, (1<<PORTB1)|(1<<PORTB0)
                                        out PORTB, r16
                                        reti
                                        metka5:
                                        ldi r16, (1<<PORTB0)
                                        out PORTB, r16
                                        reti

                                        не могу понять как правильно настроить ADCSRB под Atmega88
                                        и как правильно прописать запуск Ацп в таймере
                                        это небольшой набросок мой программы
                                         
                                        1. Koroz147

                                          Koroz147 New Member

                                          Joined:
                                          6 Dec 2015
                                          Messages:
                                          1
                                          Likes Received:
                                          0
                                          Reputations:
                                          0
                                          Компоновка ассемблерной программы с программой С++. Посчитать количество повторений первого элемента в пятисимвольном массиве.

                                          Инициализацию массива делаю в С++, дальше передаю указатель на массив в ассемблерную функцию
                                          и ожидаю получить результат(количество элементом массива эквивалентных первому).

                                          Не понимаю в чем ошибка, перепробовал уже всё что угодно. В одних случаях возвращает что-то вроде 6543, а сейчас возвращает "1".

                                          Прошу помощи.

                                          Ассемблерная программа


                                          1. .486
                                            .model
                                            flat, stdcall
                                            option casemap:none

                                            .code
                                            F proc, arr:DWORD

                                            xor ebx,ebx
                                            xor ecx,ecx
                                            mov esi,0

                                            mov eax, arr[0]

                                            mov cx, 5
                                            start_loop:
                                            mov edx, arr[esi]
                                            cmp eax, edx

                                            jz M2

                                            M1:
                                            inc esi

                                            loop start_loop
                                            jmp end_loop

                                            M2:
                                            add ebx,1
                                            inc esi

                                            loop start_loop

                                            end_loop:
                                            mov eax,ebx

                                            RET
                                            F endp
                                            end
                                            Программа на С++:

                                            1. #include <iostream>
                                              #include <Windows.h>

                                              using namespace std;
                                              #define USINT unsigned short int

                                              unsigned short int arr[5];
                                              unsigned short int num=5;
                                              unsigned short int number=0;
                                              extern "C" int _stdcall F(USINT*);

                                              int main()
                                              {
                                              SetConsoleCP(1251);
                                              SetConsoleOutputCP(1251);
                                              cout << "Введите элементы массива:" << endl;
                                              for (unsigned short int i = 0; i < 5; i++)
                                              {
                                              cout << i << ": ";
                                              cin >> arr;
                                              }

                                              number=0;
                                              number=F(arr);

                                              cout<<endl<<"Количество повторений первого элемента = "<<number<<endl;
                                              system("pause");
                                              return 0;
                                              }