Опитвам се да коригирам функцията cat()
, за да върне true, но по някаква причина програмата се срива, когато дори не извикам функцията. Дали проблемът е моят метод за корекция? Мисля, че пиша на правилния адрес (адресът на функцията е 004012e4). Използвам кодови блокове (gcc) на 32-битова система с Windows XP.
#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;
}
0x40130f
? - person chill   schedule 06.12.2012css = &cat
и по-късноmemcpy(asmBuffer, css)
). - person ssube   schedule 06.12.2012