Средства обратной разработки: из ASM кода нужно понять, по какой формуле производится расчет - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите разобраться с заданием. Дана программа, в ней есть функция f с аргументами x y z, которая проводит расчет по введенным числам. После декомпиляции был получен ASM код. Задача: Из ASM кода нужно понять, по какой формуле производится расчет.
 400576:   55                              push   %rbp
  400577:   48 89 e5                mov    %rsp,%rbp
  40057a:   89 7d fc                mov    %edi,-0x4(%rbp)
  40057d:   89 75 f8                mov    %esi,-0x8(%rbp)
  400580:   89 55 f4                mov    %edx,-0xc(%rbp)
  400583:   8b 45 fc                mov    -0x4(%rbp),%eax
  400586:   0f af 45 f8             imul   -0x8(%rbp),%eax
  40058a:   89 c1                   mov    %eax,%ecx
  40058c:   8b 45 f8                mov    -0x8(%rbp),%eax
  40058f:   0b 45 fc                or     -0x4(%rbp),%eax
  400592:   89 c6                   mov    %eax,%esi
  400594:   8b 45 f4                mov    -0xc(%rbp),%eax
  400597:   99                              cltd   
  400598:   f7 fe                           idiv   %esi
  40059a:   29 c1                   sub    %eax,%ecx
  40059c:   89 c8                   mov    %ecx,%eax
  40059e:   83 c0 05                add    $0x5,%eax
  4005a1:   5d                              pop    %rbp
  4005a2:   c3                              retq

Решение задачи: «Средства обратной разработки: из ASM кода нужно понять, по какой формуле производится расчет»

textual
Листинг программы
                push   rbp
                mov    rbp,rsp      <-- пролог функции
                mov    [rbp-4],edi передаем в локальные переменные значения из edi, esi, edx
                mov    [rbp-8],esi
                mov    [rbp-0Ch],edx
                mov    eax,[rbp-4]  ; eax=edi
                imul   eax,[rbp-08]  ; eax=edi*esi
                mov   ecx,eax        ; ecx=edi*esi
                mov   eax,[rbp-8]   ; eax=esi
                or     eax,[rbp-4]    ; eax= edi or esi
                mov  esi,eax          ; esi = edi or esi
                mov  eax,[rbp-0Ch] ; eax = edx
                cltd                      ; cdq
                idiv   esi                ; edx:eax/esi
                sub   ecx,eax          ; ecx=ecx-eax
                mov  eax,ecx          ; eax=ecx-eax
                add   eax,5             ; eax=ecx-eax+5
                pop   rbp <-- эпилог функции
                ret <-- выход из функции

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы