我正在尝试修补函数cat()
以返回 true,但由于某种原因,当我什至不调用该函数时程序崩溃。问题是我的修补方法吗?我想我写的是正确的地址(函数的地址是 004012e4)。我在 Windows XP 32 位系统上使用代码块 (gcc)。
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int cat()
{
cout<<"false"<<endl;
return false;
}
int main()
{
DWORD beef;
int (*css)();
css=cat;
cout<<css<<endl;
system("PAUSE");
VirtualProtect(&css,49,PAGE_EXECUTE_READWRITE,&beef);
asm("mov $0x40130f,%eax");//move address of the mov $0x0,eax instruction to eax
asm("movl $0x1,(%eax)");//write at address changing B800 to B801 or return true
return 0;
}