使用Ollydbg编辑程序

时间:2014-05-13 09:25:56

标签: c++ windows assembly inline-assembly ollydbg

这是我的C ++代码:

#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 inline。

它被加载到Ollydbg中,这是asm内联的位置: enter image description here

我将用NOP填写图像中标记的两条指令。好。我知道该怎么做。然后,我用一个新名字保存了它。

但是当我将编辑的程序加载到Ollydbg中时。 我编辑的地方添加了一条新指令。

enter image description here

新指令使程序崩溃。

好的,如果我的问题显而易见,我需要知道: 该指令是如何自动添加的? 我该如何解决?

感谢。

更新1: 以下是我修改程序的方法 enter image description here enter image description here enter image description here enter image description here

但是......我不知道为什么? enter image description here

1 个答案:

答案 0 :(得分:2)

NOP分配1个字节,以便用NOP s替换这两个指令

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

你需要放置6个NOP而不是2.否则,你有2 NOP个和4个字节的垃圾。