
hat nen ganz neaten decompiler, aber wenn du erwatest schönen/lesbaren Code zu erzeugen, vergiss es.
Nehmen wir diesen simplen fibonacci algorithmus:
Code:
int fib(unsigned int num) {
if (num < 2) return num;
return fib(num-1) + fib(num-2);
}
Auf O3 sieht das ganze nach dem Dekompilieren mit Ghidra so aus:
Code:
ulong fib(uint uParm1)
{
int iVar1;
ulong uVar2;
uint uVar3;
uint uVar4;
int iVar5;
uVar2 = (ulong)uParm1;
if (1 < uParm1) {
iVar5 = 0;
uVar3 = uParm1;
do {
uVar4 = uVar3 - 1;
uVar3 = uVar3 - 2;
iVar1 = fib((ulong)uVar4);
iVar5 = iVar5 + iVar1;
} while (1 < uVar3);
uVar2 = (ulong)((uParm1 & 1) + iVar5);
}
return uVar2;
}
Ist praktisch nicht wieder zu erkennen (klar gibt es irgendwie so die fibonacci vibes ab, aber ums rauszufinden was es tut musste ich die ersten paar schritte durch gehen, um zu verstehen warum das so geht)
Und das ist nicht mal obfuscated, ich hab einfach mal den movfuscator draufgeworfen, dann kommt das raus:
Code:
void fib(void)
{
int iVar1;
undefined4 *puVar2;
uint uVar3;
uint uVar4;
uint *puVar5;
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)**(byte *
*)(&alu_eq + (target & 0xff) * 4) * 4) +
(uint)**(byte **)(&alu_eq +
(target >> 8 & 0xff) * 4) * 4) *
4) +
(uint)*(byte *)(*(int *)(&alu_eq +
(target >> 0x10 & 0xff) * 4) + 1)
* 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80) * 4);
b0 = iVar1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
stack_temp = fp;
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&push + (int)sp);
**(int **)(&sel_data + on * 4) = stack_temp;
stack_temp = R1;
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&push + (int)sp);
**(uint **)(&sel_data + on * 4) = stack_temp;
stack_temp = R2;
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&push + (int)sp);
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = R3;
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&push + (int)sp);
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = F1;
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&push + (int)sp);
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = D1;
sp = jmp_d1;
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&push + jmp_d1[0x4c20]);
puVar2 = *(undefined4 **)(&sel_data + on * 4);
*puVar2 = stack_temp;
*(undefined4 **)(puVar2 + 1) = sp;
*(undefined4 **)*(undefined4 **)(&sel_data + on * 4) = sp;
R3 = **(uint **)(&sel_data + on * 4);
R2 = 2;
alu_t._0_2_ = 2;
uVar3 = *(uint *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 + (R3 & 0xffff) * 4) + (uint)_alu_add16 * 4
) * 4) + 4);
uVar4 = *(uint *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 + (R3 >> 0x10) * 4) + (uint)_alu_inv16 * 4)
* 4) + (uVar3 >> 0x10) * 4);
cf = cf & 0xffffff00 | (uint)(byte)(&alu_false)[uVar4 >> 0x10 & 0xff];
DAT_0001309f = (byte)(uVar4 >> 8);
sf = (undefined)*(undefined4 *)(&alu_b7 + (uint)DAT_0001309f * 4);
zf = (&alu_false)
[(uint)(byte)(&alu_true)
[(uint)(byte)(&alu_true)
[(uint)(byte)(&alu_true)
[(uint)(byte)(&alu_true)[uVar3 & 0xff] +
(uVar3 >> 8 & 0xff)] + (uVar4 & 0xff)] +
(uint)DAT_0001309f]];
of = (undefined)
**(undefined4 **)
(*(int *)(*(int *)(&alu_cmp_of + *(uint *)(&alu_b7 + (R3 >> 0x18) * 4) * 4) +
*(uint *)(&alu_b7 +
(*(uint *)(&alu_b7 + (R3 >> 0x18) * 4) & 0xffffff00 | (uint)DAT_0001309f)
* 4) * 4) +
*(int *)(&alu_b7 +
(*(uint *)(&alu_b7 +
(*(uint *)(&alu_b7 + (R3 >> 0x18) * 4) & 0xffffff00 | (uint)DAT_0001309f)
* 4) & 0xffffff00 | (uint)DAT_0001309f) * 4) * 4);
b0 = *(int *)(*(int *)(&and + *(int *)(&alu_false + cf * 4) * 4) + on * 4);
**(undefined4 **)(&sel_target + b0 * 4) = 0x800107a7;
iVar1 = b0;
puVar2 = *(undefined4 **)(&sel_data + b0 * 4);
*puVar2 = R0;
puVar2[1] = R1;
puVar2[2] = R2;
puVar2[3] = R3;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = F0;
puVar2[1] = F1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = D0;
puVar2[1] = jmp_d0;
puVar2[2] = D1;
*(undefined4 **)(puVar2 + 3) = jmp_d1;
*(undefined4 *)(&sel_on)[b0] = 0;
R3 = *(uint *)(&pop + *(int *)(&pop + *(int *)(&pop + *(int *)(&pop + *(int *)(&pop + *(int *)(&
pop + *(int *)(&pop + *(int *)(&pop + fp))))))));
R0 = **(uint **)(&sel_data + on * 4);
**(undefined4 **)(&sel_target + on * 4) = 0x80011321;
iVar1 = on;
puVar5 = *(uint **)(&sel_data + on * 4);
*puVar5 = R0;
puVar5[1] = R1;
puVar5[2] = R2;
puVar5[3] = R3;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = F0;
puVar2[1] = F1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = D0;
puVar2[1] = jmp_d0;
puVar2[2] = D1;
*(undefined4 **)(puVar2 + 3) = jmp_d1;
*(undefined4 *)(&sel_on)[on] = 0;
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)*(byte *)
(*(int *)(&alu_eq + (target & 0xff) * 4) + 0xa7) *
4) + (uint)*(byte *)(*(int *)(&alu_eq +
(target >> 8 & 0xff)
* 4) + 7) * 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq +
(target >> 0x10 & 0xff) * 4) + 1)
* 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80) * 4);
b0 = iVar1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
R2 = 1;
R3 = *(uint *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 +
(**(uint **)(&sel_data + on * 4) & 0xffff) * 4) +
(uint)uRam00013096 * 4) * 4) + 4) & 0xffff |
*(int *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 + (**(uint **)(&sel_data + on * 4) >> 0x10) * 4
) + (uint)_alu_inv16 * 4) * 4) +
(*(uint *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 +
(**(uint **)(&sel_data + on * 4) & 0xffff) * 4) +
(uint)uRam00013096 * 4) * 4) + 4) >> 0x10) * 4) << 0x10;
stack_temp = R3;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(uint **)(&sel_data + on * 4) = stack_temp;
stack_temp = 0x80010bef;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
**(undefined4 **)(&sel_target + on * 4) = 0x80010000;
iVar1 = on;
puVar5 = *(uint **)(&sel_data + on * 4);
*puVar5 = R0;
puVar5[1] = R1;
puVar5[2] = R2;
puVar5[3] = R3;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = F0;
puVar2[1] = F1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = D0;
puVar2[1] = jmp_d0;
puVar2[2] = D1;
*(undefined4 **)(puVar2 + 3) = jmp_d1;
*(undefined4 *)(&sel_on)[on] = 0;
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)*(byte *)
(*(int *)(&alu_eq + (target & 0xff) * 4) + 0xef) *
4) + (uint)*(byte *)(*(int *)(&alu_eq +
(target >> 8 & 0xff)
* 4) + 0xb) * 4) * 4)
+ (uint)*(byte *)(*(int *)(&alu_eq +
(target >> 0x10 & 0xff) * 4) +
1) * 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80) * 4);
b0 = iVar1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
R3 = R0;
R1 = 2;
iVar1 = *(int *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 +
(**(uint **)(&sel_data + on * 4) >> 0x10) * 4) +
(uint)_alu_inv16 * 4) * 4) +
(*(uint *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 +
(**(uint **)(&sel_data + on * 4) & 0xffff) * 4
) + (uint)_alu_add16 * 4) * 4) + 4) >> 0x10) *
4);
alu_t._2_2_ = (undefined2)iVar1;
R2 = *(uint *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 +
(**(uint **)(&sel_data + on * 4) & 0xffff) * 4) +
(uint)_alu_add16 * 4) * 4) + 4) & 0xffff | iVar1 << 0x10;
stack_temp = R2;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(uint **)(&sel_data + on * 4) = stack_temp;
stack_temp = 0x80011070;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
**(undefined4 **)(&sel_target + on * 4) = 0x80010000;
iVar1 = on;
puVar5 = *(uint **)(&sel_data + on * 4);
*puVar5 = R0;
puVar5[1] = R1;
puVar5[2] = R2;
puVar5[3] = R3;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = F0;
puVar2[1] = F1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = D0;
puVar2[1] = jmp_d0;
puVar2[2] = D1;
*(undefined4 **)(puVar2 + 3) = jmp_d1;
*(undefined4 *)(&sel_on)[on] = 0;
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)*(byte *)
(*(int *)(&alu_eq + (target & 0xff) * 4) + 0x70) *
4) + (uint)*(byte *)(*(int *)(&alu_eq +
(target >> 8 & 0xff)
* 4) + 0x10) * 4) * 4
) +
(uint)*(byte *)(*(int *)(&alu_eq +
(target >> 0x10 & 0xff) * 4) + 1)
* 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80) * 4);
b0 = iVar1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
R2 = R0;
iVar1 = *(int *)(*(int *)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 + (R3 >> 0x10) * 4) + (R0 >> 0x10) * 4) * 4)
+ (**(uint **)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 + (R3 & 0xffff) * 4) +
(R0 & 0xffff) * 4) * 4) >> 0x10) * 4);
R0 = **(uint **)(&alu_add16 +
*(int *)(*(int *)(&alu_add16 + (R3 & 0xffff) * 4) + (R0 & 0xffff) * 4) * 4) &
0xffff | iVar1 << 0x10;
alu_c._0_1_ = (undefined)iVar1;
alu_c._1_1_ = (undefined)((uint)iVar1 >> 8);
alu_c._2_2_ = (undefined2)((uint)iVar1 >> 0x10);
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)*(byte *)
(*(int *)(&alu_eq + (target & 0xff) * 4) + 0x21) *
4) + (uint)*(byte *)(*(int *)(&alu_eq +
(target >> 8 & 0xff)
* 4) + 0x13) * 4) * 4
) +
(uint)*(byte *)(*(int *)(&alu_eq +
(target >> 0x10 & 0xff) * 4) + 1)
* 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80) * 4);
b0 = iVar1;
_alu_s = R0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
**(int **)(&sel_data + on * 4) = fp;
stack_temp = *sp;
sp = (undefined4 *)sp[1];
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&pop + sp[0x4c21]);
puVar2 = *(undefined4 **)(&sel_data + on * 4);
*puVar2 = stack_temp;
*(undefined4 **)(puVar2 + 1) = sp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_target + on * 4) = stack_temp;
iVar1 = on;
puVar5 = *(uint **)(&sel_data + on * 4);
*puVar5 = R0;
puVar5[1] = R1;
puVar5[2] = R2;
puVar5[3] = R3;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = F0;
puVar2[1] = F1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = D0;
puVar2[1] = jmp_d0;
puVar2[2] = D1;
*(undefined4 **)(puVar2 + 3) = jmp_d1;
*(undefined4 *)(&sel_on)[on] = 0;
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)*(byte *)
(*(int *)(&alu_eq + (target & 0xff) * 4) + 0xd) *
4) + (uint)*(byte *)(*(int *)(&alu_eq +
(target >> 8 & 0xff)
* 4) + 0x18) * 4) * 4
) +
(uint)*(byte *)(*(int *)(&alu_eq +
(target >> 0x10 & 0xff) * 4) + 1)
* 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80) * 4);
b0 = iVar1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
stack_temp = fp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(int **)(&sel_data + on * 4) = stack_temp;
stack_temp = R1;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(uint **)(&sel_data + on * 4) = stack_temp;
stack_temp = R2;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(uint **)(&sel_data + on * 4) = stack_temp;
stack_temp = R3;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(uint **)(&sel_data + on * 4) = stack_temp;
stack_temp = F1;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = D1;
sp = jmp_d1;
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&push + jmp_d1[0x4c20]);
puVar2 = *(undefined4 **)(&sel_data + on * 4);
*puVar2 = stack_temp;
*(undefined4 **)(puVar2 + 1) = sp;
*(undefined4 **)*(undefined4 **)(&sel_data + on * 4) = sp;
R3 = 0x19;
stack_temp = 0x19;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = 0x80011d5d;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c20];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
**(undefined4 **)(&sel_target + on * 4) = 0x80010000;
iVar1 = on;
puVar5 = *(uint **)(&sel_data + on * 4);
*puVar5 = R0;
puVar5[1] = R1;
puVar5[2] = R2;
puVar5[3] = R3;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = F0;
puVar2[1] = F1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = D0;
puVar2[1] = jmp_d0;
puVar2[2] = D1;
*(undefined4 **)(puVar2 + 3) = jmp_d1;
*(undefined4 *)(&sel_on)[on] = 0;
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)*(byte *)
(*(int *)(&alu_eq + (target & 0xff) * 4) + 0x5d) *
4) + (uint)*(byte *)(*(int *)(&alu_eq +
(target >> 8 & 0xff)
* 4) + 0x1d) * 4) * 4
) +
(uint)*(byte *)(*(int *)(&alu_eq +
(target >> 0x10 & 0xff) * 4) + 1)
* 4) * 4) +
(uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80) * 4);
b0 = iVar1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
R3 = R0;
_alu_x = target;
_alu_y = 0x80011f7a;
b1 = (uint)*(byte *)(*(int *)(&alu_eq + (target >> 8 & 0xff) * 4) + 0x1f);
b2 = (uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x10 & 0xff) * 4) + 1);
b3 = (uint)*(byte *)(*(int *)(&alu_eq + (target >> 0x18) * 4) + 0x80);
iVar1 = *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + *(int *)(*(int *)(&and + (uint)*(byte *)
(*(int *)(&alu_eq + (target & 0xff) * 4) + 0x7a) *
4) + b1 * 4) * 4) + b2 * 4) * 4) + b3 * 4);
b0 = iVar1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r1;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r2;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_r3;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f0;
**(undefined4 **)(&sel_data + iVar1 * 4) = jmp_f1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = jmp_d0;
puVar2[1] = D1;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*(undefined4 **)puVar2 = jmp_d1;
puVar2[1] = sel_on;
*(undefined4 *)(&sel_on)[b0] = 1;
**(int **)(&sel_data + on * 4) = fp;
stack_temp = *sp;
sp = (undefined4 *)sp[1];
**(undefined4 **)(&sel_data + on * 4) = *(undefined4 *)(&pop + sp[0x4c21]);
puVar2 = *(undefined4 **)(&sel_data + on * 4);
*puVar2 = stack_temp;
*(undefined4 **)(puVar2 + 1) = sp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
**(undefined4 **)(&sel_data + on * 4) = stack_temp;
stack_temp = *sp;
**(undefined4 **)(&sel_data + on * 4) = sp[0x4c21];
branch_temp = stack_temp;
**(undefined4 **)(&sel_target + on * 4) = stack_temp;
iVar1 = on;
puVar5 = *(uint **)(&sel_data + on * 4);
*puVar5 = R0;
puVar5[1] = R1;
puVar5[2] = R2;
puVar5[3] = R3;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = F0;
puVar2[1] = F1;
_data_p = &jmp_d0;
puVar2 = *(undefined4 **)(&sel_data + iVar1 * 4);
*puVar2 = D0;
puVar2[1] = jmp_d0;
puVar2[2] = D1;
*(undefined4 **)(puVar2 + 3) = jmp_d1;
*(undefined4 *)(&sel_on)[on] = 0;
/* WARNING: Bad instruction - Truncating control flow here */
halt_baddata();
}
Da hat Ghidra schlicht weg aufgegeben.
Langer rede kurzer sinn, Reverse engeneering ist schwer, und da gibt es nicht einfach ein Tool mit dem du mal eben was ändern kannst