@kaktus_psih

Как вывести формулу из дизассемблерного кода?

Помогите пожалуйста вывести формулу из дизассемблерного кода
push %ebp
mov %esp,%ebp
mov 0x10(%ebp),%edx
mov %edx,%eax
shl $0x2,%eax
add %edx,%eax
cltd
idivl 0xc(%ebp)
mov %eax,%edx
mov 0x8(%ebp),%eax
sub %edx,%eax
mov %eax,%ecx
mov $0x34384ccb3,%edx
mov %ecx,%eax
imul %edx
sar $0x8,%edx
mov %ecx,%eax
sar $0x1f,%eax
sub %eax,%edx
mov %edx,%eax
imul $0x4e7,%eax,%eax
sub %eax,%ecx
mov %ecx,%eax
sub 0x8(%ebp),%eax
and 0xc(%ebp),%eax
pop %ebp
ret
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как вывести формулу из дизассемблерного кода

Выписав выражения элементарных математических действий соответствующих ассемблерным командам и подставив выражения друг в друга, согласно тому, как использованы регистры и переменные в памяти.
Например:
mov 0x10(%ebp),%edx
-- это "поместить в edx третий параметр функции (назовём их a (0x8(%ebp)), b (0xc(%ebp)) и c (0x10(%ebp))): edx = c"

mov %edx,%eax
-- "поместить в eax edx, который равен c, т.е. eax = c"

shl $0x2,%eax
-- сдвинуть eax на 2 влево, т.е. умножить на 4, т.е. eax = c * 4

и т. д.

Результат -- то что останется в eax перед возвратом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы