Znam da je matematika ali ima veze sa C-om:
Imam sledecu funkciju
Da je u pitanju cista matematika inverzna funcija bi bila ovakva:
Medjutim ovo nije slucaj zato sto se pri proracunu odbacuju visi delovi rezultata (ne moze da stane u DWORD).
U sustini mislim da je i nemoguce napraviti inverznu funkciju u ovom slucaju ali ajde da pokusam, mozda ovde postoji neko ko provali ovo.
Jedino sto sam ja uspeo je ovaj banalan (brutalan) pristup:
Napominjem da se nikakve izmene ne mogu raditi u prvobitnoj funkciji (odsecanja u racunu su neophodna). Meni treba resenje za inverznu funkciju.
Imam sledecu funkciju
Code:
DWORD func(DWORD a)
{
DWORD b;
b = a * 0x12345678 + 0x11111111;
return b;
}
DWORD func(DWORD a)
{
DWORD b;
b = a * 0x12345678 + 0x11111111;
return b;
}
Da je u pitanju cista matematika inverzna funcija bi bila ovakva:
Code:
DWORD inverse(DWORD b)
{
DWORD a;
a = (b - 0x11111111) / 0x12345678;
return a;
}
DWORD inverse(DWORD b)
{
DWORD a;
a = (b - 0x11111111) / 0x12345678;
return a;
}
Medjutim ovo nije slucaj zato sto se pri proracunu odbacuju visi delovi rezultata (ne moze da stane u DWORD).
U sustini mislim da je i nemoguce napraviti inverznu funkciju u ovom slucaju ali ajde da pokusam, mozda ovde postoji neko ko provali ovo.
Jedino sto sam ja uspeo je ovaj banalan (brutalan) pristup:
Code:
DWORD inverse(DWORD b)
{
DWORD a;
for(a = 0; a < 0xFFFFFFFF; a++)
if(func(a) == b) return a;
return 0;
}
DWORD inverse(DWORD b)
{
DWORD a;
for(a = 0; a < 0xFFFFFFFF; a++)
if(func(a) == b) return a;
return 0;
}
Napominjem da se nikakve izmene ne mogu raditi u prvobitnoj funkciji (odsecanja u racunu su neophodna). Meni treba resenje za inverznu funkciju.