Der Code ist nicht disassembliert sondern decompilliert, dürfte also deutlich besser sein als ein Disassembly. Genau da liegt auch das Problem,
ich kann fast alles, nur Programmieren gehört leider nicht dazu, dass das für so ein Vorhaben ziemlich blöd ist nicht programmieren zu können weiß ich auch.
Ich würde ja das Programm wenn ichs könnte neu schreiben oder jemanden fragen der das kann, aber erstens interessiert mich wie die originale Firmware da drin funktioniert (Die ist schon ziemlich gut) und zweitens dürfte es wahrscheinlich mehr aufwand sein eine Firmware von jemandem schreiben zu lassen (Wie geschrieben ich kann leider nicht wirklich programmieren) die genauso viel kann wie die die jetzt drauf ist, anstatt die jetztige so weit zu zerlegen dass man entsprechend Kennwerte ändern kann. Hier mal ein Auszug aus dem Decompilat, versche mich auch gerade dran die Memory MAP das Prozessors in IDA einzugeben, vielleicht wirds dann verständlicher, das hier ist eine Funktion:
int __fastcall sub_800714C(int result, _DWORD *a2, unsigned int a3)
{
char v3; // t1
bool v4; // cf
unsigned int i; // r2
int v6; // r3
int v7; // r4
int v8; // r5
int v9; // r12
bool v10; // nf
int v11; // r3
int v12; // r12
int v13; // t1
__int16 v14; // t1
int v15; // r3
int v16; // r12
_DWORD *v17; // r0
if ( a3 )
{
if ( (_DWORD)a2 << 30 )
{
while ( 1 )
{
--a3;
v3 = *(_BYTE *)a2;
a2 = (_DWORD *)((char *)a2 + 1);
*(_BYTE *)result++ = v3;
if ( !a3 )
break;
if ( !((_DWORD)a2 << 30) )
goto LABEL_5;
}
}
else
{
LABEL_5:
if ( result << 30 )
{
v4 = a3 >= 8;
for ( i = a3 - 8; v4; result = (int)(v17 + 1) )
{
v15 = *a2;
v16 = a2[1];
a2 += 2;
v4 = i >= 8;
i -= 8;
*(_DWORD *)result = v15;
v17 = (_DWORD *)(result + 4);
*v17 = v16;
}
v10 = ((i << 29) & 0x80000000) != 0;
}
else
{
v4 = a3 >= 0x10;
for ( i = a3 - 16; v4; result += 16 )
{
v6 = *a2;
v7 = a2[1];
v8 = a2[2];
v9 = a2[3];
a2 += 4;
v4 = i >= 0x10;
i -= 16;
*(_DWORD *)result = v6;
*(_DWORD *)(result + 4) = v7;
*(_DWORD *)(result += v8;
*(_DWORD *)(result + 12) = v9;
}
v10 = ((i << 29) & 0x80000000) != 0;
if ( __CFSHL__(i, 29) )
{
v11 = *a2;
v12 = a2[1];
a2 += 2;
*(_DWORD *)result = v11;
*(_DWORD *)(result + 4) = v12;
result += 8;
}
}
if ( v10 )
{
v13 = *a2;
++a2;
*(_DWORD *)result = v13;
result += 4;
}
if ( __CFSHL__(i, 31) )
{
v14 = *(_WORD *)a2;
a2 = (_DWORD *)((char *)a2 + 2);
*(_WORD *)result = v14;
result += 2;
}
if ( ((i << 31) & 0x80000000) != 0 )
*(_BYTE *)result = *(_BYTE *)a2;
}
}
return result;
}
Ein Depp wie ich versteht natürlich noch nicht mal die Befehle in sich, da brauche ich leider noch nicht mal versuchen, das ganze Programm zu verstehen...
Lesezeichen