[*] Binary protection state of bridge.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function mmap tear down of bridge.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x80029c0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.br_fdb_flush () | void br_fdb_flush (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x080029c0 push {r4, r5, r6, lr} |
0x080029c4 mov r3, sp | r3 = sp;
0x080029c8 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080029cc bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080029d0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080029d4 add r3, r3, 0x200 | r3 += 0x200;
0x080029d8 add r3, r3, 1 | r3++;
0x080029dc str r3, [r2, 4] | *((r2 + 4)) = r3;
0x080029e0 ldr r1, [r0, 0x360] | r1 = *((r0 + 0x360));
0x080029e4 cmp r1, 0 |
| if (r1 == 0) {
0x080029e8 beq 0x8002a30 | goto label_1;
| }
0x080029ec mov r5, r0 | r5 = r0;
0x080029f0 subs r1, r1, 0x10 | r1 -= 0x10;
| if (r1 != r1) {
0x080029f4 bne 0x8002a0c | goto label_2;
| }
0x080029f8 b 0x8002a30 | goto label_1;
| do {
0x080029fc cmp r4, 0 |
| if (r4 == 0) {
0x08002a00 beq 0x8002a30 | goto label_1;
| }
| label_0:
0x08002a04 subs r1, r4, 0x10 | r1 = r4 - 0x10;
| if (r1 == r4) {
0x08002a08 beq 0x8002a30 | goto label_1;
| }
| label_2:
0x08002a0c ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x08002a10 ldr r4, [r1, 0x10] | r4 = *((r1 + 0x10));
0x08002a14 tst r3, 2 |
0x08002a18 bne 0x80029fc |
| } while ((r3 & 2) != 0);
0x08002a1c mov r0, r5 | r0 = r5;
0x08002a20 mov r2, 1 | r2 = 1;
0x08002a24 bl 0x8001ecc | fdb_delete ();
0x08002a28 cmp r4, 0 |
| if (r4 != 0) {
0x08002a2c bne 0x8002a04 | goto label_0;
| }
| label_1:
0x08002a30 pop {r4, r5, r6, lr} |
0x08002a34 movw r1, 0x201 | r1 = 0x201;
0x08002a38 ldr r0, [pc] | r0 = *(0x8002a38);
0x08002a3c stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp}");
0x08002a40 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x8003c58 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.br_fdb_offloaded_set () | void br_fdb_offloaded_set (int32_t arg_18h, int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08003c58 push {r4, r5, r6, r7, r8, lr} |
0x08003c5c mov r4, r0 | r4 = r0;
0x08003c60 mov r5, r2 | r5 = r2;
0x08003c64 mov r1, sp | r1 = sp;
0x08003c68 ldrb r6, [sp, 0x18] | r6 = *(arg_18h);
0x08003c6c bic lr, r1, 0x1fc0 | lr = BIT_MASK (r1, 0x1fc0);
0x08003c70 mov r7, r3 | r7 = r3;
0x08003c74 bic lr, lr, 0x3f | lr = BIT_MASK (lr, 0x3f);
0x08003c78 ldr ip, [lr, 4] | ip = *((lr + 4));
0x08003c7c add ip, ip, 0x200 |
0x08003c80 add ip, ip, 1 |
0x08003c84 str ip, [lr, 4] | *((lr + 4)) = ip;
0x08003c88 stmdaeq r3, {r1, r2, r4, r5, r6, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r4, r5, r6, r8, fp, ip, sp}");
0x08003c8c mov r2, r7 | r2 = r7;
0x08003c90 mov r1, r5 | r1 = r5;
0x08003c94 add r0, r4, 0x1c | r0 = r4 + 0x1c;
0x08003c98 bl 0x8001558 | r0 = fdb_find_rcu ();
0x08003c9c mov r4, r0 | r4 = r0;
0x08003ca0 stmdaeq r3, {r1, r7, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r7, r8, fp, ip, sp}");
0x08003ca4 cmp r4, 0 |
| if (r4 != 0) {
0x08003ca8 beq 0x8003cd4 |
0x08003cac ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x08003cb0 ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x08003cb4 cmp r6, r3 |
| if (r6 == r3) {
0x08003cb8 beq 0x8003cd4 | goto label_0;
| }
0x08003cbc mrs r2, apsr | r2 = apsr;
0x08003cc0 cpsid i | __asm ("cpsid i");
0x08003cc4 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x08003cc8 eor r3, r3, 0x20 | r3 ^= 0x20;
0x08003ccc str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x08003cd0 msr cpsr_c, r2 | cpsr_c = r2;
| }
| label_0:
0x08003cd4 pop {r4, r5, r6, r7, r8, lr} |
0x08003cd8 movw r1, 0x201 | r1 = 0x201;
0x08003cdc ldr r0, [pc] | r0 = *(0x8003cdc);
0x08003ce0 stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp}");
0x08003ce4 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x80129b8 */
| #include <stdint.h>
|
; (fcn) sym.br_multicast_count () | void br_multicast_count (int32_t arg_18h, int32_t arg1, uint32_t arg2) {
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x080129b8 push {r4, r5, lr} |
0x080129bc cmp r3, 0 |
0x080129c0 sub sp, sp, 0xc |
0x080129c4 ldrb r4, [sp, 0x18] | r4 = *(arg_18h);
| if (r3 == 0) {
0x080129c8 beq 0x8012a04 | goto label_0;
| }
0x080129cc ldr ip, [r0, 0x10] | ip = *(arg_18hx10);
0x080129d0 tst ip, 0x200 |
| if ((ip & 0x200) == 0) {
0x080129d4 beq 0x8012a04 | goto label_0;
| }
0x080129d8 cmp r1, 0 |
| if (r1 == 0) {
0x080129dc ldrne r5, [r1, 0xe0] | r5 = *((r1 + 0xe0));
| }
| if (r1 != 0) {
0x080129e0 ldreq r5, [r0, 0x284] | r5 = *((r0 + 0x284));
| }
0x080129e4 cmp r5, 0 |
| if (r5 == 0) {
0x080129e8 beq 0x8012c24 | goto label_1;
| }
0x080129ec ldrh r1, [r2, 0x94] | r1 = *((r2 + 0x94));
0x080129f0 cmp r1, 8 |
| if (r1 == 8) {
0x080129f4 beq 0x8012a68 | goto label_2;
| }
0x080129f8 movw r0, 0xdd86 | r0 = 0xdd86;
0x080129fc cmp r1, r0 |
0x08012a00 beq 0x8012a0c |
| while (1) {
| label_0:
0x08012a04 add sp, sp, 0xc |
0x08012a08 pop {r4, r5, pc} |
0x08012a0c ldrh r0, [r2, 0x98] | r0 = *((r2 + 0x98));
0x08012a10 sub r3, r3, 0x82 | r3 -= 0x82;
0x08012a14 ldr r1, [r2, 0xa4] | r1 = *((r2 + 0xa4));
0x08012a18 ldrh ip, [r2, 0x96] | ip = *((r2 + 0x96));
0x08012a1c add r1, r1, r0 | r1 += r0;
0x08012a20 ldrh r2, [r1, 4] | r2 = *((r1 + 4));
0x08012a24 cmp r3, 0xd |
| if (r3 > 0xd) {
| /* switch table (14 cases) at 0x8012a30 */
0x08012a28 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08012a2c b 0x8012a04 |
| }
| label_2:
0x08012a68 ldrh r0, [r2, 0x98] | r0 = *((r2 + 0x98));
0x08012a6c sub r3, r3, 0x11 | r3 -= 0x11;
0x08012a70 ldr r1, [r2, 0xa4] | r1 = *((r2 + 0xa4));
0x08012a74 add ip, r1, r0 |
0x08012a78 ldrb r0, [r1, r0] | r0 = *((r1 + r0));
0x08012a7c ldrh ip, [ip, 2] | ip = *((ip + 2));
0x08012a80 and r0, r0, 0xf | r0 &= 0xf;
0x08012a84 cmp r3, 0x11 |
| if (r3 > 0x11) {
| /* switch table (18 cases) at 0x8012a90 */
0x08012a88 ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08012a8c b 0x8012a04 | goto label_0;
| label_1:
0x08012c24 mov r3, r5 | r3 = r5;
0x08012c28 stmdaeq r1, {r2, r3, r6, r8, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r6, r8, sl, ip, sp, lr, pc}");
0x08012c2c stmdaeq r1, {r2, r3, r6, r8, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r6, r8, sl, ip, sp, lr, pc}");
0x08012c30 mov r2, 9 | r2 = 9;
0x08012c34 movw r1, 0xeff | r1 = 0xeff;
0x08012c38 add sp, sp, 0xc |
0x08012c3c pop {r4, r5, lr} |
0x08012c40 stmdaeq r3, {r1, r2, r4, r5, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r4, r5, r8, fp, ip, sp}");
0x08012c44 ldr r3, [r5, 0x78] | r3 = *((r5 + 0x78));
0x08012c48 ldr r2, [r5, 0x7c] | r2 = *((r5 + 0x7c));
0x08012c4c adds r3, r3, 1 | r3++;
0x08012c50 str r3, [r5, 0x78] | *((r5 + 0x78)) = r3;
0x08012c54 adc r3, r2, 0 | __asm ("adc r3, r2, 0");
0x08012c58 str r3, [r5, 0x7c] | *((r5 + 0x7c)) = r3;
0x08012c5c b 0x8012a04 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x8014b2c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.br_multicast_rcv () | void br_multicast_rcv (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_ch;
| int32_t var_14h;
| int32_t var_34h;
| int32_t var_5ch;
| r0 = arg1;
| r1 = arg2;
0x08014b2c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08014b30 sub sp, sp, 0x5c |
0x08014b34 str r3, [sp, 0xc] | var_ch = r3;
0x08014b38 ldrh r3, [r2, 0x1e] | r3 = *((r2 + 0x1e));
0x08014b3c and r3, r3, 0xfe00 | r3 &= 0xfe00;
0x08014b40 strh r3, [r2, 0x1e] | *((r2 + 0x1e)) = r3;
0x08014b44 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x08014b48 tst r3, 0x40 |
| if ((r3 & 0x40) == 0) {
0x08014b4c beq 0x8014b74 | goto label_0;
| }
0x08014b50 ldrh r3, [r2, 0x94] | r3 = *((r2 + 0x94));
0x08014b54 mov r4, r2 | r4 = r2;
0x08014b58 mov sl, r0 | sl = r0;
0x08014b5c mov r6, r1 | r6 = r1;
0x08014b60 cmp r3, 8 |
| if (r3 == 8) {
0x08014b64 beq 0x8014c0c | goto label_4;
| }
0x08014b68 movw r2, 0xdd86 | r2 = 0xdd86;
0x08014b6c cmp r3, r2 |
0x08014b70 beq 0x8014b84 |
| while (r5 != 0x3d) {
| label_0:
0x08014b74 mov r5, 0 | r5 = 0;
| label_1:
0x08014b78 mov r0, r5 | r0 = r5;
0x08014b7c add sp, sp, 0x5c |
0x08014b80 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x08014b84 mov r0, r4 | r0 = r4;
0x08014b88 stmdaeq r3, {r1, r4, r6, r7, r8, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r4, r6, r7, r8, sb, fp, ip, sp}");
0x08014b8c cmn r0, 0x2a |
0x08014b90 cmnne r0, 0x3d | __asm ("cmnne r0, 0x3d");
0x08014b94 mov r5, r0 | r5 = r0;
| if (r0 != 0x2a) {
0x08014b98 moveq r3, 1 | r3 = 1;
| }
| if (r0 == 0x2a) {
0x08014b9c movne r3, 0 | r3 = 0;
| }
0x08014ba0 str r3, [sp, 0x14] | var_14h = r3;
| if (r0 != 0x2a) {
0x08014ba4 beq 0x8014f50 |
0x08014ba8 cmp r0, 0 |
| if (r0 < 0) {
0x08014bac blt 0x8015a0c | goto label_5;
| }
0x08014bb0 ldrh r0, [r4, 0x96] | r0 = *((r4 + 0x96));
0x08014bb4 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x08014bb8 add r2, ip, r0 | r2 = ip + r0;
0x08014bbc ldrb r3, [ip, r0] | r3 = *((ip + r0));
0x08014bc0 strb r3, [r4, 0x1e] | *((r4 + 0x1e)) = r3;
0x08014bc4 sub r1, r3, 0x82 | r1 = r3 - 0x82;
0x08014bc8 cmp r1, 0xd |
| if (r1 > 0xd) {
| /* switch table (14 cases) at 0x8014bd4 */
0x08014bcc ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08014bd0 b 0x8014f2c | goto label_6;
| label_4:
0x08014c0c mov r0, r2 | r0 = r2;
0x08014c10 stmdaeq r3, {r1, r2, r4, r6, r7, r8, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r4, r6, r7, r8, sb, fp, ip, sp}");
0x08014c14 mov r5, r0 | r5 = r0;
0x08014c18 cmn r0, 0x2a |
| if (r0 == 0x2a) {
0x08014c1c beq 0x8015024 | goto label_7;
| }
0x08014c20 cmp r0, 0 |
| if (r0 < 0) {
0x08014c24 blt 0x8015a0c | goto label_5;
| }
0x08014c28 ldrh r2, [r4, 0x96] | r2 = *((r4 + 0x96));
0x08014c2c ldr r0, [r4, 0xa4] | r0 = *((r4 + 0xa4));
0x08014c30 ldrh r7, [r4, 0x9a] | r7 = *((r4 + 0x9a));
0x08014c34 add ip, r0, r2 |
0x08014c38 ldrb r3, [r0, r2] | r3 = *((r0 + r2));
0x08014c3c add r7, r0, r7 | r7 = r0 + r7;
0x08014c40 add r7, r7, 6 | r7 += 6;
0x08014c44 strb r3, [r4, 0x1e] | *((r4 + 0x1e)) = r3;
0x08014c48 sub r1, r3, 0x11 | r1 = r3 - 0x11;
0x08014c4c cmp r1, 0x11 |
| if (r1 > 0x11) {
| /* switch table (18 cases) at 0x8014c58 */
0x08014c50 ldrls pc, [pc, r1, lsl 2] | offset_1 = r1 << 2;
| pc = *((pc + offset_1));
| }
0x08014c54 b 0x8014f2c |
| label_6:
0x08014f2c mov r0, sl | r0 = sl;
0x08014f30 mov ip, 0 |
0x08014f34 mov r2, r4 | r2 = r4;
0x08014f38 mov r1, r6 | r1 = r6;
0x08014f3c str ip, [sp] | *(sp) = ip;
0x08014f40 stmdaeq r1, {r3, r4, r5, r7, r8, fp, sp} | __asm ("stmdaeq r1, {r3, r4, r5, r7, r8, fp, sp}");
0x08014f44 mov r0, r5 | r0 = r5;
0x08014f48 add sp, sp, 0x5c |
0x08014f4c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x08014f50 ldr r0, [r4, 0xa4] | r0 = *((r4 + 0xa4));
0x08014f54 ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x08014f58 add r3, r0, r3 | r3 = r0 + r3;
0x08014f5c ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x08014f60 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x08014f64 ldr ip, [r3, 0x20] | ip = *((r3 + 0x20));
0x08014f68 eor r1, r1, 0x2fc | r1 ^= 0x2fc;
0x08014f6c eor r1, r1, 3 | r1 ^= 3;
0x08014f70 orr r2, r2, ip | r2 |= ip;
0x08014f74 orr r2, r2, r1 | r2 |= r1;
0x08014f78 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x08014f7c eor r1, r1, 0x1000000 | r1 ^= 0x1000000;
0x08014f80 orrs r2, r2, r1 | r2 |= r1;
| if (r2 == r2) {
0x08014f84 ldrbne r2, [r4, 0x1f] | r2 = *((r4 + 0x1f));
| }
| if (r2 == r2) {
0x08014f88 orrne r2, r2, 1 | r2 |= 1;
| }
| if (r2 == r2) {
0x08014f8c strbne r2, [r4, 0x1f] | *((r4 + 0x1f)) = r2;
| }
0x08014f90 cmn r5, 0x3d |
0x08014f94 bne 0x8014b74 |
| }
0x08014f98 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x08014f9c ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x08014fa0 ldr ip, [r3, 0x20] | ip = *((r3 + 0x20));
0x08014fa4 eor r1, r1, 0x2fc | r1 ^= 0x2fc;
0x08014fa8 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x08014fac eor r1, r1, 3 | r1 ^= 3;
0x08014fb0 orr r2, r2, ip | r2 |= ip;
0x08014fb4 orr r2, r2, r1 | r2 |= r1;
0x08014fb8 eor r3, r3, 0x6a000000 | r3 ^= 0x6a000000;
0x08014fbc orrs r2, r2, r3 | r2 |= r3;
| if (r2 != r2) {
0x08014fc0 bne 0x8014b74 | goto label_0;
| }
0x08014fc4 ldrh r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x08014fc8 ldrb r3, [r0, r3] | r3 = *((r0 + r3));
0x08014fcc cmp r3, 0x97 |
| if (r3 != 0x97) {
0x08014fd0 bne 0x8014b74 | goto label_0;
| }
| label_2:
0x08014fd4 mov r3, sp | r3 = sp;
0x08014fd8 bic r4, r3, 0x1fc0 | r4 = BIT_MASK (r3, 0x1fc0);
0x08014fdc bic r4, r4, 0x3f | r4 = BIT_MASK (r4, 0x3f);
0x08014fe0 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x08014fe4 add r3, r3, 1 | r3++;
0x08014fe8 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08014fec mov r1, r6 | r1 = r6;
0x08014ff0 mov r0, sl | r0 = sl;
0x08014ff4 bl 0x800f1c4 | br_multicast_mark_router ();
0x08014ff8 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x08014ffc sub r3, r3, 1 | r3--;
0x08015000 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08015004 cmp r3, 0 |
| if (r3 != 0) {
0x08015008 bne 0x8014b74 | goto label_0;
| }
0x0801500c ldr r3, [r4] | r3 = *(r4);
0x08015010 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08015014 beq 0x8014b74 | goto label_0;
| }
0x08015018 mov r5, 0 | r5 = 0;
0x0801501c stmdaeq r3, {r1, r2, r3, r4, r5, r7, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r3, r4, r5, r7, r8, fp, ip, sp}");
0x08015020 b 0x8014b78 | goto label_1;
| label_7:
0x08015024 ldr r1, [r4, 0xa4] | r1 = *((r4 + 0xa4));
0x08015028 ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x0801502c add r3, r1, r3 | r3 = r1 + r3;
0x08015030 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x08015034 bic r0, r2, 0xff000000 | r0 = BIT_MASK (r2, 0xff000000);
0x08015038 cmp r0, 0xe0 |
| if (r0 != 0xe0) {
0x0801503c beq 0x8015a84 |
0x08015040 ldrb r3, [r4, 0x1f] | r3 = *((r4 + 0x1f));
0x08015044 mov r5, 0 | r5 = 0;
0x08015048 orr r3, r3, 1 | r3 |= 1;
0x0801504c strb r3, [r4, 0x1f] | *((r4 + 0x1f)) = r3;
0x08015050 b 0x8014b78 | goto label_1;
| label_5:
0x08015a0c ldrh r2, [r4, 0x94] | r2 = *((r4 + 0x94));
0x08015a10 mov r1, r6 | r1 = r6;
0x08015a14 mov r0, sl | r0 = sl;
0x08015a18 bl 0x800f0a0 | br_multicast_err_count ();
0x08015a1c b 0x8014b78 | goto label_1;
| }
0x08015a84 mov r0, 0xe0 |
0x08015a88 movt r0, 0xd00 | r0 = 0xd0000e0;
0x08015a8c cmp r2, r0 |
| if (r2 == r0) {
0x08015a90 beq 0x8015d28 | goto label_8;
| }
0x08015a94 mov r0, 0xe0 |
0x08015a98 movt r0, 0x6a00 | r0 = 0x6a0000e0;
0x08015a9c cmp r2, r0 |
| if (r2 != r0) {
0x08015aa0 bne 0x8014b74 | goto label_0;
| }
0x08015aa4 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x08015aa8 cmp r3, 2 |
| if (r3 != 2) {
0x08015aac bne 0x8014b74 | goto label_0;
| }
0x08015ab0 ldrh r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x08015ab4 ldrb r3, [r1, r3] | r3 = *((r1 + r3));
0x08015ab8 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x08015abc beq 0x8014fd4 | goto label_2;
| }
0x08015ac0 b 0x8014b74 | goto label_0;
| label_8:
0x08015d28 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x08015d2c cmp r3, 0x67 |
| if (r3 != 0x67) {
0x08015d30 bne 0x8014b74 | goto label_0;
| }
0x08015d34 ldrh r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x08015d38 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x08015d3c add r3, r1, r3 | r3 = r1 + r3;
0x08015d40 ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x08015d44 ldr r1, [r4, 0xa8] | r1 = *((r4 + 0xa8));
0x08015d48 sub r2, r2, r0 | r2 -= r0;
0x08015d4c sub r1, r3, r1 | r1 = r3 - r1;
0x08015d50 sub r2, r2, r1 | r2 -= r1;
0x08015d54 cmp r2, 3 |
| if (r2 > 3) {
0x08015d58 bgt 0x8015fc4 | goto label_9;
| }
0x08015d5c cmp r4, 0 |
| if (r4 == 0) {
0x08015d60 beq 0x8014b74 | goto label_0;
| }
0x08015d64 mov r0, r4 | r0 = r4;
0x08015d68 add r2, sp, 0x34 | r2 += var_34h;
0x08015d6c mov r3, 4 | r3 = 4;
0x08015d70 stmdaeq r3, {r1, r5, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r5, sb, fp, ip, sp}");
0x08015d74 cmp r0, 0 |
| if (r0 < 0) {
0x08015d78 blt 0x8014b74 | goto label_0;
| }
0x08015d7c add r3, sp, 0x34 | r3 += var_34h;
| label_3:
0x08015d80 ldrb r3, [r3] | r3 = *(r3);
0x08015d84 lsr r2, r3, 4 | r2 = r3 >> 4;
0x08015d88 cmp r2, 2 |
| if (r2 != 2) {
0x08015d8c bne 0x8014b74 | goto label_0;
| }
0x08015d90 tst r3, 0xf |
| if ((r3 & 0xf) != 0) {
0x08015d94 bne 0x8014b74 | goto label_0;
| }
0x08015d98 mov r3, sp | r3 = sp;
0x08015d9c bic r4, r3, 0x1fc0 | r4 = BIT_MASK (r3, 0x1fc0);
0x08015da0 bic r4, r4, 0x3f | r4 = BIT_MASK (r4, 0x3f);
0x08015da4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x08015da8 add r3, r3, 1 | r3++;
0x08015dac str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08015db0 mov r1, r6 | r1 = r6;
0x08015db4 mov r0, sl | r0 = sl;
0x08015db8 bl 0x800f1c4 | br_multicast_mark_router ();
0x08015dbc ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x08015dc0 sub r3, r3, 1 | r3--;
0x08015dc4 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08015dc8 cmp r3, 0 |
| if (r3 != 0) {
0x08015dcc bne 0x8014b74 | goto label_0;
| }
0x08015dd0 ldr r3, [r4] | r3 = *(r4);
0x08015dd4 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08015dd8 beq 0x8014b74 | goto label_0;
| }
0x08015ddc stmdaeq r3, {r1, r2, r3, r4, r5, r7, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r3, r4, r5, r7, r8, fp, ip, sp}");
0x08015de0 b 0x8014b74 | goto label_0;
| label_9:
0x08015fc4 cmp r3, 0 |
| if (r3 != 0) {
0x08015fc8 bne 0x8015d80 | goto label_3;
| }
0x08015fcc b 0x8014b74 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x8012540 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.br_multicast_set_port_router () | void br_multicast_set_port_router (int32_t arg1, uint32_t arg2) {
| int32_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x08012540 push {r4, r5, r6, lr} |
0x08012544 stmdaeq r3, {r1, r2, r3, r4, r5, r6, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r3, r4, r5, r6, r8, fp, ip, sp}");
0x08012548 stmdaeq r3, {r1, r2, r3, r4, r5, r6, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r3, r4, r5, r6, r8, fp, ip, sp}");
0x0801254c mov r3, sp | r3 = sp;
0x08012550 ldr r6, [r0] | r6 = *(r0);
0x08012554 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08012558 mov r4, r0 | r4 = r0;
0x0801255c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08012560 ldr ip, [r2] | ip = *(r2);
0x08012564 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08012568 add r2, r2, 1 | r2++;
0x0801256c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08012570 ldrb r3, [r0, 0xdc] | r3 = *((r0 + 0xdc));
0x08012574 cmp r3, r1 |
| if (r3 != r1) {
0x08012578 beq 0x8012598 |
0x0801257c cmp r1, 3 |
| if (r1 > 3) {
| /* switch table (4 cases) at 0x8012588 */
0x08012580 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08012584 b 0x80126fc | goto label_1;
| }
0x08012598 cmp r3, 3 |
| if (r3 == 3) {
0x0801259c beq 0x80126e4 | goto label_2;
| }
0x080125a0 mov r5, 0 | r5 = 0;
| label_0:
0x080125a4 mov r3, sp | r3 = sp;
0x080125a8 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080125ac bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080125b0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080125b4 sub r2, r2, 1 | r2--;
0x080125b8 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080125bc cmp r2, 0 |
0x080125c0 beq 0x80125cc |
| while ((r3 & 2) == 0) {
0x080125c4 mov r0, r5 | r0 = r5;
0x080125c8 pop {r4, r5, r6, pc} |
0x080125cc ldr r3, [r3] | r3 = *(r3);
0x080125d0 tst r3, 2 |
0x080125d4 beq 0x80125c4 |
| }
0x080125d8 stmdaeq r3, {r1, r2, r3, r4, r5, r7, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r3, r4, r5, r7, r8, fp, ip, sp}");
0x080125dc mov r0, r5 | r0 = r5;
0x080125e0 pop {r4, r5, r6, pc} |
| label_2:
0x080126e4 ldr r1, [r6, 0x164] | r1 = *((r6 + 0x164));
0x080126e8 add r0, r0, 0xe4 | r0 += 0xe4;
0x080126ec mov r5, 0 | r5 = 0;
0x080126f0 add r1, ip, r1 | r1 = ip + r1;
0x080126f4 stmdaeq r3, {r1, r2, r3, r6, r7, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r3, r6, r7, sb, fp, ip, sp}");
0x080126f8 b 0x80125a4 | goto label_0;
| label_1:
0x080126fc mvn r5, 0x15 | r5 = ~0x15;
0x08012700 b 0x80125a4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x800486c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.br_port_carrier_check () | void br_port_carrier_check (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x0800486c push {r4, r5, r6, r7, r8, lr} |
0x08004870 mov r4, r0 | r4 = r0;
0x08004874 mov r5, r1 | r5 = r1;
0x08004878 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0800487c ldrd r6, r7, [r0] | __asm ("ldrd r6, r7, [r0]");
0x08004880 tst r3, 0x10 |
| if ((r3 & 0x10) == 0) {
0x08004884 bne 0x8004894 |
0x08004888 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0800488c tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08004890 bne 0x8004920 | goto label_2;
| }
| }
| label_1:
0x08004894 mov r3, 0 | r3 = 0;
0x08004898 strb r3, [r5] | *(r5) = r3;
0x0800489c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x080048a0 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x080048a4 tst r3, 1 |
0x080048a8 popeq {r4, r5, r6, r7, r8, pc} |
0x080048ac mov r3, sp | r3 = sp;
0x080048b0 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080048b4 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080048b8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080048bc add r3, r3, 0x200 | r3 += 0x200;
0x080048c0 add r3, r3, 1 | r3++;
0x080048c4 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x080048c8 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x080048cc tst r3, 1 |
0x080048d0 bne 0x80048f0 |
| while (r3 != 0) {
0x080048d4 ldrb r3, [r4, 0x1d] | r3 = *((r4 + 0x1d));
0x080048d8 cmp r3, 0 |
| if (r3 != 0) {
0x080048dc bne 0x8004940 | goto label_3;
| }
| label_0:
0x080048e0 pop {r4, r5, r6, r7, r8, lr} |
0x080048e4 movw r1, 0x201 | r1 = 0x201;
0x080048e8 ldr r0, [pc, 0x70] | r0 = *(0x800495c);
0x080048ec stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp}");
0x080048f0 ldrb r3, [r7, 0x13c] | r3 = *((r7 + 0x13c));
0x080048f4 cmp r3, 0 |
0x080048f8 cmpne r3, 6 | __asm ("cmpne r3, 6");
0x080048fc bne 0x80048d4 |
| }
0x08004900 ldrb r3, [r4, 0x1d] | r3 = *((r4 + 0x1d));
0x08004904 cmp r3, 0 |
| if (r3 != 0) {
0x08004908 bne 0x80048e0 | goto label_0;
| }
0x0800490c mov r0, r4 | r0 = r4;
0x08004910 stmdaeq r0, {r3, r5, sb, sl, pc} | __asm ("stmdaeq r0, {r3, r5, sb, sl, pc}");
0x08004914 mov r3, 1 | r3 = 1;
0x08004918 strb r3, [r5] | *(r5) = r3;
0x0800491c b 0x80048e0 | goto label_0;
| label_2:
0x08004920 ldrb r3, [r7, 0x13c] | r3 = *((r7 + 0x13c));
0x08004924 cmp r3, 0 |
0x08004928 cmpne r3, 6 | __asm ("cmpne r3, 6");
| if (r3 != 0) {
0x0800492c bne 0x8004894 | goto label_1;
| }
0x08004930 mov r0, r7 | r0 = r7;
0x08004934 bl 0x80047fc | port_cost ();
0x08004938 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x0800493c b 0x8004894 | goto label_1;
| label_3:
0x08004940 mov r0, r4 | r0 = r4;
0x08004944 stmdaeq r0, {r4, r6, sb, sl, pc} | __asm ("stmdaeq r0, {r4, r6, sb, sl, pc}");
0x08004948 mov r3, 1 | r3 = 1;
0x0800494c strb r3, [r5] | *(r5) = r3;
0x08004950 movw r1, 0x201 | r1 = 0x201;
0x08004954 ldr r0, [pc, 4] | r0 = sym.br_device_event;
0x08004958 pop {r4, r5, r6, r7, r8, lr} |
0x0800495c stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp}");
0x08004960 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x8008724 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.br_stp_disable_bridge () | void br_stp_disable_bridge (uint32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08008724 push {r4, r5, r6, lr} |
0x08008728 mov r5, r0 | r5 = r0;
0x0800872c mov r3, sp | r3 = sp;
0x08008730 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08008734 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08008738 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0800873c add r3, r3, 0x200 | r3 += 0x200;
0x08008740 add r3, r3, 1 | r3++;
0x08008744 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08008748 ldr r3, [r0] | r3 = *(r0);
0x0800874c cmp r0, r3 |
| if (r0 == r3) {
0x08008750 beq 0x8008790 | goto label_1;
| }
0x08008754 sub r4, r3, 8 | r4 = r3 - 8;
0x08008758 b 0x800876c |
| while (r3 == 0) {
0x0800875c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08008760 sub r4, r3, 8 | r4 = r3 - 8;
0x08008764 cmp r5, r3 |
| if (r5 == r3) {
0x08008768 beq 0x8008790 | goto label_1;
| }
| label_0:
0x0800876c ldrb r3, [r4, 0x1d] | r3 = *((r4 + 0x1d));
0x08008770 cmp r3, 0 |
0x08008774 beq 0x800875c |
| }
0x08008778 mov r0, r4 | r0 = r4;
0x0800877c stmdaeq r0, {r4, r6, sb, sl, pc} | __asm ("stmdaeq r0, {r4, r6, sb, sl, pc}");
0x08008780 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08008784 sub r4, r3, 8 | r4 = r3 - 8;
0x08008788 cmp r5, r3 |
| if (r5 != r3) {
0x0800878c bne 0x800876c | goto label_0;
| }
| label_1:
0x08008790 mov r0, r5 | r0 = r5;
0x08008794 mov r1, 0 | r1 = 0;
0x08008798 stmdaeq r0, {r2, r3, r4, r7, sb, sl, ip, sp, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r7, sb, sl, ip, sp, lr}");
0x0800879c mov r3, 0 | r3 = 0;
0x080087a0 movw r1, 0x201 | r1 = 0x201;
0x080087a4 strb r3, [r5, 0x119] | *((r5 + 0x119)) = r3;
0x080087a8 ldr r0, [pc, 0x24] | r0 = *(0x80087d0);
0x080087ac stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r3, r4, r8, fp, ip, sp}");
0x080087b0 add r0, r5, 0x2f0 | r0 = r5 + 0x2f0;
0x080087b4 stmdaeq r3, {r1, r2, r4, r6, r7, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r4, r6, r7, sb, fp, ip, sp}");
0x080087b8 add r0, r5, 0x318 | r0 = r5 + 0x318;
0x080087bc stmdaeq r3, {r1, r2, r4, r6, r7, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r4, r6, r7, sb, fp, ip, sp}");
0x080087c0 add r0, r5, 0x304 | r0 = r5 + 0x304;
0x080087c4 stmdaeq r3, {r1, r2, r4, r6, r7, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r4, r6, r7, sb, fp, ip, sp}");
0x080087c8 add r0, r5, 0x32c | r0 = r5 + 0x32c;
0x080087cc pop {r4, r5, r6, lr} |
0x080087d0 stmdaeq r3, {r1, r2, r5, r6, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r5, r6, sb, fp, ip, sp}");
0x080087d4 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x801b99c */
| #include <stdint.h>
|
; (fcn) sym.br_vlan_bridge_event () | void br_vlan_bridge_event (int32_t arg1, int32_t arg2) {
| int32_t var_13h;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x0801b99c push {r4, r5, r6, lr} |
0x0801b9a0 sub r1, r1, 1 | r1--;
0x0801b9a4 mov r3, 0 | r3 = 0;
0x0801b9a8 sub sp, sp, 0x20 |
0x0801b9ac add r5, r0, 0x540 | r5 = r0 + 0x540;
0x0801b9b0 strb r3, [sp, 0x13] | var_13h = r3;
0x0801b9b4 cmp r1, 0x14 |
| if (r1 > 0x14) {
| /* switch table (21 cases) at 0x801b9c0 */
0x0801b9b8 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0801b9bc b 0x801ba20 |
0x0801ba20 mov r4, 0 | r4 = 0;
0x0801ba24 mov r0, r4 | r0 = r4;
0x0801ba28 add sp, sp, 0x20 |
0x0801ba2c pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x800108c */
| #include <stdint.h>
|
; (fcn) sym.jhash () | void jhash (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0800108c push {r4, r5, lr} |
0x08001090 movw r4, 0xbeef |
0x08001094 movt r4, 0xdead | r4 = 0xdeadbeef;
0x08001098 add r4, r2, r4 | r4 = r2 + r4;
0x0800109c mov lr, r0 | lr = r0;
0x080010a0 add r4, r4, r1 | r4 += r1;
0x080010a4 cmp r1, 0xc |
0x080010a8 mov r0, r4 | r0 = r4;
0x080010ac mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x080010b0 bls 0x8001120 | goto label_0;
| }
| do {
0x080010b4 ldr ip, [lr, 8] | ip = *((lr + 8));
0x080010b8 sub r1, r1, 0xc | r1 -= 0xc;
0x080010bc ldr r3, [lr, 4] | r3 = *((lr + 4));
0x080010c0 cmp r1, 0xc |
0x080010c4 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x080010c8 add ip, ip, r0 |
0x080010cc add r3, r3, r5 | r3 += r5;
0x080010d0 sub r2, r2, ip | r2 -= ip;
0x080010d4 add r0, r3, ip | r0 = r3 + ip;
0x080010d8 add r2, r2, r4 | r2 += r4;
0x080010dc eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x080010e0 sub r3, r3, r2 | r3 -= r2;
0x080010e4 add ip, r2, r0 |
0x080010e8 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x080010ec sub r0, r0, r3 | r0 -= r3;
0x080010f0 add r2, r3, ip | r2 = r3 + ip;
0x080010f4 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x080010f8 sub ip, ip, r3 |
0x080010fc add r0, r3, r2 | r0 = r3 + r2;
0x08001100 eor ip, ip, r3, ror 16 |
0x08001104 sub r3, r2, ip | r3 = r2 - ip;
0x08001108 add r4, ip, r0 | r4 = ip + r0;
0x0800110c eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x08001110 sub r0, r0, r3 | r0 -= r3;
0x08001114 add r5, r3, r4 | r5 = r3 + r4;
0x08001118 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0800111c bhi 0x80010b4 |
| } while (r1 > 0xc);
| label_0:
0x08001120 sub r1, r1, 1 | r1--;
0x08001124 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x8001130 */
0x08001128 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0800112c b 0x80011f8 |
0x080011f8 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x800e9a4 */
| #include <stdint.h>
|
; (fcn) sym.jhash_1 () | void jhash_1 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0800e9a4 push {r4, r5, lr} |
0x0800e9a8 movw r4, 0xbeef |
0x0800e9ac movt r4, 0xdead | r4 = 0xdeadbeef;
0x0800e9b0 add r4, r2, r4 | r4 = r2 + r4;
0x0800e9b4 mov lr, r0 | lr = r0;
0x0800e9b8 add r4, r4, r1 | r4 += r1;
0x0800e9bc cmp r1, 0xc |
0x0800e9c0 mov r0, r4 | r0 = r4;
0x0800e9c4 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0800e9c8 bls 0x800ea38 | goto label_0;
| }
| do {
0x0800e9cc ldr ip, [lr, 8] | ip = *((lr + 8));
0x0800e9d0 sub r1, r1, 0xc | r1 -= 0xc;
0x0800e9d4 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0800e9d8 cmp r1, 0xc |
0x0800e9dc ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0800e9e0 add ip, ip, r0 |
0x0800e9e4 add r3, r3, r5 | r3 += r5;
0x0800e9e8 sub r2, r2, ip | r2 -= ip;
0x0800e9ec add r0, r3, ip | r0 = r3 + ip;
0x0800e9f0 add r2, r2, r4 | r2 += r4;
0x0800e9f4 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0800e9f8 sub r3, r3, r2 | r3 -= r2;
0x0800e9fc add ip, r2, r0 |
0x0800ea00 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0800ea04 sub r0, r0, r3 | r0 -= r3;
0x0800ea08 add r2, r3, ip | r2 = r3 + ip;
0x0800ea0c eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0800ea10 sub ip, ip, r3 |
0x0800ea14 add r0, r3, r2 | r0 = r3 + r2;
0x0800ea18 eor ip, ip, r3, ror 16 |
0x0800ea1c sub r3, r2, ip | r3 = r2 - ip;
0x0800ea20 add r4, ip, r0 | r4 = ip + r0;
0x0800ea24 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0800ea28 sub r0, r0, r3 | r0 -= r3;
0x0800ea2c add r5, r3, r4 | r5 = r3 + r4;
0x0800ea30 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0800ea34 bhi 0x800e9cc |
| } while (r1 > 0xc);
| label_0:
0x0800ea38 sub r1, r1, 1 | r1--;
0x0800ea3c cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x800ea48 */
0x0800ea40 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0800ea44 b 0x800eb10 |
0x0800eb10 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x8017ee8 */
| #include <stdint.h>
|
; (fcn) sym.jhash_2 () | void jhash_2 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08017ee8 push {r4, r5, lr} |
0x08017eec movw r4, 0xbeef |
0x08017ef0 movt r4, 0xdead | r4 = 0xdeadbeef;
0x08017ef4 add r4, r2, r4 | r4 = r2 + r4;
0x08017ef8 mov lr, r0 | lr = r0;
0x08017efc add r4, r4, r1 | r4 += r1;
0x08017f00 cmp r1, 0xc |
0x08017f04 mov r0, r4 | r0 = r4;
0x08017f08 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x08017f0c bls 0x8017f7c | goto label_0;
| }
| do {
0x08017f10 ldr ip, [lr, 8] | ip = *((lr + 8));
0x08017f14 sub r1, r1, 0xc | r1 -= 0xc;
0x08017f18 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x08017f1c cmp r1, 0xc |
0x08017f20 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x08017f24 add ip, ip, r0 |
0x08017f28 add r3, r3, r5 | r3 += r5;
0x08017f2c sub r2, r2, ip | r2 -= ip;
0x08017f30 add r0, r3, ip | r0 = r3 + ip;
0x08017f34 add r2, r2, r4 | r2 += r4;
0x08017f38 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x08017f3c sub r3, r3, r2 | r3 -= r2;
0x08017f40 add ip, r2, r0 |
0x08017f44 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x08017f48 sub r0, r0, r3 | r0 -= r3;
0x08017f4c add r2, r3, ip | r2 = r3 + ip;
0x08017f50 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x08017f54 sub ip, ip, r3 |
0x08017f58 add r0, r3, r2 | r0 = r3 + r2;
0x08017f5c eor ip, ip, r3, ror 16 |
0x08017f60 sub r3, r2, ip | r3 = r2 - ip;
0x08017f64 add r4, ip, r0 | r4 = ip + r0;
0x08017f68 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x08017f6c sub r0, r0, r3 | r0 -= r3;
0x08017f70 add r5, r3, r4 | r5 = r3 + r4;
0x08017f74 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x08017f78 bhi 0x8017f10 |
| } while (r1 > 0xc);
| label_0:
0x08017f7c sub r1, r1, 1 | r1--;
0x08017f80 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x8017f8c */
0x08017f84 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08017f88 b 0x8018054 |
0x08018054 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x801bc44 */
| #include <stdint.h>
|
; (fcn) sym.jhash_3 () | void jhash_3 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0801bc44 push {r4, r5, lr} |
0x0801bc48 movw r4, 0xbeef |
0x0801bc4c movt r4, 0xdead | r4 = 0xdeadbeef;
0x0801bc50 add r4, r2, r4 | r4 = r2 + r4;
0x0801bc54 mov lr, r0 | lr = r0;
0x0801bc58 add r4, r4, r1 | r4 += r1;
0x0801bc5c cmp r1, 0xc |
0x0801bc60 mov r0, r4 | r0 = r4;
0x0801bc64 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0801bc68 bls 0x801bcd8 | goto label_0;
| }
| do {
0x0801bc6c ldr ip, [lr, 8] | ip = *((lr + 8));
0x0801bc70 sub r1, r1, 0xc | r1 -= 0xc;
0x0801bc74 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0801bc78 cmp r1, 0xc |
0x0801bc7c ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0801bc80 add ip, ip, r0 |
0x0801bc84 add r3, r3, r5 | r3 += r5;
0x0801bc88 sub r2, r2, ip | r2 -= ip;
0x0801bc8c add r0, r3, ip | r0 = r3 + ip;
0x0801bc90 add r2, r2, r4 | r2 += r4;
0x0801bc94 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0801bc98 sub r3, r3, r2 | r3 -= r2;
0x0801bc9c add ip, r2, r0 |
0x0801bca0 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0801bca4 sub r0, r0, r3 | r0 -= r3;
0x0801bca8 add r2, r3, ip | r2 = r3 + ip;
0x0801bcac eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0801bcb0 sub ip, ip, r3 |
0x0801bcb4 add r0, r3, r2 | r0 = r3 + r2;
0x0801bcb8 eor ip, ip, r3, ror 16 |
0x0801bcbc sub r3, r2, ip | r3 = r2 - ip;
0x0801bcc0 add r4, ip, r0 | r4 = ip + r0;
0x0801bcc4 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0801bcc8 sub r0, r0, r3 | r0 -= r3;
0x0801bccc add r5, r3, r4 | r5 = r3 + r4;
0x0801bcd0 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0801bcd4 bhi 0x801bc6c |
| } while (r1 > 0xc);
| label_0:
0x0801bcd8 sub r1, r1, 1 | r1--;
0x0801bcdc cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x801bce8 */
0x0801bce0 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0801bce4 b 0x801bdb0 |
0x0801bdb0 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x800e9a4 */
| #include <stdint.h>
|
; (fcn) sym.jhash_1 () | void jhash_1 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0800e9a4 push {r4, r5, lr} |
0x0800e9a8 movw r4, 0xbeef |
0x0800e9ac movt r4, 0xdead | r4 = 0xdeadbeef;
0x0800e9b0 add r4, r2, r4 | r4 = r2 + r4;
0x0800e9b4 mov lr, r0 | lr = r0;
0x0800e9b8 add r4, r4, r1 | r4 += r1;
0x0800e9bc cmp r1, 0xc |
0x0800e9c0 mov r0, r4 | r0 = r4;
0x0800e9c4 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0800e9c8 bls 0x800ea38 | goto label_0;
| }
| do {
0x0800e9cc ldr ip, [lr, 8] | ip = *((lr + 8));
0x0800e9d0 sub r1, r1, 0xc | r1 -= 0xc;
0x0800e9d4 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0800e9d8 cmp r1, 0xc |
0x0800e9dc ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0800e9e0 add ip, ip, r0 |
0x0800e9e4 add r3, r3, r5 | r3 += r5;
0x0800e9e8 sub r2, r2, ip | r2 -= ip;
0x0800e9ec add r0, r3, ip | r0 = r3 + ip;
0x0800e9f0 add r2, r2, r4 | r2 += r4;
0x0800e9f4 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0800e9f8 sub r3, r3, r2 | r3 -= r2;
0x0800e9fc add ip, r2, r0 |
0x0800ea00 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0800ea04 sub r0, r0, r3 | r0 -= r3;
0x0800ea08 add r2, r3, ip | r2 = r3 + ip;
0x0800ea0c eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0800ea10 sub ip, ip, r3 |
0x0800ea14 add r0, r3, r2 | r0 = r3 + r2;
0x0800ea18 eor ip, ip, r3, ror 16 |
0x0800ea1c sub r3, r2, ip | r3 = r2 - ip;
0x0800ea20 add r4, ip, r0 | r4 = ip + r0;
0x0800ea24 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0800ea28 sub r0, r0, r3 | r0 -= r3;
0x0800ea2c add r5, r3, r4 | r5 = r3 + r4;
0x0800ea30 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0800ea34 bhi 0x800e9cc |
| } while (r1 > 0xc);
| label_0:
0x0800ea38 sub r1, r1, 1 | r1--;
0x0800ea3c cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x800ea48 */
0x0800ea40 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0800ea44 b 0x800eb10 |
0x0800eb10 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x8017ee8 */
| #include <stdint.h>
|
; (fcn) sym.jhash_2 () | void jhash_2 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08017ee8 push {r4, r5, lr} |
0x08017eec movw r4, 0xbeef |
0x08017ef0 movt r4, 0xdead | r4 = 0xdeadbeef;
0x08017ef4 add r4, r2, r4 | r4 = r2 + r4;
0x08017ef8 mov lr, r0 | lr = r0;
0x08017efc add r4, r4, r1 | r4 += r1;
0x08017f00 cmp r1, 0xc |
0x08017f04 mov r0, r4 | r0 = r4;
0x08017f08 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x08017f0c bls 0x8017f7c | goto label_0;
| }
| do {
0x08017f10 ldr ip, [lr, 8] | ip = *((lr + 8));
0x08017f14 sub r1, r1, 0xc | r1 -= 0xc;
0x08017f18 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x08017f1c cmp r1, 0xc |
0x08017f20 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x08017f24 add ip, ip, r0 |
0x08017f28 add r3, r3, r5 | r3 += r5;
0x08017f2c sub r2, r2, ip | r2 -= ip;
0x08017f30 add r0, r3, ip | r0 = r3 + ip;
0x08017f34 add r2, r2, r4 | r2 += r4;
0x08017f38 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x08017f3c sub r3, r3, r2 | r3 -= r2;
0x08017f40 add ip, r2, r0 |
0x08017f44 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x08017f48 sub r0, r0, r3 | r0 -= r3;
0x08017f4c add r2, r3, ip | r2 = r3 + ip;
0x08017f50 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x08017f54 sub ip, ip, r3 |
0x08017f58 add r0, r3, r2 | r0 = r3 + r2;
0x08017f5c eor ip, ip, r3, ror 16 |
0x08017f60 sub r3, r2, ip | r3 = r2 - ip;
0x08017f64 add r4, ip, r0 | r4 = ip + r0;
0x08017f68 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x08017f6c sub r0, r0, r3 | r0 -= r3;
0x08017f70 add r5, r3, r4 | r5 = r3 + r4;
0x08017f74 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x08017f78 bhi 0x8017f10 |
| } while (r1 > 0xc);
| label_0:
0x08017f7c sub r1, r1, 1 | r1--;
0x08017f80 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x8017f8c */
0x08017f84 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08017f88 b 0x8018054 |
0x08018054 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x801bc44 */
| #include <stdint.h>
|
; (fcn) sym.jhash_3 () | void jhash_3 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0801bc44 push {r4, r5, lr} |
0x0801bc48 movw r4, 0xbeef |
0x0801bc4c movt r4, 0xdead | r4 = 0xdeadbeef;
0x0801bc50 add r4, r2, r4 | r4 = r2 + r4;
0x0801bc54 mov lr, r0 | lr = r0;
0x0801bc58 add r4, r4, r1 | r4 += r1;
0x0801bc5c cmp r1, 0xc |
0x0801bc60 mov r0, r4 | r0 = r4;
0x0801bc64 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0801bc68 bls 0x801bcd8 | goto label_0;
| }
| do {
0x0801bc6c ldr ip, [lr, 8] | ip = *((lr + 8));
0x0801bc70 sub r1, r1, 0xc | r1 -= 0xc;
0x0801bc74 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0801bc78 cmp r1, 0xc |
0x0801bc7c ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0801bc80 add ip, ip, r0 |
0x0801bc84 add r3, r3, r5 | r3 += r5;
0x0801bc88 sub r2, r2, ip | r2 -= ip;
0x0801bc8c add r0, r3, ip | r0 = r3 + ip;
0x0801bc90 add r2, r2, r4 | r2 += r4;
0x0801bc94 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0801bc98 sub r3, r3, r2 | r3 -= r2;
0x0801bc9c add ip, r2, r0 |
0x0801bca0 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0801bca4 sub r0, r0, r3 | r0 -= r3;
0x0801bca8 add r2, r3, ip | r2 = r3 + ip;
0x0801bcac eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0801bcb0 sub ip, ip, r3 |
0x0801bcb4 add r0, r3, r2 | r0 = r3 + r2;
0x0801bcb8 eor ip, ip, r3, ror 16 |
0x0801bcbc sub r3, r2, ip | r3 = r2 - ip;
0x0801bcc0 add r4, ip, r0 | r4 = ip + r0;
0x0801bcc4 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0801bcc8 sub r0, r0, r3 | r0 -= r3;
0x0801bccc add r5, r3, r4 | r5 = r3 + r4;
0x0801bcd0 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0801bcd4 bhi 0x801bc6c |
| } while (r1 > 0xc);
| label_0:
0x0801bcd8 sub r1, r1, 1 | r1--;
0x0801bcdc cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x801bce8 */
0x0801bce0 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0801bce4 b 0x801bdb0 |
0x0801bdb0 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/net/bridge/bridge.ko @ 0x8006348 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.old_dev_ioctl.constprop.0 () | void old_dev_ioctl_constprop_0 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_58h;
| r0 = arg1;
| r1 = arg2;
0x08006348 push {r4, r5, r6, r7, r8, lr} |
0x0800634c mov r4, r0 | r4 = r0;
0x08006350 add r6, r0, 0x540 | r6 = r0 + 0x540;
0x08006354 sub sp, sp, 0x58 |
0x08006358 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0800635c mov r3, sp | r3 = sp;
0x08006360 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08006364 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08006368 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0800636c adds r0, r1, 0x10 | r0 = r1 + 0x10;
0x08006370 sbcslo r0, r0, r3 | __asm ("sbcslo r0, r0, r3");
| if (r0 >= r1) {
0x08006374 movlo r3, 0 | r3 = 0;
| }
0x08006378 cmp r3, 0 |
| if (r3 == 0) {
0x0800637c bne 0x8006514 |
0x08006380 mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x08006384 bic r3, r5, 0xc | r3 = BIT_MASK (r5, 0xc);
0x08006388 orr r3, r3, 4 | r3 |= 4;
0x0800638c mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x08006390 isb sy | __asm ("isb sy");
0x08006394 mov r2, 0x10 | r2 = 0x10;
0x08006398 mov r0, sp | r0 = sp;
0x0800639c stmdaeq r3, {r1, r2, r3, r4, r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r3, {r1, r2, r3, r4, r5, r7, sb, fp, ip, sp}");
0x080063a0 mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x080063a4 isb sy | __asm ("isb sy");
0x080063a8 cmp r0, 0 |
| if (r0 != 0) {
0x080063ac bne 0x8006514 | goto label_0;
| }
0x080063b0 ldr r2, [sp] | r2 = *(sp);
0x080063b4 sub r3, r2, 4 | r3 = r2 - 4;
0x080063b8 cmp r3, 0xe |
| if (r3 > 0xe) {
| /* switch table (15 cases) at 0x80063c4 */
0x080063bc ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080063c0 b 0x8006994 | goto label_1;
| }
| label_0:
0x08006514 mvn r5, 0xd | r5 = ~0xd;
| do {
0x08006518 mov r0, r5 | r0 = r5;
0x0800651c add sp, sp, 0x58 |
0x08006520 pop {r4, r5, r6, r7, r8, pc} |
| label_1:
0x08006994 mvn r5, 0x5e | r5 = ~0x5e;
0x08006998 b 0x8006518 |
| } while (1);
| }
[*] Function mmap used 1 times bridge.ko