true を返すように関数にパッチを適用しようとしてcat()
いますが、関数を呼び出さないと何らかの理由でプログラムがクラッシュします。問題はパッチの適用方法ですか? 私は正しいアドレスに書いていると思います(関数のアドレスは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;
}