Я правильно понимаю этот код сборки - PullRequest
0 голосов
/ 21 сентября 2019

Итак, я участвовал в picoCTF 2018 (он уже закончился), и у меня возникли проблемы с пониманием проблемы простой сборки (25-я проблема - Assembly-0).Вопрос в том, что возвращает эта функция, когда мы делаем asm0(0xc9,0xb0).Но так как это совершенно ново для меня (хотя я знаю несколько языков программирования), я не уверен, правильно ли я понимаю каждую инструкцию.Поэтому я буду очень рад каждому исправлению моих предположений.

    .intel_syntax noprefix
    .bits 32

    .global asm0


    asm0:
    push ebp
    mov  ebp,esp
    mov  eax,DWORD PTR [ebp+0x8]
    mov  ebx,DWORD PTR [ebp+0xc]
    mov  eax,ebx
    mov  esp,ebp
    pop  ebp    
    ret

Поэтому, если мое понимание правильное, инструкция push ebp просто помещает значение указателя (некоторый адрес) в стек.Мы не знаем, каково это значение, и эта инструкция, скорее всего, просто испортит новичков, таких как я.
Вторая команда перемещает значение esp в ebp.Третья и четвертая инструкции читают входные параметры, которые автоматически помещаются в стек, когда мы вызываем функцию.Затем в пятой инструкции мы перемещаем значение ebx в eax, так что теперь оба равны 0xb0.
Теперь идет часть, в которой я не уверен.Я бы сказал, что инструкция mov esp,ebp не важна, и мы можем ее опустить, поскольку значения esp и ebp не изменились по сравнению со второй инструкцией.
Но pop ebp важен, так как мы хотимчтобы избавиться от случайного адреса, который мы поместили в стек в начале.
И мой вопрос: какую переменную мы сейчас возвращаем?eax или ebx?Я думаю, что это должно быть eax, так как оно выше в стеке.Другой вопрос, который мне приходит в голову, заключается в том, действительно ли значение указателя ebp равно 0xb0 и означает ли это, что он указывает на какой-то случайный адрес, о котором мы ничего не знаем.Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...