Редактирование программы с помощью Ollydbg

Это мой код на С++:

#include <conio.h>
#include <iostream>

using namespace std;

void func1()
{
    static int _count = 0;
    if (_count < 5)
    {
        __asm
        {
            pop eax
            push func1
        }
    }

    _count++;
    cout << _count << endl;
}

int main()
{
    func1();

    cout << "ok" << endl;
    return 0;
}

Теперь мне нужно удалить встроенный asm.

Он загружен в Ollydbg, и это позиция встроенного asm: введите здесь описание изображения

Я заполню две инструкции, отмеченные на изображении NOP. В порядке. Я знаю, как это сделать. Затем я сохранил его с новым именем.

Но когда я загрузил отредактированную программу в Ollydbg. В места, которые я редактировал, была добавлена ​​новая инструкция.

введите здесь описание изображения

И новая инструкция приводит к краху программы.

Хорошо, если мой вопрос достаточно ясен, мне нужно знать: как эта инструкция была добавлена ​​автоматически? И как мне это исправить?

Спасибо.

ОБНОВЛЕНИЕ 1: Вот как я модифицировал программу введите здесь описание изображениявведите здесь описание изображения введите описание изображения здесь введите здесь описание изображения

Но.. я не знаю, почему? введите здесь описание изображения


person dnvThai    schedule 13.05.2014    source источник


Ответы (1)


NOP выделяет 1 байт, поэтому заменить эти две инструкции на NOPs

POP  EAX              ; 1 byte
PUSH Console.func1    ; 5 byte

Нужно поставить 6 из NOP а не 2. Иначе у вас 2 NOP и 4 байта мусора.

person masoud    schedule 13.05.2014
comment
Кажется, он использовал опцию "Заполнить NOP'ами" и получил 909090908090 вместо 909090909090. - person rkhb; 13.05.2014