Помогите "расшифровать" дизассемблированный код

.file   "Fibas.c" //файл, который был дизассемблирован
    .intel_syntax noprefix //позволяет не ставить % перед регистрами
    .section    .rodata 
    .align 8 
.LC0: 
    .string "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\320\272\320\276\320\273\321\214\320\272\320\276 \321\207\320\270\321\201\320\265\320\273 \320\244\320\270\320\261\320\276\320\275\320\260\321\207\321\207\320\270 \320\262\321\213 \321\205\320\276\321\202\320\270\321\202\320\265 \321\203\320\262\320\270\320\264\320\265\321\202\321\214\n" 
.LC1:
    .string "%d" 
    .align 8
.LC2:
    .string "\320\222\321\213 \320\262\320\262\320\265\320\273\320\270 \320\275\320\265\320\277\321\200\320\260\320\262\320\270\320\273\321\214\320\275\321\213\320\265 \320\264\320\260\320\275\320\275\321\213\320\265\n"
.LC3:
    .string "0 \n"
.LC4:
    .string "%u "
    .text 
    .globl  main 
    .type   main, @function 
main: 
.LFB2: 
    .cfi_startproc 
    push    rbp 
    .cfi_def_cfa_offset 16 
    .cfi_offset 6, -16 
    mov rbp, rsp 
    .cfi_def_cfa_register 6 
    push    rbx 
    sub rsp, 72 
    .cfi_offset 3, -24 
    mov DWORD PTR -68[rbp], 0 
    mov QWORD PTR -32[rbp], 0 
    mov QWORD PTR -40[rbp], 0 
    mov QWORD PTR -48[rbp], 0 
    mov rax, QWORD PTR stderr[rip]
    mov rcx, rax
    mov edx, 93
    mov esi, 1
    lea rdi, .LC0[rip] 
    call    fwrite@PLT 
    lea rax, -68[rbp]
    mov rsi, rax
    lea rdi, .LC1[rip]
    mov eax, 0
    call    __isoc99_scanf@PLT
    cdqe
    mov QWORD PTR -56[rbp], rax
    cmp QWORD PTR -56[rbp], 0
    je  .L2 //условный переход
    mov eax, DWORD PTR -68[rbp]
    test    eax, eax 
    jns .L3 
.L2:
    mov rax, QWORD PTR stderr[rip]
    mov rcx, rax
    mov edx, 54
    mov esi, 1
    lea rdi, .LC2[rip]
    call    fwrite@PLT
    mov eax, 0
    jmp .L9
.L3:
    mov eax, DWORD PTR -68[rbp]
    cdqe
    mov QWORD PTR -56[rbp], rax
    mov eax, DWORD PTR -68[rbp]
    test    eax, eax
    jne .L5
    mov eax, 0
    jmp .L9
.L5:
    mov eax, DWORD PTR -68[rbp]
    cmp eax, 1
    jne .L6
    mov rax, QWORD PTR stderr[rip]
    mov rcx, rax
    mov edx, 3
    mov esi, 1
    lea rdi, .LC3[rip]
    call    fwrite@PLT
    mov eax, 0
    jmp .L9
.L6:
    mov rax, QWORD PTR -56[rbp]
    sal rax, 3
    mov rdi, rax
    call    malloc@PLT
    mov QWORD PTR -64[rbp], rax
    mov rsi, QWORD PTR -56[rbp]
    mov r8, QWORD PTR -64[rbp]
    mov r9, QWORD PTR -32[rbp]
    mov r10, QWORD PTR -40[rbp]
    mov r11, QWORD PTR -48[rbp]
#APP //обозначение приложения
# 31 "Fibas.c" 1         
    .intel_syntax noprefix             //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!

    mov rcx, rsi                       //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov rax, r8                        //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov rbx, r9                        //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov rdx, r10                       //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov rdi, r11                       //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    sub rcx, 1                         //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov [rax+8*rcx], rdi               //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    sub rcx, 1                         //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    add rbx, 1                         //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov [rax+8*rcx], rbx               //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    sub rcx, 1                         //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    l1:                                //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    cmp rcx, -1                        //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    je l2                              //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov rdi, rdx                       //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov rdx, rbx                       //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    add rbx, rdi                       //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    mov [rax+8*rcx], rbx               //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    sub rcx, 1                         //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    jmp l1                             //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
            
    l2:                                //ЭТО НЕ НАДО КОММЕНТИРОВАТЬ!!!
    
# 0 "" 2
#NO_APP //конец приложения
    mov rax, QWORD PTR stderr[rip]
    mov rsi, rax
    mov edi, 10
    call    fputc@PLT
    mov eax, DWORD PTR -68[rbp]
    sub eax, 1
    mov DWORD PTR -20[rbp], eax
    jmp .L7
.L8:
    mov eax, DWORD PTR -20[rbp]
    cdqe
    lea rdx, 0[0+rax*8]
    mov rax, QWORD PTR -64[rbp]
    add rax, rdx
    mov rdx, QWORD PTR [rax]
    mov rax, QWORD PTR stderr[rip]
    lea rsi, .LC4[rip]
    mov rdi, rax
    mov eax, 0
    call    fprintf@PLT
    sub DWORD PTR -20[rbp], 1
.L7:
    cmp DWORD PTR -20[rbp], 0
    jns .L8
    mov rax, QWORD PTR stderr[rip]
    mov rsi, rax
    mov edi, 10
    call    fputc@PLT
    mov rax, QWORD PTR -64[rbp]
    mov rdi, rax
    call    free@PLT
    mov eax, 0
.L9:
    add rsp, 72
    pop rbx
    pop rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc 
.LFE2:
    .size   main, .-main
    .ident  "GCC: (Debian 6.3.0-18+deb9u1) 6.3.0 20170516" 
    .section    .note.GNU-stack,"",@progbits

Я студент и только начал изучать язык assembly. Я диззасемблил программу, теперь мне нужно проанализировать этот код на языке ассемблера (прокомментить каждую строку). Помогите пожалуйста:)

Код был на языке C, компилировал с помощью GCC (gcc -S masm=intel)

Также, если есть возможность, подскажите с помощью каких книг, документации и т.д. можно это все "расшифровать". Заранее спасибо!


Ответы (0 шт):