[*] Binary protection state of bridge.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function popen tear down of bridge.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8003ad0 */
| #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;
0x08003ad0 push {r4, r5, r6, r7, r8, lr} |
0x08003ad4 mov r4, r0 | r4 = r0;
0x08003ad8 mov r5, r2 | r5 = r2;
0x08003adc mov r1, sp | r1 = sp;
0x08003ae0 ldrb r6, [sp, 0x18] | r6 = *(arg_18h);
0x08003ae4 bic lr, r1, 0x1fc0 | lr = BIT_MASK (r1, 0x1fc0);
0x08003ae8 mov r7, r3 | r7 = r3;
0x08003aec bic lr, lr, 0x3f | lr = BIT_MASK (lr, 0x3f);
0x08003af0 ldr ip, [lr, 4] | ip = *((lr + 4));
0x08003af4 add ip, ip, 0x200 |
0x08003af8 add ip, ip, 1 |
0x08003afc str ip, [lr, 4] | *((lr + 4)) = ip;
0x08003b00 stmdaeq r3, {r0, r2, r4, r5, r6, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r4, r5, r6, r8, ip, sp}");
0x08003b04 mov r2, r7 | r2 = r7;
0x08003b08 mov r1, r5 | r1 = r5;
0x08003b0c add r0, r4, 0x1c | r0 = r4 + 0x1c;
0x08003b10 bl 0x80014bc | r0 = fdb_find_rcu ();
0x08003b14 mov r4, r0 | r4 = r0;
0x08003b18 stmdaeq r3, {r0, r7, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r7, r8, ip, sp}");
0x08003b1c cmp r4, 0 |
| if (r4 != 0) {
0x08003b20 beq 0x8003b4c |
0x08003b24 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x08003b28 ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x08003b2c cmp r6, r3 |
| if (r6 == r3) {
0x08003b30 beq 0x8003b4c | goto label_0;
| }
0x08003b34 mrs r2, apsr | r2 = apsr;
0x08003b38 cpsid i | __asm ("cpsid i");
0x08003b3c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x08003b40 eor r3, r3, 0x20 | r3 ^= 0x20;
0x08003b44 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x08003b48 msr cpsr_c, r2 | cpsr_c = r2;
| }
| label_0:
0x08003b4c pop {r4, r5, r6, r7, r8, lr} |
0x08003b50 movw r1, 0x201 | r1 = 0x201;
0x08003b54 ldr r0, [pc] | r0 = *(0x8003b54);
0x08003b58 stmdaeq r3, {r0, r3, r4, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r3, r4, r8, ip, sp}");
0x08003b5c 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8012834 */
| #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;
0x08012834 push {r4, r5, lr} |
0x08012838 cmp r3, 0 |
0x0801283c sub sp, sp, 0xc |
0x08012840 ldrb r4, [sp, 0x18] | r4 = *(arg_18h);
| if (r3 == 0) {
0x08012844 beq 0x8012880 | goto label_0;
| }
0x08012848 ldr ip, [r0, 0x10] | ip = *(arg_18hx10);
0x0801284c tst ip, 0x200 |
| if ((ip & 0x200) == 0) {
0x08012850 beq 0x8012880 | goto label_0;
| }
0x08012854 cmp r1, 0 |
| if (r1 == 0) {
0x08012858 ldrne r5, [r1, 0xe0] | r5 = *((r1 + 0xe0));
| }
| if (r1 != 0) {
0x0801285c ldreq r5, [r0, 0x284] | r5 = *((r0 + 0x284));
| }
0x08012860 cmp r5, 0 |
| if (r5 == 0) {
0x08012864 beq 0x8012aa0 | goto label_1;
| }
0x08012868 ldrh r1, [r2, 0x94] | r1 = *((r2 + 0x94));
0x0801286c cmp r1, 8 |
| if (r1 == 8) {
0x08012870 beq 0x80128e4 | goto label_2;
| }
0x08012874 movw r0, 0xdd86 | r0 = 0xdd86;
0x08012878 cmp r1, r0 |
0x0801287c beq 0x8012888 |
| while (1) {
| label_0:
0x08012880 add sp, sp, 0xc |
0x08012884 pop {r4, r5, pc} |
0x08012888 ldrh r0, [r2, 0x98] | r0 = *((r2 + 0x98));
0x0801288c sub r3, r3, 0x82 | r3 -= 0x82;
0x08012890 ldr r1, [r2, 0xa4] | r1 = *((r2 + 0xa4));
0x08012894 ldrh ip, [r2, 0x96] | ip = *((r2 + 0x96));
0x08012898 add r1, r1, r0 | r1 += r0;
0x0801289c ldrh r2, [r1, 4] | r2 = *((r1 + 4));
0x080128a0 cmp r3, 0xd |
| if (r3 > 0xd) {
| /* switch table (14 cases) at 0x80128ac */
0x080128a4 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080128a8 b 0x8012880 |
| }
| label_2:
0x080128e4 ldrh r0, [r2, 0x98] | r0 = *((r2 + 0x98));
0x080128e8 sub r3, r3, 0x11 | r3 -= 0x11;
0x080128ec ldr r1, [r2, 0xa4] | r1 = *((r2 + 0xa4));
0x080128f0 add ip, r1, r0 |
0x080128f4 ldrb r0, [r1, r0] | r0 = *((r1 + r0));
0x080128f8 ldrh ip, [ip, 2] | ip = *((ip + 2));
0x080128fc and r0, r0, 0xf | r0 &= 0xf;
0x08012900 cmp r3, 0x11 |
| if (r3 > 0x11) {
| /* switch table (18 cases) at 0x801290c */
0x08012904 ldrls pc, [pc, r3, lsl 2] | offset_1 = r3 << 2;
| pc = *((pc + offset_1));
| }
0x08012908 b 0x8012880 | goto label_0;
| label_1:
0x08012aa0 mov r3, r5 | r3 = r5;
0x08012aa4 stmdaeq r1, {r4, r5, r7, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, r8, sl, fp, sp, lr, pc}");
0x08012aa8 stmdaeq r1, {r4, r5, r7, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, r8, sl, fp, sp, lr, pc}");
0x08012aac mov r2, 9 | r2 = 9;
0x08012ab0 movw r1, 0xeff | r1 = 0xeff;
0x08012ab4 add sp, sp, 0xc |
0x08012ab8 pop {r4, r5, lr} |
0x08012abc stmdaeq r3, {r0, r2, r4, r5, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r4, r5, r8, ip, sp}");
0x08012ac0 ldr r3, [r5, 0x78] | r3 = *((r5 + 0x78));
0x08012ac4 ldr r2, [r5, 0x7c] | r2 = *((r5 + 0x7c));
0x08012ac8 adds r3, r3, 1 | r3++;
0x08012acc str r3, [r5, 0x78] | *((r5 + 0x78)) = r3;
0x08012ad0 adc r3, r2, 0 | __asm ("adc r3, r2, 0");
0x08012ad4 str r3, [r5, 0x7c] | *((r5 + 0x7c)) = r3;
0x08012ad8 b 0x8012880 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8014958 */
| #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_8h;
| int32_t var_10h;
| int32_t var_2ch;
| int32_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x08014958 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0801495c sub sp, sp, 0x54 |
0x08014960 str r3, [sp, 8] | var_8h = r3;
0x08014964 ldrh r3, [r2, 0x1e] | r3 = *((r2 + 0x1e));
0x08014968 and r3, r3, 0xfe00 | r3 &= 0xfe00;
0x0801496c strh r3, [r2, 0x1e] | *((r2 + 0x1e)) = r3;
0x08014970 ldr r7, [r0, 0x10] | r7 = *((r0 + 0x10));
0x08014974 ubfx r7, r7, 6, 1 | r7 = (r7 >> 6) & ((1 << 1) - 1);
0x08014978 cmp r7, 0 |
| if (r7 == 0) {
0x0801497c beq 0x80149a4 | goto label_0;
| }
0x08014980 ldrh r3, [r2, 0x94] | r3 = *((r2 + 0x94));
0x08014984 mov r4, r2 | r4 = r2;
0x08014988 mov sl, r0 | sl = r0;
0x0801498c mov r5, r1 | r5 = r1;
0x08014990 cmp r3, 8 |
| if (r3 == 8) {
0x08014994 beq 0x8014a3c | goto label_4;
| }
0x08014998 movw r2, 0xdd86 | r2 = 0xdd86;
0x0801499c cmp r3, r2 |
0x080149a0 beq 0x80149b4 |
| while (r6 != 0x3d) {
| label_0:
0x080149a4 mov r6, 0 | r6 = 0;
| label_1:
0x080149a8 mov r0, r6 | r0 = r6;
0x080149ac add sp, sp, 0x54 |
0x080149b0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x080149b4 mov r0, r4 | r0 = r4;
0x080149b8 stmdaeq r3, {r0, r4, r6, r7, r8, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r4, r6, r7, r8, sb, ip, sp}");
0x080149bc cmn r0, 0x2a |
0x080149c0 cmnne r0, 0x3d | __asm ("cmnne r0, 0x3d");
0x080149c4 mov r6, r0 | r6 = r0;
| if (r0 != 0x2a) {
0x080149c8 moveq r3, 1 | r3 = 1;
| }
| if (r0 == 0x2a) {
0x080149cc movne r3, 0 | r3 = 0;
| }
0x080149d0 str r3, [sp, 0x10] | var_10h = r3;
| if (r0 != 0x2a) {
0x080149d4 beq 0x8014d80 |
0x080149d8 cmp r0, 0 |
| if (r0 < 0) {
0x080149dc blt 0x80158e8 | goto label_5;
| }
0x080149e0 ldrh lr, [r4, 0x96] |
0x080149e4 ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x080149e8 add r0, ip, lr | r0 = ip + lr;
0x080149ec ldrb r3, [ip, lr] | r3 = *((ip + lr));
0x080149f0 strb r3, [r4, 0x1e] | *((r4 + 0x1e)) = r3;
0x080149f4 sub r2, r3, 0x82 | r2 = r3 - 0x82;
0x080149f8 cmp r2, 0xd |
| if (r2 > 0xd) {
| /* switch table (14 cases) at 0x8014a04 */
0x080149fc ldrls pc, [pc, r2, lsl 2] | offset_0 = r2 << 2;
| pc = *((pc + offset_0));
| }
0x08014a00 b 0x8014d5c | goto label_6;
| label_4:
0x08014a3c mov r0, r2 | r0 = r2;
0x08014a40 stmdaeq r3, {r0, r2, r4, r6, r7, r8, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r4, r6, r7, r8, sb, ip, sp}");
0x08014a44 mov r6, r0 | r6 = r0;
0x08014a48 cmn r0, 0x2a |
| if (r0 == 0x2a) {
0x08014a4c beq 0x8014e50 | goto label_7;
| }
0x08014a50 cmp r0, 0 |
| if (r0 < 0) {
0x08014a54 blt 0x80158e8 | goto label_5;
| }
0x08014a58 ldrh r2, [r4, 0x96] | r2 = *((r4 + 0x96));
0x08014a5c ldr ip, [r4, 0xa4] | ip = *((r4 + 0xa4));
0x08014a60 ldrh r8, [r4, 0x9a] | r8 = *((r4 + 0x9a));
0x08014a64 add r1, ip, r2 | r1 = ip + r2;
0x08014a68 ldrb r3, [ip, r2] | r3 = *((ip + r2));
0x08014a6c add r8, ip, r8 | r8 = ip + r8;
0x08014a70 add r8, r8, 6 | r8 += 6;
0x08014a74 strb r3, [r4, 0x1e] | *((r4 + 0x1e)) = r3;
0x08014a78 sub r0, r3, 0x11 | r0 = r3 - 0x11;
0x08014a7c cmp r0, 0x11 |
| if (r0 > 0x11) {
| /* switch table (18 cases) at 0x8014a88 */
0x08014a80 ldrls pc, [pc, r0, lsl 2] | offset_1 = r0 << 2;
| pc = *((pc + offset_1));
| }
0x08014a84 b 0x8014d5c |
| label_6:
0x08014d5c mov r0, sl | r0 = sl;
0x08014d60 mov ip, 0 |
0x08014d64 mov r2, r4 | r2 = r4;
0x08014d68 mov r1, r5 | r1 = r5;
0x08014d6c str ip, [sp] | *(sp) = ip;
0x08014d70 stmdaeq r1, {r2, r4, r5, fp, sp} | __asm ("stmdaeq r1, {r2, r4, r5, fp, sp}");
0x08014d74 mov r0, r6 | r0 = r6;
0x08014d78 add sp, sp, 0x54 |
0x08014d7c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x08014d80 ldr r0, [r4, 0xa4] | r0 = *((r4 + 0xa4));
0x08014d84 ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x08014d88 add r3, r0, r3 | r3 = r0 + r3;
0x08014d8c ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x08014d90 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x08014d94 ldr ip, [r3, 0x20] | ip = *((r3 + 0x20));
0x08014d98 eor r1, r1, 0x2fc | r1 ^= 0x2fc;
0x08014d9c eor r1, r1, 3 | r1 ^= 3;
0x08014da0 orr r2, r2, ip | r2 |= ip;
0x08014da4 orr r2, r2, r1 | r2 |= r1;
0x08014da8 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x08014dac eor r1, r1, 0x1000000 | r1 ^= 0x1000000;
0x08014db0 orrs r2, r2, r1 | r2 |= r1;
| if (r2 == r2) {
0x08014db4 ldrbne r2, [r4, 0x1f] | r2 = *((r4 + 0x1f));
| }
| if (r2 == r2) {
0x08014db8 orrne r2, r2, 1 | r2 |= 1;
| }
| if (r2 == r2) {
0x08014dbc strbne r2, [r4, 0x1f] | *((r4 + 0x1f)) = r2;
| }
0x08014dc0 cmn r6, 0x3d |
0x08014dc4 bne 0x80149a4 |
| }
0x08014dc8 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x08014dcc ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x08014dd0 ldr ip, [r3, 0x20] | ip = *((r3 + 0x20));
0x08014dd4 eor r1, r1, 0x2fc | r1 ^= 0x2fc;
0x08014dd8 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x08014ddc eor r1, r1, 3 | r1 ^= 3;
0x08014de0 orr r2, r2, ip | r2 |= ip;
0x08014de4 orr r2, r2, r1 | r2 |= r1;
0x08014de8 eor r3, r3, 0x6a000000 | r3 ^= 0x6a000000;
0x08014dec orrs r2, r2, r3 | r2 |= r3;
| if (r2 != r2) {
0x08014df0 bne 0x80149a4 | goto label_0;
| }
0x08014df4 ldrh r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x08014df8 ldrb r3, [r0, r3] | r3 = *((r0 + r3));
0x08014dfc cmp r3, 0x97 |
| if (r3 != 0x97) {
0x08014e00 bne 0x80149a4 | goto label_0;
| }
| label_2:
0x08014e04 mov r3, sp | r3 = sp;
0x08014e08 bic r4, r3, 0x1fc0 | r4 = BIT_MASK (r3, 0x1fc0);
0x08014e0c bic r4, r4, 0x3f | r4 = BIT_MASK (r4, 0x3f);
0x08014e10 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x08014e14 add r3, r3, 1 | r3++;
0x08014e18 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08014e1c mov r1, r5 | r1 = r5;
0x08014e20 mov r0, sl | r0 = sl;
0x08014e24 bl 0x800f0c4 | br_multicast_mark_router ();
0x08014e28 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x08014e2c sub r3, r3, 1 | r3--;
0x08014e30 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08014e34 cmp r3, 0 |
| if (r3 != 0) {
0x08014e38 bne 0x80149a4 | goto label_0;
| }
0x08014e3c ldr r3, [r4] | r3 = *(r4);
0x08014e40 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08014e44 beq 0x80149a4 | goto label_0;
| }
0x08014e48 stmdaeq r3, {r0, r2, r3, r4, r5, r7, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r4, r5, r7, r8, ip, sp}");
0x08014e4c b 0x80149a4 | goto label_0;
| label_7:
0x08014e50 ldr r1, [r4, 0xa4] | r1 = *((r4 + 0xa4));
0x08014e54 ldrh r3, [r4, 0x98] | r3 = *((r4 + 0x98));
0x08014e58 add r3, r1, r3 | r3 = r1 + r3;
0x08014e5c ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x08014e60 bic r0, r2, 0xff000000 | r0 = BIT_MASK (r2, 0xff000000);
0x08014e64 cmp r0, 0xe0 |
| if (r0 != 0xe0) {
0x08014e68 beq 0x8015960 |
0x08014e6c ldrb r3, [r4, 0x1f] | r3 = *((r4 + 0x1f));
0x08014e70 orr r3, r3, 1 | r3 |= 1;
0x08014e74 strb r3, [r4, 0x1f] | *((r4 + 0x1f)) = r3;
0x08014e78 b 0x80149a4 | goto label_0;
| label_5:
0x080158e8 ldrh r2, [r4, 0x94] | r2 = *((r4 + 0x94));
0x080158ec mov r1, r5 | r1 = r5;
0x080158f0 mov r0, sl | r0 = sl;
0x080158f4 bl 0x800ef10 | br_multicast_err_count ();
0x080158f8 b 0x80149a8 | goto label_1;
| }
0x08015960 mov r0, 0xe0 |
0x08015964 movt r0, 0xd00 | r0 = 0xd0000e0;
0x08015968 cmp r2, r0 |
| if (r2 == r0) {
0x0801596c beq 0x8015ad8 | goto label_8;
| }
0x08015970 mov r0, 0xe0 |
0x08015974 movt r0, 0x6a00 | r0 = 0x6a0000e0;
0x08015978 cmp r2, r0 |
| if (r2 != r0) {
0x0801597c bne 0x80149a4 | goto label_0;
| }
0x08015980 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x08015984 cmp r3, 2 |
| if (r3 != 2) {
0x08015988 bne 0x80149a4 | goto label_0;
| }
0x0801598c ldrh r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x08015990 ldrb r3, [r1, r3] | r3 = *((r1 + r3));
0x08015994 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x08015998 beq 0x8014e04 | goto label_2;
| }
0x0801599c b 0x80149a4 | goto label_0;
| label_8:
0x08015ad8 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x08015adc cmp r3, 0x67 |
| if (r3 != 0x67) {
0x08015ae0 bne 0x80149a4 | goto label_0;
| }
0x08015ae4 ldrh r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x08015ae8 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x08015aec add r3, r1, r3 | r3 = r1 + r3;
0x08015af0 ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x08015af4 ldr r1, [r4, 0xa8] | r1 = *((r4 + 0xa8));
0x08015af8 sub r2, r2, r0 | r2 -= r0;
0x08015afc sub r1, r3, r1 | r1 = r3 - r1;
0x08015b00 sub r2, r2, r1 | r2 -= r1;
0x08015b04 cmp r2, 3 |
| if (r2 > 3) {
0x08015b08 bgt 0x8015dc8 | goto label_9;
| }
0x08015b0c cmp r4, 0 |
| if (r4 == 0) {
0x08015b10 beq 0x80149a4 | goto label_0;
| }
0x08015b14 mov r0, r4 | r0 = r4;
0x08015b18 add r2, sp, 0x2c | r2 += var_2ch;
0x08015b1c mov r3, 4 | r3 = 4;
0x08015b20 stmdaeq r3, {r0, r5, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r5, sb, ip, sp}");
0x08015b24 cmp r0, 0 |
| if (r0 < 0) {
0x08015b28 blt 0x80149a4 | goto label_0;
| }
0x08015b2c add r3, sp, 0x2c | r3 += var_2ch;
| label_3:
0x08015b30 ldrb r3, [r3] | r3 = *(r3);
0x08015b34 lsr r2, r3, 4 | r2 = r3 >> 4;
0x08015b38 cmp r2, 2 |
| if (r2 != 2) {
0x08015b3c bne 0x80149a4 | goto label_0;
| }
0x08015b40 tst r3, 0xf |
| if ((r3 & 0xf) != 0) {
0x08015b44 bne 0x80149a4 | goto label_0;
| }
0x08015b48 b 0x8014e04 | goto label_2;
| label_9:
0x08015dc8 cmp r3, 0 |
| if (r3 != 0) {
0x08015dcc bne 0x8015b30 | goto label_3;
| }
0x08015dd0 b 0x80149a4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x80123c8 */
| #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;
| int32_t var_4h;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x080123c8 push {r4, r5, lr} |
0x080123cc stmdaeq r3, {r0, r2, r3, r4, r5, r6, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r4, r5, r6, r8, ip, sp}");
0x080123d0 stmdaeq r3, {r0, r2, r3, r4, r5, r6, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r4, r5, r6, r8, ip, sp}");
0x080123d4 sub sp, sp, 0xc |
0x080123d8 ldr r5, [r0] | r5 = *(r0);
0x080123dc mov r3, sp | r3 = sp;
0x080123e0 mov r4, r0 | r4 = r0;
0x080123e4 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080123e8 ldr ip, [r2] | ip = *(r2);
0x080123ec bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080123f0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080123f4 add r2, r2, 1 | r2++;
0x080123f8 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080123fc ldrb r3, [r0, 0xdc] | r3 = *((r0 + 0xdc));
0x08012400 cmp r3, r1 |
| if (r3 != r1) {
0x08012404 beq 0x8012424 |
0x08012408 cmp r1, 3 |
| if (r1 > 3) {
| /* switch table (4 cases) at 0x8012414 */
0x0801240c ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08012410 b 0x801257c | goto label_1;
| }
0x08012424 cmp r3, 3 |
| if (r3 == 3) {
0x08012428 bne 0x8012454 |
0x0801242c ldr r1, [r5, 0x164] | r1 = *((r5 + 0x164));
0x08012430 add r0, r0, 0xe4 | r0 += 0xe4;
0x08012434 add r1, ip, r1 | r1 = ip + r1;
0x08012438 stmdaeq r3, {r0, r2, r3, r6, r7, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r6, r7, sb, ip, sp}");
0x0801243c b 0x8012454 |
| }
0x08012454 mov r0, 0 | r0 = 0;
| label_0:
0x08012458 mov r3, sp | r3 = sp;
0x0801245c bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08012460 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08012464 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08012468 sub r2, r2, 1 | r2--;
0x0801246c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08012470 cmp r2, 0 |
0x08012474 beq 0x801255c |
| while ((r3 & 2) == 0) {
0x08012478 add sp, sp, 0xc |
0x0801247c pop {r4, r5, pc} |
0x0801255c ldr r3, [r3] | r3 = *(r3);
0x08012560 tst r3, 2 |
0x08012564 beq 0x8012478 |
| }
0x08012568 str r0, [sp, 4] | var_4h = r0;
0x0801256c stmdaeq r3, {r0, r2, r3, r4, r5, r7, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r4, r5, r7, r8, ip, sp}");
0x08012570 ldr r0, [sp, 4] | r0 = var_4h;
0x08012574 add sp, sp, 0xc |
0x08012578 pop {r4, r5, pc} |
| label_1:
0x0801257c mvn r0, 0x15 | r0 = ~0x15;
0x08012580 b 0x8012458 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x80046c0 */
| #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;
0x080046c0 push {r4, r5, r6, r7, r8, lr} |
0x080046c4 mov r4, r0 | r4 = r0;
0x080046c8 mov r5, r1 | r5 = r1;
0x080046cc ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x080046d0 ldrd r6, r7, [r0] | __asm ("ldrd r6, r7, [r0]");
0x080046d4 tst r3, 0x10 |
| if ((r3 & 0x10) == 0) {
0x080046d8 bne 0x80046e8 |
0x080046dc ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x080046e0 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080046e4 bne 0x8004774 | goto label_2;
| }
| }
| label_1:
0x080046e8 mov r3, 0 | r3 = 0;
0x080046ec strb r3, [r5] | *(r5) = r3;
0x080046f0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x080046f4 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x080046f8 tst r3, 1 |
0x080046fc popeq {r4, r5, r6, r7, r8, pc} |
0x08004700 mov r3, sp | r3 = sp;
0x08004704 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08004708 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x0800470c ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x08004710 add r3, r3, 0x200 | r3 += 0x200;
0x08004714 add r3, r3, 1 | r3++;
0x08004718 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0800471c ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x08004720 tst r3, 1 |
0x08004724 bne 0x8004744 |
| while (r3 != 0) {
0x08004728 ldrb r3, [r4, 0x1d] | r3 = *((r4 + 0x1d));
0x0800472c cmp r3, 0 |
| if (r3 != 0) {
0x08004730 bne 0x8004794 | goto label_3;
| }
| label_0:
0x08004734 pop {r4, r5, r6, r7, r8, lr} |
0x08004738 movw r1, 0x201 | r1 = 0x201;
0x0800473c ldr r0, [pc, 0x70] | r0 = *(0x80047b0);
0x08004740 stmdaeq r3, {r0, r3, r4, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r3, r4, r8, ip, sp}");
0x08004744 ldrb r3, [r7, 0x13c] | r3 = *((r7 + 0x13c));
0x08004748 cmp r3, 0 |
0x0800474c cmpne r3, 6 | __asm ("cmpne r3, 6");
0x08004750 bne 0x8004728 |
| }
0x08004754 ldrb r3, [r4, 0x1d] | r3 = *((r4 + 0x1d));
0x08004758 cmp r3, 0 |
| if (r3 != 0) {
0x0800475c bne 0x8004734 | goto label_0;
| }
0x08004760 mov r0, r4 | r0 = r4;
0x08004764 stmdaeq r0, {r4, r5, r7, sl, pc} | __asm ("stmdaeq r0, {r4, r5, r7, sl, pc}");
0x08004768 mov r3, 1 | r3 = 1;
0x0800476c strb r3, [r5] | *(r5) = r3;
0x08004770 b 0x8004734 | goto label_0;
| label_2:
0x08004774 ldrb r3, [r7, 0x13c] | r3 = *((r7 + 0x13c));
0x08004778 cmp r3, 0 |
0x0800477c cmpne r3, 6 | __asm ("cmpne r3, 6");
| if (r3 != 0) {
0x08004780 bne 0x80046e8 | goto label_1;
| }
0x08004784 mov r0, r7 | r0 = r7;
0x08004788 bl 0x8004650 | port_cost ();
0x0800478c str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x08004790 b 0x80046e8 | goto label_1;
| label_3:
0x08004794 mov r0, r4 | r0 = r4;
0x08004798 stmdaeq r0, {r3, r4, r6, r7, sl, pc} | __asm ("stmdaeq r0, {r3, r4, r6, r7, sl, pc}");
0x0800479c mov r3, 1 | r3 = 1;
0x080047a0 strb r3, [r5] | *(r5) = r3;
0x080047a4 movw r1, 0x201 | r1 = 0x201;
0x080047a8 ldr r0, [pc, 4] | r0 = sym.br_device_event;
0x080047ac pop {r4, r5, r6, r7, r8, lr} |
0x080047b0 stmdaeq r3, {r0, r3, r4, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r3, r4, r8, ip, sp}");
0x080047b4 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x80085ac */
| #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;
0x080085ac push {r4, r5, r6, lr} |
0x080085b0 mov r5, r0 | r5 = r0;
0x080085b4 mov r3, sp | r3 = sp;
0x080085b8 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080085bc bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080085c0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080085c4 add r3, r3, 0x200 | r3 += 0x200;
0x080085c8 add r3, r3, 1 | r3++;
0x080085cc str r3, [r2, 4] | *((r2 + 4)) = r3;
0x080085d0 ldr r3, [r0] | r3 = *(r0);
0x080085d4 cmp r0, r3 |
| if (r0 == r3) {
0x080085d8 beq 0x8008618 | goto label_1;
| }
0x080085dc sub r4, r3, 8 | r4 = r3 - 8;
0x080085e0 b 0x80085f4 |
| while (r3 == 0) {
0x080085e4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x080085e8 sub r4, r3, 8 | r4 = r3 - 8;
0x080085ec cmp r5, r3 |
| if (r5 == r3) {
0x080085f0 beq 0x8008618 | goto label_1;
| }
| label_0:
0x080085f4 ldrb r3, [r4, 0x1d] | r3 = *((r4 + 0x1d));
0x080085f8 cmp r3, 0 |
0x080085fc beq 0x80085e4 |
| }
0x08008600 mov r0, r4 | r0 = r4;
0x08008604 stmdaeq r0, {r3, r4, r6, r7, sl, pc} | __asm ("stmdaeq r0, {r3, r4, r6, r7, sl, pc}");
0x08008608 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0800860c sub r4, r3, 8 | r4 = r3 - 8;
0x08008610 cmp r5, r3 |
| if (r5 != r3) {
0x08008614 bne 0x80085f4 | goto label_0;
| }
| label_1:
0x08008618 mov r0, r5 | r0 = r5;
0x0800861c mov r1, 0 | r1 = 0;
0x08008620 stmdaeq r0, {r4, r5, r8, sl, ip, sp, lr} | __asm ("stmdaeq r0, {r4, r5, r8, sl, ip, sp, lr}");
0x08008624 mov r3, 0 | r3 = 0;
0x08008628 movw r1, 0x201 | r1 = 0x201;
0x0800862c strb r3, [r5, 0x119] | *((r5 + 0x119)) = r3;
0x08008630 ldr r0, [pc, 0x24] | r0 = *(0x8008658);
0x08008634 stmdaeq r3, {r0, r3, r4, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r3, r4, r8, ip, sp}");
0x08008638 add r0, r5, 0x2f0 | r0 = r5 + 0x2f0;
0x0800863c stmdaeq r3, {r0, r2, r4, r6, r7, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r4, r6, r7, sb, ip, sp}");
0x08008640 add r0, r5, 0x318 | r0 = r5 + 0x318;
0x08008644 stmdaeq r3, {r0, r2, r4, r6, r7, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r4, r6, r7, sb, ip, sp}");
0x08008648 add r0, r5, 0x304 | r0 = r5 + 0x304;
0x0800864c stmdaeq r3, {r0, r2, r4, r6, r7, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r4, r6, r7, sb, ip, sp}");
0x08008650 add r0, r5, 0x32c | r0 = r5 + 0x32c;
0x08008654 pop {r4, r5, r6, lr} |
0x08008658 stmdaeq r3, {r0, r2, r5, r6, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r5, r6, sb, ip, sp}");
0x0800865c 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8008ac4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.br_stp_set_bridge_priority () | void br_stp_set_bridge_priority (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08008ac4 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08008ac8 mov r5, r0 | r5 = r0;
0x08008acc mov r3, sp | r3 = sp;
0x08008ad0 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08008ad4 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08008ad8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x08008adc add r3, r3, 0x200 | r3 += 0x200;
0x08008ae0 add r3, r3, 1 | r3++;
0x08008ae4 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08008ae8 add sb, r0, 0x108 | sb = r0 + 0x108;
0x08008aec add r8, r0, 0x110 | r8 = r0 + 0x110;
0x08008af0 rev16 r6, r1 | __asm ("rev16 r6, r1");
0x08008af4 mov r0, r8 | r0 = r8;
0x08008af8 mov r1, sb | r1 = sb;
0x08008afc mov r2, 8 | r2 = 8;
0x08008b00 stmdaeq r3, {r0, r2, r3, r5, r7, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r5, r7, r8, ip, sp}");
0x08008b04 ldr r4, [r5] | r4 = *(r5);
0x08008b08 mov r7, r0 | r7 = r0;
0x08008b0c cmp r5, r4 |
| if (r5 == r4) {
0x08008b10 subne r4, r4, 8 | r4 -= 8;
| }
| if (r5 == r4) {
0x08008b14 beq 0x8008b60 | goto label_0;
| }
| do {
0x08008b18 ldrb r3, [r4, 0x1d] | r3 = *((r4 + 0x1d));
0x08008b1c cmp r3, 0 |
| if (r3 != 0) {
0x08008b20 beq 0x8008b50 |
0x08008b24 mov r0, r4 | r0 = r4;
0x08008b28 mov r2, 8 | r2 = 8;
0x08008b2c ldr r1, [r0], 0x2e | r1 = *(r0);
| r0 += 0x2e;
0x08008b30 add r1, r1, 0x110 | r1 += 0x110;
0x08008b34 stmdaeq r3, {r0, r2, r3, r5, r7, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r5, r7, r8, ip, sp}");
0x08008b38 cmp r0, 0 |
| if (r0 != 0) {
0x08008b3c bne 0x8008b50 | goto label_1;
| }
0x08008b40 ldrh r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x08008b44 ldrh r3, [r4, 0x22] | r3 = *((r4 + 0x22));
0x08008b48 cmp r2, r3 |
0x08008b4c strheq r6, [r4, 0x2e] | __asm ("strheq r6, [r4, 0x2e]");
| }
| label_1:
0x08008b50 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08008b54 sub r4, r3, 8 | r4 = r3 - 8;
0x08008b58 cmp r5, r3 |
0x08008b5c bne 0x8008b18 |
| } while (r5 != r3);
| label_0:
0x08008b60 mov r0, r5 | r0 = r5;
0x08008b64 strh r6, [r8] | *(r8) = r6;
0x08008b68 stmdaeq r0, {r5, r6, r8, sb, ip, sp, lr} | __asm ("stmdaeq r0, {r5, r6, r8, sb, ip, sp, lr}");
0x08008b6c mov r0, r5 | r0 = r5;
0x08008b70 stmdaeq r0, {r4, r6, r7, r8, sb, sl, ip, sp, lr} | __asm ("stmdaeq r0, {r4, r6, r7, r8, sb, sl, ip, sp, lr}");
0x08008b74 mov r1, sb | r1 = sb;
0x08008b78 mov r0, r8 | r0 = r8;
0x08008b7c mov r2, 8 | r2 = 8;
0x08008b80 stmdaeq r3, {r0, r2, r3, r5, r7, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r5, r7, r8, ip, sp}");
0x08008b84 clz r0, r0 | r0 &= r0;
0x08008b88 cmp r7, 0 |
0x08008b8c lsr r0, r0, 5 | r0 >>= 5;
| if (r7 != 0) {
0x08008b90 moveq r0, 0 | r0 = 0;
| }
0x08008b94 cmp r0, 0 |
| if (r0 == 0) {
0x08008b98 bne 0x8008bac |
0x08008b9c pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08008ba0 movw r1, 0x201 | r1 = 0x201;
0x08008ba4 ldr r0, [pc, 0x18] | r0 = *(0x8008bc0);
0x08008ba8 stmdaeq r3, {r0, r3, r4, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r3, r4, r8, ip, sp}");
| }
0x08008bac mov r0, r5 | r0 = r5;
0x08008bb0 stmdaeq r0, {r3, r6, sb, sl, ip, sp, lr} | __asm ("stmdaeq r0, {r3, r6, sb, sl, ip, sp, lr}");
0x08008bb4 ldr r0, [pc, 8] | r0 = sym.br_device_event;
0x08008bb8 pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08008bbc movw r1, 0x201 | r1 = 0x201;
0x08008bc0 stmdaeq r3, {r0, r3, r4, r8, ip, sp} | __asm ("stmdaeq r3, {r0, r3, r4, r8, ip, sp}");
0x08008bc4 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-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x801b404 */
| #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;
0x0801b404 push {r4, r5, r6, lr} |
0x0801b408 sub r1, r1, 1 | r1--;
0x0801b40c mov r3, 0 | r3 = 0;
0x0801b410 sub sp, sp, 0x20 |
0x0801b414 add r5, r0, 0x540 | r5 = r0 + 0x540;
0x0801b418 strb r3, [sp, 0x13] | var_13h = r3;
0x0801b41c cmp r1, 0x14 |
| if (r1 > 0x14) {
| /* switch table (21 cases) at 0x801b428 */
0x0801b420 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0801b424 b 0x801b488 |
0x0801b488 mov r4, 0 | r4 = 0;
0x0801b48c mov r0, r4 | r0 = r4;
0x0801b490 add sp, sp, 0x20 |
0x0801b494 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8001044 */
| #include <stdint.h>
|
; (fcn) sym.jhash () | void jhash (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08001044 push {r4, r5, lr} |
0x08001048 movw r4, 0xbeef |
0x0800104c movt r4, 0xdead | r4 = 0xdeadbeef;
0x08001050 add r4, r2, r4 | r4 = r2 + r4;
0x08001054 mov lr, r0 | lr = r0;
0x08001058 add r4, r4, r1 | r4 += r1;
0x0800105c cmp r1, 0xc |
0x08001060 mov r0, r4 | r0 = r4;
0x08001064 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x08001068 bls 0x80010d8 | goto label_0;
| }
| do {
0x0800106c ldr ip, [lr, 8] | ip = *((lr + 8));
0x08001070 sub r1, r1, 0xc | r1 -= 0xc;
0x08001074 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x08001078 cmp r1, 0xc |
0x0800107c ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x08001080 add ip, ip, r0 |
0x08001084 add r3, r3, r5 | r3 += r5;
0x08001088 sub r2, r2, ip | r2 -= ip;
0x0800108c add r0, r3, ip | r0 = r3 + ip;
0x08001090 add r2, r2, r4 | r2 += r4;
0x08001094 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x08001098 sub r3, r3, r2 | r3 -= r2;
0x0800109c add ip, r2, r0 |
0x080010a0 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x080010a4 sub r0, r0, r3 | r0 -= r3;
0x080010a8 add r2, r3, ip | r2 = r3 + ip;
0x080010ac eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x080010b0 sub ip, ip, r3 |
0x080010b4 add r0, r3, r2 | r0 = r3 + r2;
0x080010b8 eor ip, ip, r3, ror 16 |
0x080010bc sub r3, r2, ip | r3 = r2 - ip;
0x080010c0 add r4, ip, r0 | r4 = ip + r0;
0x080010c4 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x080010c8 sub r0, r0, r3 | r0 -= r3;
0x080010cc add r5, r3, r4 | r5 = r3 + r4;
0x080010d0 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x080010d4 bhi 0x800106c |
| } while (r1 > 0xc);
| label_0:
0x080010d8 sub r1, r1, 1 | r1--;
0x080010dc cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x80010e8 */
0x080010e0 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x080010e4 b 0x80011b0 |
0x080011b0 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x800e83c */
| #include <stdint.h>
|
; (fcn) sym.jhash_1 () | void jhash_1 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0800e83c push {r4, r5, lr} |
0x0800e840 movw r4, 0xbeef |
0x0800e844 movt r4, 0xdead | r4 = 0xdeadbeef;
0x0800e848 add r4, r2, r4 | r4 = r2 + r4;
0x0800e84c mov lr, r0 | lr = r0;
0x0800e850 add r4, r4, r1 | r4 += r1;
0x0800e854 cmp r1, 0xc |
0x0800e858 mov r0, r4 | r0 = r4;
0x0800e85c mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0800e860 bls 0x800e8d0 | goto label_0;
| }
| do {
0x0800e864 ldr ip, [lr, 8] | ip = *((lr + 8));
0x0800e868 sub r1, r1, 0xc | r1 -= 0xc;
0x0800e86c ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0800e870 cmp r1, 0xc |
0x0800e874 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0800e878 add ip, ip, r0 |
0x0800e87c add r3, r3, r5 | r3 += r5;
0x0800e880 sub r2, r2, ip | r2 -= ip;
0x0800e884 add r0, r3, ip | r0 = r3 + ip;
0x0800e888 add r2, r2, r4 | r2 += r4;
0x0800e88c eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0800e890 sub r3, r3, r2 | r3 -= r2;
0x0800e894 add ip, r2, r0 |
0x0800e898 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0800e89c sub r0, r0, r3 | r0 -= r3;
0x0800e8a0 add r2, r3, ip | r2 = r3 + ip;
0x0800e8a4 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0800e8a8 sub ip, ip, r3 |
0x0800e8ac add r0, r3, r2 | r0 = r3 + r2;
0x0800e8b0 eor ip, ip, r3, ror 16 |
0x0800e8b4 sub r3, r2, ip | r3 = r2 - ip;
0x0800e8b8 add r4, ip, r0 | r4 = ip + r0;
0x0800e8bc eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0800e8c0 sub r0, r0, r3 | r0 -= r3;
0x0800e8c4 add r5, r3, r4 | r5 = r3 + r4;
0x0800e8c8 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0800e8cc bhi 0x800e864 |
| } while (r1 > 0xc);
| label_0:
0x0800e8d0 sub r1, r1, 1 | r1--;
0x0800e8d4 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x800e8e0 */
0x0800e8d8 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0800e8dc b 0x800e9a8 |
0x0800e9a8 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8017bd8 */
| #include <stdint.h>
|
; (fcn) sym.jhash_2 () | void jhash_2 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08017bd8 push {r4, r5, lr} |
0x08017bdc movw r4, 0xbeef |
0x08017be0 movt r4, 0xdead | r4 = 0xdeadbeef;
0x08017be4 add r4, r2, r4 | r4 = r2 + r4;
0x08017be8 mov lr, r0 | lr = r0;
0x08017bec add r4, r4, r1 | r4 += r1;
0x08017bf0 cmp r1, 0xc |
0x08017bf4 mov r0, r4 | r0 = r4;
0x08017bf8 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x08017bfc bls 0x8017c6c | goto label_0;
| }
| do {
0x08017c00 ldr ip, [lr, 8] | ip = *((lr + 8));
0x08017c04 sub r1, r1, 0xc | r1 -= 0xc;
0x08017c08 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x08017c0c cmp r1, 0xc |
0x08017c10 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x08017c14 add ip, ip, r0 |
0x08017c18 add r3, r3, r5 | r3 += r5;
0x08017c1c sub r2, r2, ip | r2 -= ip;
0x08017c20 add r0, r3, ip | r0 = r3 + ip;
0x08017c24 add r2, r2, r4 | r2 += r4;
0x08017c28 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x08017c2c sub r3, r3, r2 | r3 -= r2;
0x08017c30 add ip, r2, r0 |
0x08017c34 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x08017c38 sub r0, r0, r3 | r0 -= r3;
0x08017c3c add r2, r3, ip | r2 = r3 + ip;
0x08017c40 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x08017c44 sub ip, ip, r3 |
0x08017c48 add r0, r3, r2 | r0 = r3 + r2;
0x08017c4c eor ip, ip, r3, ror 16 |
0x08017c50 sub r3, r2, ip | r3 = r2 - ip;
0x08017c54 add r4, ip, r0 | r4 = ip + r0;
0x08017c58 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x08017c5c sub r0, r0, r3 | r0 -= r3;
0x08017c60 add r5, r3, r4 | r5 = r3 + r4;
0x08017c64 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x08017c68 bhi 0x8017c00 |
| } while (r1 > 0xc);
| label_0:
0x08017c6c sub r1, r1, 1 | r1--;
0x08017c70 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x8017c7c */
0x08017c74 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08017c78 b 0x8017d44 |
0x08017d44 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x801b6a8 */
| #include <stdint.h>
|
; (fcn) sym.jhash_3 () | void jhash_3 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0801b6a8 push {r4, r5, lr} |
0x0801b6ac movw r4, 0xbeef |
0x0801b6b0 movt r4, 0xdead | r4 = 0xdeadbeef;
0x0801b6b4 add r4, r2, r4 | r4 = r2 + r4;
0x0801b6b8 mov lr, r0 | lr = r0;
0x0801b6bc add r4, r4, r1 | r4 += r1;
0x0801b6c0 cmp r1, 0xc |
0x0801b6c4 mov r0, r4 | r0 = r4;
0x0801b6c8 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0801b6cc bls 0x801b73c | goto label_0;
| }
| do {
0x0801b6d0 ldr ip, [lr, 8] | ip = *((lr + 8));
0x0801b6d4 sub r1, r1, 0xc | r1 -= 0xc;
0x0801b6d8 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0801b6dc cmp r1, 0xc |
0x0801b6e0 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0801b6e4 add ip, ip, r0 |
0x0801b6e8 add r3, r3, r5 | r3 += r5;
0x0801b6ec sub r2, r2, ip | r2 -= ip;
0x0801b6f0 add r0, r3, ip | r0 = r3 + ip;
0x0801b6f4 add r2, r2, r4 | r2 += r4;
0x0801b6f8 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0801b6fc sub r3, r3, r2 | r3 -= r2;
0x0801b700 add ip, r2, r0 |
0x0801b704 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0801b708 sub r0, r0, r3 | r0 -= r3;
0x0801b70c add r2, r3, ip | r2 = r3 + ip;
0x0801b710 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0801b714 sub ip, ip, r3 |
0x0801b718 add r0, r3, r2 | r0 = r3 + r2;
0x0801b71c eor ip, ip, r3, ror 16 |
0x0801b720 sub r3, r2, ip | r3 = r2 - ip;
0x0801b724 add r4, ip, r0 | r4 = ip + r0;
0x0801b728 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0801b72c sub r0, r0, r3 | r0 -= r3;
0x0801b730 add r5, r3, r4 | r5 = r3 + r4;
0x0801b734 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0801b738 bhi 0x801b6d0 |
| } while (r1 > 0xc);
| label_0:
0x0801b73c sub r1, r1, 1 | r1--;
0x0801b740 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x801b74c */
0x0801b744 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0801b748 b 0x801b814 |
0x0801b814 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x800e83c */
| #include <stdint.h>
|
; (fcn) sym.jhash_1 () | void jhash_1 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0800e83c push {r4, r5, lr} |
0x0800e840 movw r4, 0xbeef |
0x0800e844 movt r4, 0xdead | r4 = 0xdeadbeef;
0x0800e848 add r4, r2, r4 | r4 = r2 + r4;
0x0800e84c mov lr, r0 | lr = r0;
0x0800e850 add r4, r4, r1 | r4 += r1;
0x0800e854 cmp r1, 0xc |
0x0800e858 mov r0, r4 | r0 = r4;
0x0800e85c mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0800e860 bls 0x800e8d0 | goto label_0;
| }
| do {
0x0800e864 ldr ip, [lr, 8] | ip = *((lr + 8));
0x0800e868 sub r1, r1, 0xc | r1 -= 0xc;
0x0800e86c ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0800e870 cmp r1, 0xc |
0x0800e874 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0800e878 add ip, ip, r0 |
0x0800e87c add r3, r3, r5 | r3 += r5;
0x0800e880 sub r2, r2, ip | r2 -= ip;
0x0800e884 add r0, r3, ip | r0 = r3 + ip;
0x0800e888 add r2, r2, r4 | r2 += r4;
0x0800e88c eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0800e890 sub r3, r3, r2 | r3 -= r2;
0x0800e894 add ip, r2, r0 |
0x0800e898 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0800e89c sub r0, r0, r3 | r0 -= r3;
0x0800e8a0 add r2, r3, ip | r2 = r3 + ip;
0x0800e8a4 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0800e8a8 sub ip, ip, r3 |
0x0800e8ac add r0, r3, r2 | r0 = r3 + r2;
0x0800e8b0 eor ip, ip, r3, ror 16 |
0x0800e8b4 sub r3, r2, ip | r3 = r2 - ip;
0x0800e8b8 add r4, ip, r0 | r4 = ip + r0;
0x0800e8bc eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0800e8c0 sub r0, r0, r3 | r0 -= r3;
0x0800e8c4 add r5, r3, r4 | r5 = r3 + r4;
0x0800e8c8 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0800e8cc bhi 0x800e864 |
| } while (r1 > 0xc);
| label_0:
0x0800e8d0 sub r1, r1, 1 | r1--;
0x0800e8d4 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x800e8e0 */
0x0800e8d8 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0800e8dc b 0x800e9a8 |
0x0800e9a8 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8017bd8 */
| #include <stdint.h>
|
; (fcn) sym.jhash_2 () | void jhash_2 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08017bd8 push {r4, r5, lr} |
0x08017bdc movw r4, 0xbeef |
0x08017be0 movt r4, 0xdead | r4 = 0xdeadbeef;
0x08017be4 add r4, r2, r4 | r4 = r2 + r4;
0x08017be8 mov lr, r0 | lr = r0;
0x08017bec add r4, r4, r1 | r4 += r1;
0x08017bf0 cmp r1, 0xc |
0x08017bf4 mov r0, r4 | r0 = r4;
0x08017bf8 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x08017bfc bls 0x8017c6c | goto label_0;
| }
| do {
0x08017c00 ldr ip, [lr, 8] | ip = *((lr + 8));
0x08017c04 sub r1, r1, 0xc | r1 -= 0xc;
0x08017c08 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x08017c0c cmp r1, 0xc |
0x08017c10 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x08017c14 add ip, ip, r0 |
0x08017c18 add r3, r3, r5 | r3 += r5;
0x08017c1c sub r2, r2, ip | r2 -= ip;
0x08017c20 add r0, r3, ip | r0 = r3 + ip;
0x08017c24 add r2, r2, r4 | r2 += r4;
0x08017c28 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x08017c2c sub r3, r3, r2 | r3 -= r2;
0x08017c30 add ip, r2, r0 |
0x08017c34 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x08017c38 sub r0, r0, r3 | r0 -= r3;
0x08017c3c add r2, r3, ip | r2 = r3 + ip;
0x08017c40 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x08017c44 sub ip, ip, r3 |
0x08017c48 add r0, r3, r2 | r0 = r3 + r2;
0x08017c4c eor ip, ip, r3, ror 16 |
0x08017c50 sub r3, r2, ip | r3 = r2 - ip;
0x08017c54 add r4, ip, r0 | r4 = ip + r0;
0x08017c58 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x08017c5c sub r0, r0, r3 | r0 -= r3;
0x08017c60 add r5, r3, r4 | r5 = r3 + r4;
0x08017c64 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x08017c68 bhi 0x8017c00 |
| } while (r1 > 0xc);
| label_0:
0x08017c6c sub r1, r1, 1 | r1--;
0x08017c70 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x8017c7c */
0x08017c74 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08017c78 b 0x8017d44 |
0x08017d44 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x801b6a8 */
| #include <stdint.h>
|
; (fcn) sym.jhash_3 () | void jhash_3 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0801b6a8 push {r4, r5, lr} |
0x0801b6ac movw r4, 0xbeef |
0x0801b6b0 movt r4, 0xdead | r4 = 0xdeadbeef;
0x0801b6b4 add r4, r2, r4 | r4 = r2 + r4;
0x0801b6b8 mov lr, r0 | lr = r0;
0x0801b6bc add r4, r4, r1 | r4 += r1;
0x0801b6c0 cmp r1, 0xc |
0x0801b6c4 mov r0, r4 | r0 = r4;
0x0801b6c8 mov r5, r4 | r5 = r4;
| if (r1 < 0xc) {
0x0801b6cc bls 0x801b73c | goto label_0;
| }
| do {
0x0801b6d0 ldr ip, [lr, 8] | ip = *((lr + 8));
0x0801b6d4 sub r1, r1, 0xc | r1 -= 0xc;
0x0801b6d8 ldr r3, [lr, 4] | r3 = *((lr + 4));
0x0801b6dc cmp r1, 0xc |
0x0801b6e0 ldr r2, [lr], 0xc | r2 = *(lr);
| lr += 0xc;
0x0801b6e4 add ip, ip, r0 |
0x0801b6e8 add r3, r3, r5 | r3 += r5;
0x0801b6ec sub r2, r2, ip | r2 -= ip;
0x0801b6f0 add r0, r3, ip | r0 = r3 + ip;
0x0801b6f4 add r2, r2, r4 | r2 += r4;
0x0801b6f8 eor r2, r2, ip, ror 28 | r2 ^= (ip >>> 28);
0x0801b6fc sub r3, r3, r2 | r3 -= r2;
0x0801b700 add ip, r2, r0 |
0x0801b704 eor r3, r3, r2, ror 26 | r3 ^= (r2 >>> 26);
0x0801b708 sub r0, r0, r3 | r0 -= r3;
0x0801b70c add r2, r3, ip | r2 = r3 + ip;
0x0801b710 eor r3, r0, r3, ror 24 | r3 = r0 ^ (r3 >>> 24);
0x0801b714 sub ip, ip, r3 |
0x0801b718 add r0, r3, r2 | r0 = r3 + r2;
0x0801b71c eor ip, ip, r3, ror 16 |
0x0801b720 sub r3, r2, ip | r3 = r2 - ip;
0x0801b724 add r4, ip, r0 | r4 = ip + r0;
0x0801b728 eor r3, r3, ip, ror 13 | r3 ^= (ip >>> 13);
0x0801b72c sub r0, r0, r3 | r0 -= r3;
0x0801b730 add r5, r3, r4 | r5 = r3 + r4;
0x0801b734 eor r0, r0, r3, ror 28 | r0 ^= (r3 >>> 28);
0x0801b738 bhi 0x801b6d0 |
| } while (r1 > 0xc);
| label_0:
0x0801b73c sub r1, r1, 1 | r1--;
0x0801b740 cmp r1, 0xb |
| if (r1 > 0xb) {
| /* switch table (12 cases) at 0x801b74c */
0x0801b744 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x0801b748 b 0x801b814 |
0x0801b814 pop {r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/net/bridge/bridge.ko @ 0x8006210 */
| #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;
0x08006210 push {r4, r5, r6, r7, r8, lr} |
0x08006214 mov r4, r0 | r4 = r0;
0x08006218 add r6, r0, 0x540 | r6 = r0 + 0x540;
0x0800621c sub sp, sp, 0x58 |
0x08006220 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x08006224 mov r3, sp | r3 = sp;
0x08006228 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x0800622c bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08006230 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x08006234 adds r0, r1, 0x10 | r0 = r1 + 0x10;
0x08006238 sbcslo r0, r0, r3 | __asm ("sbcslo r0, r0, r3");
| if (r0 >= r1) {
0x0800623c movlo r3, 0 | r3 = 0;
| }
0x08006240 cmp r3, 0 |
| if (r3 == 0) {
0x08006244 bne 0x80063ec |
0x08006248 mrc p15, 0, r5, c3, c0, 0 | __asm ("mrc p15, 0, r5, c3, c0, 0");
0x0800624c bic r3, r5, 0xc | r3 = BIT_MASK (r5, 0xc);
0x08006250 orr r3, r3, 4 | r3 |= 4;
0x08006254 mcr p15, 0, r3, c3, c0, 0 | __asm ("mcr p15, 0, r3, c3, c0, 0");
0x08006258 isb sy | __asm ("isb sy");
0x0800625c mov r2, 0x10 | r2 = 0x10;
0x08006260 mov r0, sp | r0 = sp;
0x08006264 stmdaeq r3, {r0, r2, r3, r4, r5, r7, sb, ip, sp} | __asm ("stmdaeq r3, {r0, r2, r3, r4, r5, r7, sb, ip, sp}");
0x08006268 mcr p15, 0, r5, c3, c0, 0 | __asm ("mcr p15, 0, r5, c3, c0, 0");
0x0800626c isb sy | __asm ("isb sy");
0x08006270 cmp r0, 0 |
| if (r0 != 0) {
0x08006274 bne 0x80063ec | goto label_0;
| }
0x08006278 ldr r2, [sp] | r2 = *(sp);
0x0800627c sub r3, r2, 4 | r3 = r2 - 4;
0x08006280 cmp r3, 0xe |
| if (r3 > 0xe) {
| /* switch table (15 cases) at 0x800628c */
0x08006284 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08006288 b 0x8006844 | goto label_1;
| }
| label_0:
0x080063ec mvn r5, 0xd | r5 = ~0xd;
| do {
0x080063f0 mov r0, r5 | r0 = r5;
0x080063f4 add sp, sp, 0x58 |
0x080063f8 pop {r4, r5, r6, r7, r8, pc} |
| label_1:
0x08006844 mvn r5, 0x5e | r5 = ~0x5e;
0x08006848 b 0x80063f0 |
| } while (1);
| }
[*] Function popen used 1 times bridge.ko