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

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

  1. marginal

    marginal New Member

    Joined:
    23 Jul 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    У меня все получилось. Нужно было перевести адаптер в нужный режим

    mov ax,03h
    int 10h
     
  2. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Подскажите пж, как получит и вывысти список файлов в текущем каталоге с буквой диска...
     
  3. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Как вариант GetCurrentDirectory,FindFirstFile,FindNextFile.
     
  4. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Диск и файлы дирруктории

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

    Code:
    На получение диска и текущей дирректории
    
    CODESG  SEGMENT PARA 'Code'
            ASSUME  CS:CODESG,DS:CODESG,ES:CODESG
            ORG     100H
    BEGIN:  JMP     SHORT MAIN
    ; -----------------------------------------------
    PATHNAM DB      65 DUP(' ')     ;Имя текущего пути доступа
    ; -----------------------------------------------
    MAIN    PROC    NEAR
            MOV     AH,19H          ;Определить текущий диск
            INT     21H
            ADD     AL,41H          ;Заменить шест.номер
            MOV     DL,AL           ;   на букву: 0=A, 1=B ...
            CAL     B10DISP         ;Выдать номер дисковода,
            MOV     DL,':'
            CAL     B10DISP         ;   двоеточие,
            MOV     DL,'\'
            CAL     B10DISP         ;   обратную косую
    
            MOV     AH,47H          ;Получить текущий каталог
            MOV     DL,00
            LEA     SI,PATHNAM
            INT     21H
    A10LOOP:
            CMP     BYTE PTR [SI],0 ;Конец имени пути доступа
            JE      A20             ;   да - выйти
            MOV     AL,[SI]         ;Выдать на экран
            MOV     DL,AL           ;   имя пути доступа
            CALL    B10DISP         ;   побайтно
            INC     SI
            JMP     A10LOOP
    A20:    RET                     ;Выход в DOS
    MAIN    ENDP
    
    B10DISP PROC    NEAR
            MOV     AH,02           ;в DL - адрес элемента
            INT     21H             ;Функция вывода на экран
            RET
    B10DISP ENDP
    
    CODESG  ENDS
            END     BEGIN
    
    ===========================================

    Code:
    На получение файлов в дирректории
    
        .model tiny
        .code
        org 100h
    start:
    
    pathnam db 65 dup(' ')
    main proc near
    mov ah,19h
    int 21h
    add al,41h
    mov dl,al
    call b10disp
    mov dl,':'
    call b10disp
    mov dl,'\'
    call b10disp
    
    mov ah,47h
    mov dl,00
    lea si,pathnam
    int 21h
    a10loop:
    cmp byte ptr [si],0
    je a20
    mov al,[si]
    mov dl,al
    call b10disp
    inc si
    jmp a10loop
    a20: ret
    main endp
    
    b10disp proc near
    mov ah,02
    int 21h
    ret
    b10disp endp
        ; по умолчанию DTA находится в PSP, но мы можем задать ей другое расположение
        ; (а можем и работать со старым адресом). вобщем переместим
        mov ah,1ah
        mov dx,offset dta
        int 21h
       
        ; FindFirstFile
        mov ah,4eh
        mov cx,0110111b         ; устанавливаем аттрибуты, какие файлы искать
        mov dx,offset searchPath
        int 21h
        jc quit
    
    print_filename:
        ; имя файла находится по смещению 1Eh в DTA и завершается нулем
        ; теперь выводим имя найденного файла. сразу отмечу, чтобы не тратить время на
        ; красивый вывод делаю так: имя файла - последнее поле в DTA, поэтому ставлю
        ; после DTA символ конца строки DOS "$" и вывожу как строку.
        mov ah,9h
        mov dx,offset dta + 1eh
        int 21h
    	
        ; перевод на новую строку
        mov ah,9h
        mov dx,offset crlf
        int 21h
       
        ; FindNextFile
        mov ah,4fh
        mov dx,offset dta
        int 21h
        jnc print_filename    ;если ошибки нет - продолжаем вывод списка файлов, иначе конец программы
    
    quit:
        ;вывод сообщения
        mov ah,9h
        mov dx,offset message
        int 21h
    	
        ; задержка
        xor ax,ax
        int 16h
       
        mov ah,4ch
        int 21h
    
    ; data    
    searchPath  db "*.*",0
    dta     db 2ch dup (?)
            db "$"
    ;crlf db 13,10,'$' ;новая строка
    crlf db 0Dh,0Ah,'$' ;аналогично, новая строка
    message db 'Press any key...','$'
    
    end start
    
    
     
  5. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    Нужно написать конструкцию типа
    cmp eax,eax
    je xxxxxxx

    с помощью опкодов, худо бедно нашел документацию http://ref.x86asm.net/
    опкод cmp - 0x3d вопрос а что делать с параметрами, как их записать....
     
  6. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    t3zo, параметры передаются сразу после опкода операнда.
    [​IMG]
     
    _________________________
    #1286 VY_CMa, 5 Oct 2012
    Last edited: 5 Oct 2012
  7. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    0x3D,0x00,0x00 ; cmp eax,eax
    0x74,0x12,0x34,0x56,0x78 ; je 12345678
    верно?


    ------
    А вот, картинка, отобразилась, понял.... Но как понять "опкод" оератора - регистра например, тоже задокументировано?
     
    #1287 t3zo, 5 Oct 2012
    Last edited: 5 Oct 2012
  8. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Code:
    32-bit general registers
    
        EAX is 0, ECX is 1, EDX is 2, EBX is 3, ESP is 4, EBP is 5, ESI is 6, and EDI is 7.
    Segment registers
    
        ES is 0, CS is 1, SS is 2, DS is 3, FS is 4, and GS is 5.
    Floating-point registers
    
        ST0 is 0, ST1 is 1, ST2 is 2, ST3 is 3, ST4 is 4, ST5 is 5, ST6 is 6, and ST7 is 7.
    64-bit MMX registers
    
        MM0 is 0, MM1 is 1, MM2 is 2, MM3 is 3, MM4 is 4, MM5 is 5, MM6 is 6, and MM7 is 7.
    
    Полная версия тут http://courses.engr.illinois.edu/ece390/books/labmanual/inst-ref-opcode-desc.html
     
    _________________________
    1 person likes this.
  9. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    как правильно записать je 0x12345678 в опкоде, не могу понять


    мол есть DWORD address = (DWORD)&lpfnMS;

    и как представить в виде опкода 0x07 address
    не получается
     
    #1289 t3zo, 8 Oct 2012
    Last edited: 8 Oct 2012
  10. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Вот что вычитал:"Инструкция условного перехода может осуществлять или нет переход на целевую (указанную в ней) метку, в зависимости от состояния регистра флагов".То есть, как я понял,не получится прыгать на адрес сразу.При использовании
    условного перехода формируется относительный адрес прыжка.Посмотрев в отладчик можно заметить как он формируется.Если прыгаем вниз то указываем на сколько байтов к примеру прыгаем на адрес ниже нас на 3 байта 0х74 03.Прыгаем на адресс выше нас на 3 байта FF-1байт(0х74)-сколько байт хотим перепрыгнуть 3 = 0x74 FB.Загляните в отладчик и все сразу станет понятно.
     
  11. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    Заглядывал!))))) Ну, а что делать, если нужный адресс меняется постоянно?

    можно сделать, типа исходный адресс - нужный = параметр je?
     
    #1291 t3zo, 8 Oct 2012
    Last edited: 8 Oct 2012
  12. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Можно и так.Только не забывай, если прыгаешь вверх отнимать 1 байт.
     
  13. Protocoler

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

    Joined:
    10 Oct 2012
    Messages:
    51
    Likes Received:
    54
    Reputations:
    81
    Немогу найти Code.View debugger для 64 битной ОС. Помогите найти пожалуйста.
     
    2 people like this.
  14. swt1

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

    Joined:
    16 Feb 2008
    Messages:
    306
    Likes Received:
    78
    Reputations:
    21
    Protocoler, пфф реликт, мб вам что другое нужно?
    x64 нету.
    ваш выход,VM.
     
  15. Raccoon-fs

    Raccoon-fs New Member

    Joined:
    29 Jun 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Читаю ассемблер, но не знаю как реализовать его на практике. Цель у меня для начала написать брутфорс, чем дальше читаю тем больше меня этот язык вводит ступор, есть ли какие пособия, видео курсы, или что подобное для наглядного примера? Если есть заранее благодарен и прошу дать ссылочку на источник.
     
  16. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Брутфорс чего? Если каких-то сетевых ресурсов, то ассемблер нафиг не сдался и его использование не даст преимуществ.
     
    _________________________
  17. Raccoon-fs

    Raccoon-fs New Member

    Joined:
    29 Jun 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Вообщем проблема возникла у меня в том, что, решил дедики брутить, но большинство брутов плохие или платные решил написать для себя свой, читаю, и у меня совсем ничего не получается.
     
  18. Raccoon-fs

    Raccoon-fs New Member

    Joined:
    29 Jun 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Ассемблер решил использовать потому что, при компилировании с него выходят мало обьемные EXE - шники прочитал где то что он прекрасен для создания шпионских программ, и подумал написать на чистом ассемблере, но сколько не читаю ничего подобного в нем найти не могу.
     
  19. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    С тем же успехом можно на С написать всё и получить код такого же или меньшего объема.
     
    _________________________
  20. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Нет смысла изучать асм, если тебе самому не интересно. Гораздо проще будет изучать языки высокого уровня, тем более сейчас. Компиляторы высокого уровня компилят гораздо более оптимизированее, чем ты сам напишешь на асме.