[*] Binary protection state of nf_conntrack.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function sprintf tear down of nf_conntrack.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/netfilter/nf_conntrack.ko @ 0x800279c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.__nf_conntrack_confirm () | void nf_conntrack_confirm (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x0800279c push {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080027a0 ldr r3, [r0, 0x50] | r3 = *((r0 + 0x50));
0x080027a4 bic r4, r3, 7 | r4 = BIT_MASK (r3, 7);
0x080027a8 and r3, r3, 7 | r3 &= 7;
0x080027ac cmp r3, 2 |
0x080027b0 ldr r7, [r4, 0x74] | r7 = *((r4 + 0x74));
| if (r3 > 2) {
0x080027b4 bhi 0x8002ba4 | goto label_5;
| }
0x080027b8 mov r3, sp | r3 = sp;
0x080027bc mov r8, r0 | r8 = r0;
0x080027c0 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080027c4 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080027c8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080027cc add r2, r2, 0x200 | r2 += 0x200;
0x080027d0 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080027d4 stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc}");
0x080027d8 stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc}");
0x080027dc add sb, r4, 0x44 | sb = r4 + 0x44;
| do {
| label_4:
0x080027e0 ldr fp, [sl, 0x10] | fp = *((sl + 0x10));
0x080027e4 tst fp, 1 |
| if ((fp & 1) != 0) {
0x080027e8 bne 0x8002bb0 | goto label_12;
| }
0x080027ec ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x080027f0 mov r1, r7 | r1 = r7;
0x080027f4 ldr r5, [sl, 0x18] | r5 = *((sl + 0x18));
0x080027f8 mov r0, sb | r0 = sb;
0x080027fc umull r3, r5, r3, r5 | r3:r5 = r3 * r5;
0x08002800 bl 0x80006f0 | hash_conntrack_raw ();
0x08002804 ldr r6, [sl, 0x18] | r6 = *((sl + 0x18));
0x08002808 mov r3, r0 | r3 = r0;
0x0800280c mov r2, fp | r2 = fp;
0x08002810 mov r0, r5 | r0 = r5;
0x08002814 umull r3, r6, r3, r6 | r3:r6 = r3 * r6;
0x08002818 mov r1, r6 | r1 = r6;
0x0800281c bl 0x8000674 | r0 = nf_conntrack_double_lock_constprop_0 ();
0x08002820 cmp r0, 0 |
0x08002824 bne 0x80027e0 |
| } while (r0 != 0);
0x08002828 ldr sb, [r4, 0x6c] | sb = *((r4 + 0x6c));
0x0800282c ubfx sb, sb, 3, 1 | sb = (sb >> 3) & ((1 << 1) - 1);
0x08002830 cmp sb, 0 |
| if (sb != 0) {
0x08002834 bne 0x8002c08 | goto label_13;
| }
0x08002838 mov r0, r4 | r0 = r4;
0x0800283c bl 0x8000210 | nf_ct_del_from_dying_or_unconfirmed_list ();
0x08002840 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x08002844 tst r3, 0x200 |
| if ((r3 & 0x200) != 0) {
0x08002848 bne 0x8002c3c | goto label_14;
| }
0x0800284c ldr lr, [sl] |
0x08002850 ldr r3, [lr, r5, lsl 2] | offset_0 = r5 << 2;
| r3 = *((lr + offset_0));
0x08002854 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08002858 bne 0x80029a4 | goto label_15;
| }
0x0800285c ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x08002860 mvn ip, 0xb |
0x08002864 mov r0, 1 | r0 = 1;
0x08002868 b 0x8002878 |
| while (r1 != r2) {
| label_0:
0x0800286c ldr r3, [r3] | r3 = *(r3);
0x08002870 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08002874 bne 0x80029a4 | goto label_15;
| }
0x08002878 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0800287c cmp r1, r2 |
0x08002880 bne 0x800286c |
| }
0x08002884 ldr sb, [r4, 0x18] | sb = *((r4 + 0x18));
0x08002888 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0800288c cmp sb, r2 |
| if (sb != r2) {
0x08002890 bne 0x800286c | goto label_0;
| }
0x08002894 ldr sb, [r4, 0x1c] | sb = *((r4 + 0x1c));
0x08002898 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0800289c cmp sb, r2 |
| if (sb != r2) {
0x080028a0 bne 0x800286c | goto label_0;
| }
0x080028a4 ldr sb, [r4, 0x20] | sb = *((r4 + 0x20));
0x080028a8 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x080028ac cmp sb, r2 |
| if (sb != r2) {
0x080028b0 bne 0x800286c | goto label_0;
| }
0x080028b4 ldr sb, [r4, 0x24] | sb = *((r4 + 0x24));
0x080028b8 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x080028bc cmp sb, r2 |
| if (sb != r2) {
0x080028c0 bne 0x800286c | goto label_0;
| }
0x080028c4 ldr sb, [r4, 0x28] | sb = *((r4 + 0x28));
0x080028c8 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x080028cc cmp sb, r2 |
| if (sb != r2) {
0x080028d0 bne 0x800286c | goto label_0;
| }
0x080028d4 ldr sb, [r4, 0x2c] | sb = *((r4 + 0x2c));
0x080028d8 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x080028dc cmp sb, r2 |
| if (sb != r2) {
0x080028e0 bne 0x800286c | goto label_0;
| }
0x080028e4 ldr sb, [r4, 0x30] | sb = *((r4 + 0x30));
0x080028e8 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x080028ec cmp sb, r2 |
| if (sb != r2) {
0x080028f0 bne 0x800286c | goto label_0;
| }
0x080028f4 ldr sb, [r4, 0x34] | sb = *((r4 + 0x34));
0x080028f8 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x080028fc cmp sb, r2 |
| if (sb != r2) {
0x08002900 bne 0x800286c | goto label_0;
| }
0x08002904 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x08002908 ldr sb, [r3, 0x2c] | sb = *((r3 + 0x2c));
0x0800290c eor r2, r2, sb | r2 ^= sb;
0x08002910 bics r2, r2, 0xff000000 | __asm ("bics r2, r2, 0xff000000");
| if (sb != r2) {
0x08002914 bne 0x800286c | goto label_0;
| }
0x08002918 ldrb r2, [r3, 0x2f] | r2 = *((r3 + 0x2f));
0x0800291c ldrb sb, [r3, 0x2f] | sb = *((r3 + 0x2f));
0x08002920 ldrb fp, [r4, 0xb] | fp = *((r4 + 0xb));
0x08002924 add r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x08002928 lsl sb, r0, sb | sb = r0 << sb;
0x0800292c sub r2, ip, r2, lsl 4 | r2 = ip - (r2 << 4);
0x08002930 and fp, fp, sb |
0x08002934 add r2, r3, r2 | r2 = r3 + r2;
0x08002938 ldrb sl, [r2, 0xb] | sl = *((r2 + 0xb));
0x0800293c ands sl, sl, sb | sl &= sb;
| if (sl == sl) {
0x08002940 beq 0x8002bfc | goto label_16;
| }
0x08002944 ldrh sl, [r2, 8] | sl = *((r2 + 8));
0x08002948 cmp fp, 0 |
| if (fp != 0) {
0x0800294c beq 0x8002954 |
| label_9:
0x08002950 ldrh fp, [r4, 8] | fp = *((r4 + 8));
| }
0x08002954 cmp fp, sl |
| if (fp != sl) {
0x08002958 bne 0x800286c | goto label_0;
| }
| label_8:
0x0800295c ldr sb, [r2, 0x6c] | sb = *((r2 + 0x6c));
0x08002960 tst sb, 8 |
| if ((sb & 8) == 0) {
0x08002964 beq 0x800286c | goto label_0;
| }
0x08002968 ldr r2, [r2, 0x74] | r2 = *((r2 + 0x74));
0x0800296c cmp r7, r2 |
| if (r7 != r2) {
0x08002970 bne 0x800286c | goto label_0;
| }
| label_2:
0x08002974 mov r2, r6 | r2 = r6;
0x08002978 mov r1, r3 | r1 = r3;
0x0800297c mov r0, r8 | r0 = r8;
0x08002980 stmdaeq r0, {r3, r5, r6, r8, sb, sl, fp, ip, sp, pc} | __asm ("stmdaeq r0, {r3, r5, r6, r8, sb, sl, fp, ip, sp, pc}");
0x08002984 mov sb, r0 | sb = r0;
| label_11:
0x08002988 mov r1, r6 | r1 = r6;
0x0800298c mov r0, r5 | r0 = r5;
0x08002990 bl 0x800049c | nf_conntrack_double_unlock ();
0x08002994 ldr r0, [pc, 0x2ec] | r0 = *(0x8002c84);
0x08002998 mov r1, 0x200 | r1 = 0x200;
0x0800299c stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x080029a0 b 0x8002ba8 | goto label_10;
| label_15:
0x080029a4 ldr r3, [lr, r6, lsl 2] | offset_1 = r6 << 2;
| r3 = *((lr + offset_1));
0x080029a8 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080029ac bne 0x8002ad4 | goto label_17;
| }
0x080029b0 ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x080029b4 mvn lr, 0xb | lr = ~0xb;
0x080029b8 mov ip, 1 |
0x080029bc b 0x80029cc |
| while (r0 != r2) {
| label_1:
0x080029c0 ldr r3, [r3] | r3 = *(r3);
0x080029c4 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080029c8 bne 0x8002ad4 | goto label_17;
| }
| label_3:
0x080029cc ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x080029d0 cmp r0, r2 |
0x080029d4 bne 0x80029c0 |
| }
0x080029d8 ldr r1, [r4, 0x48] | r1 = *((r4 + 0x48));
0x080029dc ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x080029e0 cmp r1, r2 |
| if (r1 != r2) {
0x080029e4 bne 0x80029c0 | goto label_1;
| }
0x080029e8 ldr r1, [r4, 0x4c] | r1 = *((r4 + 0x4c));
0x080029ec ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x080029f0 cmp r1, r2 |
| if (r1 != r2) {
0x080029f4 bne 0x80029c0 | goto label_1;
| }
0x080029f8 ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x080029fc ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x08002a00 cmp r1, r2 |
| if (r1 != r2) {
0x08002a04 bne 0x80029c0 | goto label_1;
| }
0x08002a08 ldr r1, [r4, 0x54] | r1 = *((r4 + 0x54));
0x08002a0c ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x08002a10 cmp r1, r2 |
| if (r1 != r2) {
0x08002a14 bne 0x80029c0 | goto label_1;
| }
0x08002a18 ldr r1, [r4, 0x58] | r1 = *((r4 + 0x58));
0x08002a1c ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x08002a20 cmp r1, r2 |
| if (r1 != r2) {
0x08002a24 bne 0x80029c0 | goto label_1;
| }
0x08002a28 ldr r1, [r4, 0x5c] | r1 = *((r4 + 0x5c));
0x08002a2c ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x08002a30 cmp r1, r2 |
| if (r1 != r2) {
0x08002a34 bne 0x80029c0 | goto label_1;
| }
0x08002a38 ldr r1, [r4, 0x60] | r1 = *((r4 + 0x60));
0x08002a3c ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x08002a40 cmp r1, r2 |
| if (r1 != r2) {
0x08002a44 bne 0x80029c0 | goto label_1;
| }
0x08002a48 ldr r1, [r4, 0x64] | r1 = *((r4 + 0x64));
0x08002a4c ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x08002a50 cmp r1, r2 |
| if (r1 != r2) {
0x08002a54 bne 0x80029c0 | goto label_1;
| }
0x08002a58 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x08002a5c ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x08002a60 eor r2, r2, r1 | r2 ^= r1;
0x08002a64 bics r2, r2, 0xff000000 | __asm ("bics r2, r2, 0xff000000");
| if (r1 != r2) {
0x08002a68 bne 0x80029c0 | goto label_1;
| }
0x08002a6c ldrb r2, [r3, 0x2f] | r2 = *((r3 + 0x2f));
0x08002a70 ldrb r1, [r3, 0x2f] | r1 = *((r3 + 0x2f));
0x08002a74 ldrb sb, [r4, 0xb] | sb = *((r4 + 0xb));
0x08002a78 add r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x08002a7c lsl r1, ip, r1 | r1 = ip << r1;
0x08002a80 sub r2, lr, r2, lsl 4 | r2 = lr - (r2 << 4);
0x08002a84 and sb, sb, r1 | sb &= r1;
0x08002a88 add r2, r3, r2 | r2 = r3 + r2;
0x08002a8c ldrb sl, [r2, 0xb] | sl = *((r2 + 0xb));
0x08002a90 ands sl, sl, r1 | sl &= r1;
| if (sl == sl) {
0x08002a94 beq 0x8002bf0 | goto label_18;
| }
0x08002a98 ldrh sl, [r2, 8] | sl = *((r2 + 8));
0x08002a9c cmp sb, 0 |
| if (sb != 0) {
0x08002aa0 beq 0x8002aa8 |
| label_7:
0x08002aa4 ldrh sb, [r4, 8] | sb = *((r4 + 8));
| }
0x08002aa8 cmp sb, sl |
| if (sb != sl) {
0x08002aac bne 0x80029c0 | goto label_1;
| }
| label_6:
0x08002ab0 ldr r1, [r2, 0x6c] | r1 = *((r2 + 0x6c));
0x08002ab4 tst r1, 8 |
| if ((r1 & 8) == 0) {
0x08002ab8 beq 0x80029c0 | goto label_1;
| }
0x08002abc ldr r2, [r2, 0x74] | r2 = *((r2 + 0x74));
0x08002ac0 cmp r7, r2 |
| if (r7 == r2) {
0x08002ac4 beq 0x8002974 | goto label_2;
| }
0x08002ac8 ldr r3, [r3] | r3 = *(r3);
0x08002acc tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08002ad0 beq 0x80029cc | goto label_3;
| }
| label_17:
0x08002ad4 stmdaeq r1, {r2, r4, r5, r6, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r6, r7, sl, fp, lr, pc}");
0x08002ad8 stmdaeq r1, {r2, r4, r5, r6, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r4, r5, r6, r7, sl, fp, lr, pc}");
0x08002adc ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x08002ae0 mov r0, r4 | r0 = r4;
0x08002ae4 ldr r2, [r2] | r2 = *(r2);
0x08002ae8 add r3, r3, r2 | r3 += r2;
0x08002aec str r3, [r4, 4] | *((r4 + 4)) = r3;
0x08002af0 bl 0x8000f2c | nf_conntrack_insert_prepare ();
0x08002af4 mov r2, r6 | r2 = r6;
0x08002af8 mov r1, r5 | r1 = r5;
0x08002afc mov r0, r4 | r0 = r4;
0x08002b00 bl 0x8000070 | nf_conntrack_hash_insert ();
0x08002b04 mov r1, r6 | r1 = r6;
0x08002b08 mov r0, r5 | r0 = r5;
0x08002b0c bl 0x800049c | nf_conntrack_double_unlock ();
0x08002b10 ldr r0, [pc, 0x174] | r0 = .text;
0x08002b14 mov r1, 0x200 | r1 = 0x200;
0x08002b18 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08002b1c ldr r3, [r4, 0x8c] | r3 = *((r4 + 0x8c));
0x08002b20 cmp r3, 0 |
| if (r3 == 0) {
0x08002b24 beq 0x8002c58 | goto label_19;
| }
0x08002b28 ldrb r2, [r3] | r2 = *(r3);
0x08002b2c ldr r1, [r4, 0x74] | r1 = *((r4 + 0x74));
0x08002b30 cmp r2, 0 |
| if (r2 == 0) {
0x08002b34 beq 0x8002bb4 | goto label_20;
| }
0x08002b38 cmn r3, r2 |
| if (r3 == r2) {
0x08002b3c beq 0x8002bb4 | goto label_20;
| }
0x08002b40 ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x08002b44 cmp r2, 0 |
| if (r2 == 0) {
0x08002b48 beq 0x8002bb4 | goto label_20;
| }
0x08002b4c ldr r2, [r1, 0x660] | r2 = *((r1 + 0x660));
0x08002b50 cmp r2, 0 |
| if (r2 == 0) {
0x08002b54 beq 0x8002bb4 | goto label_20;
| }
0x08002b58 ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x08002b5c cmp r2, 0 |
| if (r2 == 0) {
0x08002b60 beq 0x8002bb4 | goto label_20;
| }
0x08002b64 cmn r3, r2 |
| if (r3 == r2) {
0x08002b68 beq 0x8002bb4 | goto label_20;
| }
0x08002b6c mrs r0, apsr | r0 = apsr;
0x08002b70 cpsid i | __asm ("cpsid i");
0x08002b74 ldr r1, [r3, r2] | r1 = *((r3 + r2));
0x08002b78 orr r1, r1, 0x40 | r1 |= 0x40;
0x08002b7c str r1, [r3, r2] | *((r3 + r2)) = r1;
0x08002b80 msr cpsr_c, r0 | cpsr_c = r0;
0x08002b84 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x08002b88 ldr r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x08002b8c ldr r3, [r3, 0x660] | r3 = *((r3 + 0x660));
0x08002b90 cmp r3, 0 |
| if (r3 == 0) {
0x08002b94 beq 0x8002ba4 | goto label_5;
| }
0x08002b98 ldr r3, [r4, 0x8c] | r3 = *((r4 + 0x8c));
0x08002b9c cmp r3, 0 |
| if (r3 != 0) {
0x08002ba0 bne 0x8002bc4 | goto label_21;
| }
| do {
| label_5:
0x08002ba4 mov sb, 1 | sb = 1;
| label_10:
0x08002ba8 mov r0, sb | r0 = sb;
0x08002bac pop {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x08002bb0 b 0x80027e0 | goto label_4;
| label_20:
0x08002bb4 ldr r2, [r1, 0x660] | r2 = *((r1 + 0x660));
0x08002bb8 ldr r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x08002bbc cmp r2, 0 |
0x08002bc0 beq 0x8002ba4 |
| } while (r2 == 0);
| label_21:
0x08002bc4 subs r0, r0, 0 |
0x08002bc8 ldrb r1, [r3, 4] | r1 = *((r3 + 4));
| if (r0 == r0) {
0x08002bcc movne r0, 1 | r0 = 1;
| }
0x08002bd0 cmp r1, 0 |
| if (r1 == 0) {
0x08002bd4 beq 0x8002ba4 | goto label_5;
| }
0x08002bd8 adds r1, r3, r1 | r1 = r3 + r1;
| if (r1 == r3) {
0x08002bdc beq 0x8002ba4 | goto label_5;
| }
0x08002be0 mov sb, 1 | sb = 1;
0x08002be4 stmdaeq r1, {r6, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r6, r8, sl, fp, lr, pc}");
0x08002be8 mov r0, sb | r0 = sb;
0x08002bec pop {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x08002bf0 cmp sb, 0 |
| if (sb == 0) {
0x08002bf4 beq 0x8002ab0 | goto label_6;
| }
0x08002bf8 b 0x8002aa4 | goto label_7;
| label_16:
0x08002bfc cmp fp, 0 |
| if (fp == 0) {
0x08002c00 beq 0x800295c | goto label_8;
| }
0x08002c04 b 0x8002950 | goto label_9;
| label_13:
0x08002c08 stmdaeq r0, {r4, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r7, sb, sl, fp, sp, lr, pc}");
0x08002c0c stmdaeq r0, {r4, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r7, sb, sl, fp, sp, lr, pc}");
0x08002c10 ldrb r3, [r2] | r3 = *(r2);
0x08002c14 cmp r3, 0 |
0x08002c18 beq 0x8002c68 |
| while (1) {
0x08002c1c mov r1, r6 | r1 = r6;
0x08002c20 mov r0, r5 | r0 = r5;
0x08002c24 bl 0x800049c | nf_conntrack_double_unlock ();
0x08002c28 ldr r0, [pc, 0x60] | r0 = .text;
0x08002c2c mov r1, 0x200 | r1 = 0x200;
0x08002c30 mov sb, 0 | sb = 0;
0x08002c34 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08002c38 b 0x8002ba8 | goto label_10;
| label_14:
0x08002c3c mov r0, r4 | r0 = r4;
0x08002c40 bl 0x80000dc | nf_ct_add_to_dying_list ();
0x08002c44 ldr r2, [r7, 0x65c] | r2 = *((r7 + 0x65c));
0x08002c48 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x08002c4c add r3, r3, 1 | r3++;
0x08002c50 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x08002c54 b 0x8002988 | goto label_11;
| label_19:
0x08002c58 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x08002c5c mov sb, 1 | sb = 1;
0x08002c60 ldr r3, [r3, 0x660] | r3 = *((r3 + 0x660));
0x08002c64 b 0x8002ba8 | goto label_10;
0x08002c68 mov r1, 1 | r1 = 1;
0x08002c6c stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc}");
0x08002c70 stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc}");
0x08002c74 strb r1, [r2] | *(r2) = r1;
0x08002c78 mov r2, 9 | r2 = 9;
0x08002c7c mov r1, 0x460 | r1 = 0x460;
0x08002c80 stmdaeq r1, {r3, r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r4, r5, r7, sl, fp, lr, pc}");
0x08002c84 b 0x8002c1c |
| }
| }
; 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/netfilter/nf_conntrack.ko @ 0x8001074 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.destroy_conntrack () | void destroy_conntrack (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08001074 push {r4, lr} |
0x08001078 mov r4, r0 | r4 = r0;
0x0800107c ldr r3, [r0] | r3 = *(r0);
0x08001080 cmp r3, 0 |
| if (r3 != 0) {
0x08001084 bne 0x8001108 | goto label_1;
| }
0x08001088 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0800108c tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x08001090 bne 0x800112c | goto label_2;
| }
| label_0:
0x08001094 mov r3, sp | r3 = sp;
0x08001098 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800109c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080010a0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080010a4 add r2, r2, 0x200 | r2 += 0x200;
0x080010a8 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080010ac mov r0, r4 | r0 = r4;
0x080010b0 stmdaeq r0, {r2, r5, r7, fp, ip, lr} | __asm ("stmdaeq r0, {r2, r5, r7, fp, ip, lr}");
0x080010b4 mov r0, r4 | r0 = r4;
0x080010b8 bl 0x8000210 | nf_ct_del_from_dying_or_unconfirmed_list ();
0x080010bc ldr r0, [pc, 0x7c] | r0 = *(0x800113c);
0x080010c0 mov r1, 0x200 | r1 = 0x200;
0x080010c4 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x080010c8 ldr r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x080010cc cmp r0, 0 |
| if (r0 == 0) {
0x080010d0 beq 0x80010f4 | goto label_3;
| }
0x080010d4 pld [r0] | __asm ("pld [r0]");
| do {
0x080010d8 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x080010dc sub r3, r3, 1 | r3--;
0x080010e0 strex r2, r3, [r0] | __asm ("strex r2, r3, [r0]");
0x080010e4 teq r2, 0 | __asm ("teq r2, 0");
0x080010e8 bne 0x80010d8 |
| } while (r0 != 0);
0x080010ec cmp r3, 0 |
0x080010f0 beq 0x8001100 |
| while (1) {
| label_3:
0x080010f4 mov r0, r4 | r0 = r4;
0x080010f8 pop {r4, lr} |
0x080010fc stmdaeq r0, {r2, r3, r8, sb} | __asm ("stmdaeq r0, {r2, r3, r8, sb}");
0x08001100 stmdaeq r1, {r2, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r8, sl, fp, lr, pc}");
0x08001104 b 0x80010f4 |
| }
| label_1:
0x08001108 mov r3, 0 | r3 = 0;
0x0800110c stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc}");
0x08001110 stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r6, sb, sl, ip, lr, pc}");
0x08001114 mov r2, 9 | r2 = 9;
0x08001118 movw r1, 0x25a | r1 = 0x25a;
0x0800111c stmdaeq r1, {r3, r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r4, r5, r7, sl, fp, lr, pc}");
0x08001120 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x08001124 tst r3, 0x800 |
| if ((r3 & 0x800) == 0) {
0x08001128 beq 0x8001094 | goto label_0;
| }
| label_2:
0x0800112c mov r0, r4 | r0 = r4;
0x08001130 stmdaeq r0, {r3, r5, r6, r7, fp, sp, pc} | __asm ("stmdaeq r0, {r3, r5, r6, r7, fp, sp, pc}");
0x08001134 mov r0, r4 | r0 = r4;
0x08001138 pop {r4, lr} |
0x0800113c stmdaeq r1, {r2, r3, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r7, sl, fp, lr, pc}");
0x08001140 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/netfilter/nf_conntrack.ko @ 0x800ba70 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ecache_work_evict_list () | void ecache_work_evict_list (int32_t arg1) {
| int32_t var_0h;
| int32_t var_100h;
| r0 = arg1;
0x0800ba70 push {r4, r5, r6, r7, r8, lr} |
0x0800ba74 sub sp, sp, 0x100 |
0x0800ba78 mov r3, sp | r3 = sp;
0x0800ba7c bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800ba80 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800ba84 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800ba88 add r2, r2, 1 | r2++;
0x0800ba8c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800ba90 ldr r5, [r0, 4] | r5 = *((r0 + 4));
0x0800ba94 ands r6, r5, 1 | r6 = r5 & 1;
| if (r6 == r5) {
0x0800ba98 movne r6, 0 | r6 = 0;
| }
| if (r6 == r5) {
0x0800ba9c movne r5, 2 | r5 = 2;
| }
| if (r6 != r5) {
0x0800baa0 bne 0x800bb50 | goto label_3;
| }
0x0800baa4 mvn r7, 0xb | r7 = ~0xb;
0x0800baa8 b 0x800bab8 |
| while ((r3 & 8) == 0) {
| label_0:
0x0800baac ldr r5, [r5] | r5 = *(r5);
0x0800bab0 tst r5, 1 |
| if ((r5 & 1) != 0) {
0x0800bab4 bne 0x800bbf0 | goto label_5;
| }
0x0800bab8 ldrb r4, [r5, 0x2f] | r4 = *((r5 + 0x2f));
0x0800babc add r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0800bac0 sub r4, r7, r4, lsl 4 | r4 = r7 - (r4 << 4);
0x0800bac4 add r4, r5, r4 | r4 = r5 + r4;
0x0800bac8 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0800bacc tst r3, 8 |
0x0800bad0 beq 0x800baac |
| }
0x0800bad4 ldr r3, [r4, 0x8c] | r3 = *((r4 + 0x8c));
0x0800bad8 cmp r3, 0 |
| if (r3 == 0) {
0x0800badc beq 0x800baac | goto label_0;
| }
0x0800bae0 ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x0800bae4 cmp r2, 0 |
| if (r2 == 0) {
0x0800bae8 beq 0x800baac | goto label_0;
| }
0x0800baec adds r8, r3, r2 | r8 = r3 + r2;
| if (r8 == r3) {
0x0800baf0 beq 0x800baac | goto label_0;
| }
0x0800baf4 ldrb r3, [r8, 0xa] | r3 = *((r8 + 0xa));
0x0800baf8 cmp r3, 1 |
| if (r3 != 1) {
0x0800bafc bne 0x800baac | goto label_0;
| }
0x0800bb00 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0800bb04 ldr r3, [r3, 0x660] | r3 = *((r3 + 0x660));
0x0800bb08 cmp r3, 0 |
| if (r3 != 0) {
0x0800bb0c beq 0x800bb2c |
0x0800bb10 mov r3, 0 | r3 = 0;
0x0800bb14 mov r1, r4 | r1 = r4;
0x0800bb18 mov r2, r3 | r2 = r3;
0x0800bb1c mov r0, 4 | r0 = 4;
0x0800bb20 stmdaeq r0, {r4, r8, fp, ip, sp, pc} | __asm ("stmdaeq r0, {r4, r8, fp, ip, sp, pc}");
0x0800bb24 cmp r0, 0 |
| if (r0 != 0) {
0x0800bb28 bne 0x800bc0c | goto label_6;
| }
| }
0x0800bb2c add r3, sp, 0x100 | r3 += var_100h;
0x0800bb30 mov r2, 2 | r2 = 2;
0x0800bb34 add r3, r3, r6, lsl 2 | r3 += (r6 << 2);
0x0800bb38 add r6, r6, 1 | r6++;
0x0800bb3c cmp r6, 0x3f |
0x0800bb40 strb r2, [r8, 0xa] | *((r8 + 0xa)) = r2;
0x0800bb44 str r4, [r3, -0x100] | var_0h = r4;
| if (r6 < 0x3f) {
0x0800bb48 bls 0x800baac | goto label_0;
| }
0x0800bb4c mov r5, 1 | r5 = 1;
| label_3:
0x0800bb50 mov r3, sp | r3 = sp;
0x0800bb54 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800bb58 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800bb5c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800bb60 sub r2, r2, 1 | r2--;
0x0800bb64 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800bb68 cmp r2, 0 |
| if (r2 == 0) {
0x0800bb6c beq 0x800bbf8 | goto label_7;
| }
| label_4:
0x0800bb70 cmp r6, 0 |
| if (r6 == 0) {
0x0800bb74 beq 0x800bbcc | goto label_8;
| }
0x0800bb78 stmdaeq r0, {r4, r8, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r8, sl, sp, lr, pc}");
0x0800bb7c stmdaeq r0, {r4, r8, sl, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r8, sl, sp, lr, pc}");
0x0800bb80 add r4, sp, r6, lsl 2 | r4 = sp + (r6 << 2);
0x0800bb84 b 0x800bb90 | goto label_2;
| label_1:
0x0800bb88 cmp r6, 0 |
| if (r6 == 0) {
0x0800bb8c beq 0x800bbcc | goto label_8;
| }
| label_2:
0x0800bb90 ldr r0, [r4, -4]! | r0 = *((r4 -= 4));
0x0800bb94 sub r6, r6, 1 | r6--;
0x0800bb98 cmp r0, 0 |
| if (r0 == 0) {
0x0800bb9c beq 0x800bbd8 | goto label_9;
| }
0x0800bba0 pld [r0] | __asm ("pld [r0]");
| do {
0x0800bba4 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0800bba8 sub r3, r3, 1 | r3--;
0x0800bbac strex r2, r3, [r0] | __asm ("strex r2, r3, [r0]");
0x0800bbb0 teq r2, 0 | __asm ("teq r2, 0");
0x0800bbb4 bne 0x800bba4 |
| } while (r0 != 0);
0x0800bbb8 cmp r3, 0 |
| if (r3 != 0) {
0x0800bbbc bne 0x800bb88 | goto label_1;
| }
0x0800bbc0 stmdaeq r1, {r2, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r8, sl, fp, lr, pc}");
0x0800bbc4 cmp r6, 0 |
| if (r6 != 0) {
0x0800bbc8 bne 0x800bb90 | goto label_2;
| }
| label_8:
0x0800bbcc mov r0, r5 | r0 = r5;
0x0800bbd0 add sp, sp, 0x100 |
0x0800bbd4 pop {r4, r5, r6, r7, r8, pc} |
| label_9:
0x0800bbd8 mov r3, r0 | r3 = r0;
0x0800bbdc mov r2, 9 | r2 = 9;
0x0800bbe0 mov r0, r7 | r0 = r7;
0x0800bbe4 mov r1, 0xa1 | r1 = 0xa1;
0x0800bbe8 stmdaeq r1, {r3, r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r4, r5, r7, sl, fp, lr, pc}");
0x0800bbec b 0x800bb88 | goto label_1;
| label_5:
0x0800bbf0 mov r5, 2 | r5 = 2;
0x0800bbf4 b 0x800bb50 | goto label_3;
| label_7:
0x0800bbf8 ldr r3, [r3] | r3 = *(r3);
0x0800bbfc tst r3, 2 |
| if ((r3 & 2) == 0) {
0x0800bc00 beq 0x800bb70 | goto label_4;
| }
0x0800bc04 stmdaeq r1, {r2, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r5, r7, sl, fp, lr, pc}");
0x0800bc08 b 0x800bb70 | goto label_4;
| label_6:
0x0800bc0c mov r5, 0 | r5 = 0;
0x0800bc10 b 0x800bb50 | goto label_3;
| }
; 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/netfilter/nf_conntrack.ko @ 0x800bc14 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ecache_work () | void ecache_work (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x0800bc14 push {r4, lr} |
0x0800bc18 mov r4, r0 | r4 = r0;
0x0800bc1c mov r3, sp | r3 = sp;
0x0800bc20 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800bc24 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800bc28 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800bc2c add r2, r2, 0x200 | r2 += 0x200;
0x0800bc30 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800bc34 ldr r0, [r0, 0x4c] | r0 = *((r0 + 0x4c));
0x0800bc38 bl 0x800ba70 | r0 = ecache_work_evict_list ();
0x0800bc3c mov r3, r0 | r3 = r0;
0x0800bc40 cmp r3, 0 |
0x0800bc44 ldr r0, [pc, 0x60] | r0 = *(0x800bca8);
| if (r3 == 0) {
0x0800bc48 beq 0x800bc98 | goto label_0;
| }
0x0800bc4c cmp r3, 1 |
| if (r3 != 1) {
0x0800bc50 beq 0x800bc68 |
0x0800bc54 mov r1, 0x200 | r1 = 0x200;
0x0800bc58 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x0800bc5c mov r3, 0 | r3 = 0;
0x0800bc60 strb r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0800bc64 pop {r4, pc} |
| }
0x0800bc68 mov r1, 0x200 | r1 = 0x200;
0x0800bc6c stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x0800bc70 mov r1, 0 | r1 = 0;
0x0800bc74 mov r3, r1 | r3 = r1;
| do {
0x0800bc78 stmdaeq r1, {r3, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r8, sl, fp, lr, pc}");
0x0800bc7c stmdaeq r1, {r3, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r8, sl, fp, lr, pc}");
0x0800bc80 strb r1, [r4, 0x2c] | *((r4 + 0x2c)) = r1;
0x0800bc84 mov r2, r4 | r2 = r4;
0x0800bc88 ldr r1, [r0] | r1 = *(r0);
0x0800bc8c mov r0, 1 | r0 = 1;
0x0800bc90 pop {r4, lr} |
0x0800bc94 stmdaeq r1, {r2, r3, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r8, sl, fp, lr, pc}");
| label_0:
0x0800bc98 mov r1, 0x200 | r1 = 0x200;
0x0800bc9c stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x0800bca0 mov r1, 1 | r1 = 1;
0x0800bca4 mov r3, 0xa | r3 = 0xa;
0x0800bca8 b 0x800bc78 |
| } while (1);
| }
; 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/netfilter/nf_conntrack.ko @ 0x8002150 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_conntrack_hash_check_insert () | void nf_conntrack_hash_check_insert (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08002150 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08002154 mov r5, r0 | r5 = r0;
0x08002158 mov r3, sp | r3 = sp;
0x0800215c ldr r6, [r0, 0x74] | r6 = *((r0 + 0x74));
0x08002160 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08002164 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08002168 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800216c add r2, r2, 0x200 | r2 += 0x200;
0x08002170 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08002174 stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc}");
0x08002178 stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, r8, sl, fp, sp, lr, pc}");
0x0800217c add r8, r0, 0x14 | r8 = r0 + 0x14;
0x08002180 add r7, r0, 0x44 | r7 = r0 + 0x44;
| do {
| label_1:
0x08002184 ldr sl, [sb, 0x10] | sl = *((sb + 0x10));
0x08002188 tst sl, 1 |
| if ((sl & 1) != 0) {
0x0800218c bne 0x8002320 | goto label_9;
| }
0x08002190 mov r1, r6 | r1 = r6;
0x08002194 mov r0, r8 | r0 = r8;
0x08002198 bl 0x80006f0 | hash_conntrack_raw ();
0x0800219c ldr r4, [sb, 0x18] | r4 = *((sb + 0x18));
0x080021a0 mov r3, r0 | r3 = r0;
0x080021a4 mov r1, r6 | r1 = r6;
0x080021a8 mov r0, r7 | r0 = r7;
0x080021ac umull r3, r4, r3, r4 | r3:r4 = r3 * r4;
0x080021b0 bl 0x80006f0 | hash_conntrack_raw ();
0x080021b4 ldr r1, [sb, 0x18] | r1 = *((sb + 0x18));
0x080021b8 mov r3, r0 | r3 = r0;
0x080021bc mov r2, sl | r2 = sl;
0x080021c0 mov r0, r4 | r0 = r4;
0x080021c4 umull r3, sl, r3, r1 | r3:sl = r3 * r1;
0x080021c8 mov r1, sl | r1 = sl;
0x080021cc bl 0x8000674 | r0 = nf_conntrack_double_lock_constprop_0 ();
0x080021d0 cmp r0, 0 |
0x080021d4 bne 0x8002184 |
| } while (r0 != 0);
0x080021d8 ldr r7, [sb] | r7 = *(sb);
0x080021dc ldr r3, [r7, r4, lsl 2] | offset_0 = r4 << 2;
| r3 = *((r7 + offset_0));
0x080021e0 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080021e4 bne 0x8002324 | goto label_10;
| }
0x080021e8 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x080021ec mvn lr, 0xb | lr = ~0xb;
0x080021f0 mov ip, 1 |
0x080021f4 b 0x8002204 |
| while (r0 != r2) {
| label_0:
0x080021f8 ldr r3, [r3] | r3 = *(r3);
0x080021fc tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08002200 bne 0x8002324 | goto label_10;
| }
0x08002204 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x08002208 cmp r0, r2 |
0x0800220c bne 0x80021f8 |
| }
0x08002210 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x08002214 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x08002218 cmp r1, r2 |
| if (r1 != r2) {
0x0800221c bne 0x80021f8 | goto label_0;
| }
0x08002220 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x08002224 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x08002228 cmp r1, r2 |
| if (r1 != r2) {
0x0800222c bne 0x80021f8 | goto label_0;
| }
0x08002230 ldr r1, [r5, 0x20] | r1 = *((r5 + 0x20));
0x08002234 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x08002238 cmp r1, r2 |
| if (r1 != r2) {
0x0800223c bne 0x80021f8 | goto label_0;
| }
0x08002240 ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x08002244 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x08002248 cmp r1, r2 |
| if (r1 != r2) {
0x0800224c bne 0x80021f8 | goto label_0;
| }
0x08002250 ldr r1, [r5, 0x28] | r1 = *((r5 + 0x28));
0x08002254 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x08002258 cmp r1, r2 |
| if (r1 != r2) {
0x0800225c bne 0x80021f8 | goto label_0;
| }
0x08002260 ldr r1, [r5, 0x2c] | r1 = *((r5 + 0x2c));
0x08002264 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x08002268 cmp r1, r2 |
| if (r1 != r2) {
0x0800226c bne 0x80021f8 | goto label_0;
| }
0x08002270 ldr r1, [r5, 0x30] | r1 = *((r5 + 0x30));
0x08002274 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x08002278 cmp r1, r2 |
| if (r1 != r2) {
0x0800227c bne 0x80021f8 | goto label_0;
| }
0x08002280 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x08002284 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x08002288 cmp r1, r2 |
| if (r1 != r2) {
0x0800228c bne 0x80021f8 | goto label_0;
| }
0x08002290 ldr r2, [r5, 0x38] | r2 = *((r5 + 0x38));
0x08002294 ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x08002298 eor r2, r2, r1 | r2 ^= r1;
0x0800229c bics r2, r2, 0xff000000 | __asm ("bics r2, r2, 0xff000000");
| if (r1 != r2) {
0x080022a0 bne 0x80021f8 | goto label_0;
| }
0x080022a4 ldrb r2, [r3, 0x2f] | r2 = *((r3 + 0x2f));
0x080022a8 ldrb r8, [r5, 0xb] | r8 = *((r5 + 0xb));
0x080022ac mov r1, r2 | r1 = r2;
0x080022b0 add r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x080022b4 lsl r1, ip, r1 | r1 = ip << r1;
0x080022b8 sub r2, lr, r2, lsl 4 | r2 = lr - (r2 << 4);
0x080022bc and r8, r8, r1 | r8 &= r1;
0x080022c0 add r2, r3, r2 | r2 = r3 + r2;
0x080022c4 ldrb sb, [r2, 0xb] | sb = *((r2 + 0xb));
0x080022c8 ands sb, sb, r1 | sb &= r1;
| if (sb == sb) {
0x080022cc beq 0x800249c | goto label_11;
| }
0x080022d0 ldrh sb, [r2, 8] | sb = *((r2 + 8));
0x080022d4 cmp r8, 0 |
| if (r8 != 0) {
0x080022d8 beq 0x80022e0 |
| label_5:
0x080022dc ldrh r8, [r5, 8] | r8 = *((r5 + 8));
| }
0x080022e0 cmp r8, sb |
| if (r8 != sb) {
0x080022e4 bne 0x80021f8 | goto label_0;
| }
| label_6:
0x080022e8 ldr r1, [r2, 0x6c] | r1 = *((r2 + 0x6c));
0x080022ec tst r1, 8 |
| if ((r1 & 8) == 0) {
0x080022f0 beq 0x80021f8 | goto label_0;
| }
0x080022f4 ldr r2, [r2, 0x74] | r2 = *((r2 + 0x74));
0x080022f8 cmp r6, r2 |
| if (r6 != r2) {
0x080022fc bne 0x80021f8 | goto label_0;
| }
| label_3:
0x08002300 mov r1, sl | r1 = sl;
0x08002304 mov r0, r4 | r0 = r4;
0x08002308 bl 0x800049c | nf_conntrack_double_unlock ();
0x0800230c ldr r0, [pc, 0x1a0] | r0 = *(0x80024b0);
0x08002310 mov r1, 0x200 | r1 = 0x200;
0x08002314 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08002318 mvn r0, 0x10 | r0 = ~0x10;
0x0800231c pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_9:
0x08002320 b 0x8002184 | goto label_1;
| label_10:
0x08002324 ldr r3, [r7, sl, lsl 2] | offset_1 = sl << 2;
| r3 = *((r7 + offset_1));
0x08002328 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0800232c bne 0x8002454 | goto label_12;
| }
0x08002330 ldr ip, [r5, 0x44] | ip = *((r5 + 0x44));
0x08002334 mvn r7, 0xb | r7 = ~0xb;
0x08002338 mov lr, 1 | lr = 1;
0x0800233c b 0x800234c |
| while (ip != r2) {
| label_2:
0x08002340 ldr r3, [r3] | r3 = *(r3);
0x08002344 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08002348 bne 0x8002454 | goto label_12;
| }
| label_4:
0x0800234c ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x08002350 cmp ip, r2 |
0x08002354 bne 0x8002340 |
| }
0x08002358 ldr r1, [r5, 0x48] | r1 = *((r5 + 0x48));
0x0800235c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x08002360 cmp r1, r2 |
| if (r1 != r2) {
0x08002364 bne 0x8002340 | goto label_2;
| }
0x08002368 ldr r1, [r5, 0x4c] | r1 = *((r5 + 0x4c));
0x0800236c ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x08002370 cmp r1, r2 |
| if (r1 != r2) {
0x08002374 bne 0x8002340 | goto label_2;
| }
0x08002378 ldr r1, [r5, 0x50] | r1 = *((r5 + 0x50));
0x0800237c ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x08002380 cmp r1, r2 |
| if (r1 != r2) {
0x08002384 bne 0x8002340 | goto label_2;
| }
0x08002388 ldr r1, [r5, 0x54] | r1 = *((r5 + 0x54));
0x0800238c ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x08002390 cmp r1, r2 |
| if (r1 != r2) {
0x08002394 bne 0x8002340 | goto label_2;
| }
0x08002398 ldr r1, [r5, 0x58] | r1 = *((r5 + 0x58));
0x0800239c ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x080023a0 cmp r1, r2 |
| if (r1 != r2) {
0x080023a4 bne 0x8002340 | goto label_2;
| }
0x080023a8 ldr r1, [r5, 0x5c] | r1 = *((r5 + 0x5c));
0x080023ac ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x080023b0 cmp r1, r2 |
| if (r1 != r2) {
0x080023b4 bne 0x8002340 | goto label_2;
| }
0x080023b8 ldr r1, [r5, 0x60] | r1 = *((r5 + 0x60));
0x080023bc ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x080023c0 cmp r1, r2 |
| if (r1 != r2) {
0x080023c4 bne 0x8002340 | goto label_2;
| }
0x080023c8 ldr r1, [r5, 0x64] | r1 = *((r5 + 0x64));
0x080023cc ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x080023d0 cmp r1, r2 |
| if (r1 != r2) {
0x080023d4 bne 0x8002340 | goto label_2;
| }
0x080023d8 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x080023dc ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x080023e0 eor r2, r2, r1 | r2 ^= r1;
0x080023e4 bics r2, r2, 0xff000000 | __asm ("bics r2, r2, 0xff000000");
| if (r1 != r2) {
0x080023e8 bne 0x8002340 | goto label_2;
| }
0x080023ec ldrb r2, [r3, 0x2f] | r2 = *((r3 + 0x2f));
0x080023f0 ldrb r0, [r5, 0xb] | r0 = *((r5 + 0xb));
0x080023f4 mov r1, r2 | r1 = r2;
0x080023f8 add r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x080023fc lsl r1, lr, r1 | r1 = lr << r1;
0x08002400 sub r2, r7, r2, lsl 4 | r2 = r7 - (r2 << 4);
0x08002404 and r0, r0, r1 | r0 &= r1;
0x08002408 add r2, r3, r2 | r2 = r3 + r2;
0x0800240c ldrb r8, [r2, 0xb] | r8 = *((r2 + 0xb));
0x08002410 ands r8, r8, r1 | r8 &= r1;
| if (r8 == r8) {
0x08002414 beq 0x80024a8 | goto label_13;
| }
0x08002418 ldrh r8, [r2, 8] | r8 = *((r2 + 8));
0x0800241c cmp r0, 0 |
| if (r0 != 0) {
0x08002420 beq 0x8002428 |
| label_7:
0x08002424 ldrh r0, [r5, 8] | r0 = *((r5 + 8));
| }
0x08002428 cmp r0, r8 |
| if (r0 != r8) {
0x0800242c bne 0x8002340 | goto label_2;
| }
| label_8:
0x08002430 ldr r1, [r2, 0x6c] | r1 = *((r2 + 0x6c));
0x08002434 tst r1, 8 |
| if ((r1 & 8) == 0) {
0x08002438 beq 0x8002340 | goto label_2;
| }
0x0800243c ldr r2, [r2, 0x74] | r2 = *((r2 + 0x74));
0x08002440 cmp r6, r2 |
| if (r6 == r2) {
0x08002444 beq 0x8002300 | goto label_3;
| }
0x08002448 ldr r3, [r3] | r3 = *(r3);
0x0800244c tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08002450 beq 0x800234c | goto label_4;
| }
| label_12:
0x08002454 mov r3, 2 | r3 = 2;
0x08002458 mov r2, sl | r2 = sl;
0x0800245c str r3, [r5] | *(r5) = r3;
0x08002460 mov r0, r5 | r0 = r5;
0x08002464 mov r1, r4 | r1 = r4;
0x08002468 bl 0x8000070 | nf_conntrack_hash_insert ();
0x0800246c mov r1, sl | r1 = sl;
0x08002470 mov r0, r4 | r0 = r4;
0x08002474 bl 0x800049c | nf_conntrack_double_unlock ();
0x08002478 ldr r2, [r6, 0x65c] | r2 = *((r6 + 0x65c));
0x0800247c ldr r0, [pc, 0x34] | r0 = .text;
0x08002480 mov r1, 0x200 | r1 = 0x200;
0x08002484 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x08002488 add r3, r3, 1 | r3++;
0x0800248c str r3, [r2, 8] | *((r2 + 8)) = r3;
0x08002490 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08002494 mov r0, 0 | r0 = 0;
0x08002498 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_11:
0x0800249c cmp r8, 0 |
| if (r8 != 0) {
0x080024a0 bne 0x80022dc | goto label_5;
| }
0x080024a4 b 0x80022e8 | goto label_6;
| label_13:
0x080024a8 cmp r0, 0 |
| if (r0 != 0) {
0x080024ac bne 0x8002424 | goto label_7;
| }
0x080024b0 b 0x8002430 | goto label_8;
| }
; 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/netfilter/nf_conntrack.ko @ 0x80088e0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) sym.nf_conntrack_tcp_packet () | void nf_conntrack_tcp_packet (int32_t arg_b0h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_46h;
| int32_t var_4ch;
| int32_t var_60h;
| int32_t var_8ch;
| r0 = arg1;
| r1 = arg2;
0x080088e0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080088e4 mov r7, r2 | r7 = r2;
0x080088e8 mov r6, r1 | r6 = r1;
0x080088ec sub sp, sp, 0x8c |
0x080088f0 ldr r5, [r1, 0xa8] | r5 = *((r1 + 0xa8));
0x080088f4 mov r4, r0 | r4 = r0;
0x080088f8 str r3, [sp, 8] | var_8h = r3;
0x080088fc ldrd r2, r3, [r1, 0x54] | __asm ("ldrd r2, r3, [r1, 0x54]");
0x08008900 ldr r8, [sp, 0xb0] | r8 = *(arg_b0h);
0x08008904 sub r3, r2, r3 | r3 = r2 - r3;
0x08008908 sub r3, r3, r7 | r3 -= r7;
0x0800890c cmp r3, 0x13 |
0x08008910 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x08008914 str r3, [sp, 0x24] | var_24h = r3;
| if (r3 > 0x13) {
0x08008918 bgt 0x8008a80 | goto label_28;
| }
0x0800891c cmp r1, 0 |
| if (r1 == 0) {
0x08008920 beq 0x8008a88 | goto label_1;
| }
0x08008924 mov r1, r7 | r1 = r7;
0x08008928 add r2, sp, 0x4c | r2 += var_4ch;
0x0800892c mov r0, r6 | r0 = r6;
0x08008930 mov r3, 0x14 | r3 = 0x14;
0x08008934 stmdaeq r1, {r2, r3, r5, r6, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r6, r7, sl, fp, lr, pc}");
0x08008938 cmp r0, 0 |
| if (r0 < 0) {
0x0800893c blt 0x8008a88 | goto label_1;
| }
0x08008940 ldr r2, [r6, 0x54] | r2 = *((r6 + 0x54));
0x08008944 add r5, sp, 0x4c | r5 += var_4ch;
| do {
0x08008948 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0800894c sub r2, r2, r7 | r2 -= r7;
0x08008950 ldr r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x08008954 lsr r3, r3, 4 | r3 >>= 4;
0x08008958 lsl r3, r3, 2 | r3 <<= 2;
0x0800895c cmp r3, 0x13 |
| if (r3 <= 0x13) {
0x08008960 movgt r0, 0 | r0 = 0;
| }
| if (r3 > 0x13) {
0x08008964 movle r0, 1 | r0 = 1;
| }
0x08008968 cmp r2, r3 |
| if (r2 >= r3) {
0x0800896c orrlo r0, r0, 1 | r0 |= 1;
| }
0x08008970 cmp r0, 0 |
| if (r0 != 0) {
0x08008974 bne 0x8009c30 | goto label_29;
| }
0x08008978 ldr r3, [r1, 0x654] | r3 = *((r1 + 0x654));
0x0800897c cmp r3, 0 |
| if (r3 != 0) {
0x08008980 beq 0x8008990 |
0x08008984 ldr r1, [r8] | r1 = *(r8);
0x08008988 cmp r1, 0 |
| if (r1 == 0) {
0x0800898c beq 0x80093c8 | goto label_30;
| }
| }
| label_13:
0x08008990 ldrb r3, [r5, 0xd] | r3 = *((r5 + 0xd));
0x08008994 stmdaeq r0, {r2, r3, r4, r5, r7, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, r8, fp, lr, pc}");
0x08008998 stmdaeq r0, {r2, r3, r4, r5, r7, r8, fp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, r8, fp, lr, pc}");
0x0800899c and r3, r3, 0x37 | r3 &= 0x37;
0x080089a0 add r3, sb, r3 | r3 = sb + r3;
0x080089a4 ldrb r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x080089a8 cmp r3, 0 |
| if (r3 == 0) {
0x080089ac beq 0x8009b8c | goto label_31;
| }
0x080089b0 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x080089b4 tst r3, 8 |
| if ((r3 & 8) == 0) {
0x080089b8 beq 0x8008a94 | goto label_32;
| }
| label_0:
0x080089bc mov r3, sp | r3 = sp;
0x080089c0 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080089c4 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080089c8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080089cc add r3, r3, 0x200 | r3 += 0x200;
0x080089d0 add r3, r3, 1 | r3++;
0x080089d4 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x080089d8 ldr r3, [sp, 8] | r3 = var_8h;
0x080089dc ldrb r2, [r5, 0xd] | r2 = *((r5 + 0xd));
0x080089e0 cmp r3, 2 |
0x080089e4 ldrb sl, [r4, 0xb8] | sl = *((r4 + 0xb8));
0x080089e8 str sl, [sp, 0x18] | var_18h = sl;
| if (r3 > 2) {
0x080089ec movls fp, 0 |
| }
| if (r3 <= 2) {
0x080089f0 movhi fp, 1 |
| }
0x080089f4 tst r2, 4 |
| if ((r2 & 4) != 0) {
0x080089f8 bne 0x8008ab4 | goto label_33;
| }
0x080089fc tst r2, 2 |
0x08008a00 ubfxne r3, r2, 4, 1 | __asm ("ubfxne r3, r2, 4, 1");
| if ((r2 & 2) == 0) {
0x08008a04 strne r3, [sp, 0xc] | var_ch = r3;
| }
| if ((r2 & 2) == 0) {
0x08008a08 bne 0x8008a24 |
0x08008a0c tst r2, 1 |
| if ((r2 & 1) != 0) {
0x08008a10 bne 0x8009674 | goto label_34;
| }
0x08008a14 tst r2, 0x10 |
| if ((r2 & 0x10) != 0) {
0x08008a18 moveq r3, 5 | r3 = 5;
| }
| if ((r2 & 0x10) == 0) {
0x08008a1c movne r3, 3 | r3 = 3;
| }
0x08008a20 str r3, [sp, 0xc] | var_ch = r3;
| }
| label_2:
0x08008a24 ldr r0, [sp, 0xc] | r0 = var_ch;
0x08008a28 mov r3, 0x3c | r3 = 0x3c;
0x08008a2c mov r1, 0xa | r1 = 0xa;
0x08008a30 mul r3, r3, fp | r3 *= fp;
0x08008a34 mla r3, r1, r0, r3 | __asm ("mla r3, r1, r0, r3");
0x08008a38 add r3, sb, r3 | r3 = sb + r3;
0x08008a3c add r3, r3, sl | r3 += sl;
0x08008a40 ldrb r8, [r3, 0x58] | r8 = *((r3 + 0x58));
0x08008a44 sub r3, r8, 1 | r3 = r8 - 1;
0x08008a48 cmp r3, r1 |
| if (r3 > r1) {
0x08008a4c ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08008a50 b 0x8008ac0 | goto label_35;
0x08008a54 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a58 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a5c stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a60 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a64 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a68 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a6c stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a70 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a74 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a78 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x08008a7c stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| label_28:
0x08008a80 adds r5, r5, r7 | r5 += r7;
0x08008a84 bne 0x8008948 |
| } while (r5 != r5);
| label_1:
0x08008a88 mvn r0, 0 | r0 = ~0;
0x08008a8c add sp, sp, 0x8c |
0x08008a90 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_32:
0x08008a94 mov r3, r5 | r3 = r5;
0x08008a98 mov r2, r7 | r2 = r7;
0x08008a9c mov r1, r6 | r1 = r6;
0x08008aa0 mov r0, r4 | r0 = r4;
0x08008aa4 bl 0x8008760 | r0 = tcp_new ();
0x08008aa8 cmp r0, 0 |
| if (r0 != 0) {
0x08008aac bne 0x80089bc | goto label_0;
| }
0x08008ab0 b 0x8008a88 | goto label_1;
| label_33:
0x08008ab4 mov r3, 4 | r3 = 4;
0x08008ab8 str r3, [sp, 0xc] | var_ch = r3;
0x08008abc b 0x8008a24 | goto label_2;
| label_35:
0x08008ac0 ldr r3, [sp, 8] | r3 = var_8h;
0x08008ac4 cmp r3, 2 |
| if (r3 > 2) {
0x08008ac8 movls r3, 1 | r3 = 1;
| }
| if (r3 <= 2) {
0x08008acc movhi r3, 0 | r3 = 0;
| }
0x08008ad0 mov r1, r3 | r1 = r3;
0x08008ad4 str r3, [sp, 0x10] | var_10h = r3;
0x08008ad8 mov r3, 0x14 | r3 = 0x14;
0x08008adc mla r3, r3, r1, r4 | __asm ("mla r3, r3, r1, r4");
0x08008ae0 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x08008ae4 rev r1, r1 | r1 = SWAP32 (r1);
0x08008ae8 str r1, [sp, 0x14] | var_14h = r1;
0x08008aec ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x08008af0 ldrb r3, [r3, 0xa1] | r3 = *((r3 + 0xa1));
0x08008af4 rev r1, r1 | r1 = SWAP32 (r1);
0x08008af8 str r1, [sp, 0x1c] | var_1ch = r1;
| if (r3 <= 2) {
0x08008afc movhi r1, 0x14 | r1 = 0x14;
| }
| if (r3 > 2) {
0x08008b00 movls r1, 0 | r1 = 0;
| }
0x08008b04 str r1, [sp, 0x20] | var_20h = r1;
0x08008b08 ldrb sb, [r5, 0xc] | sb = *((r5 + 0xc));
0x08008b0c tst r3, 2 |
0x08008b10 ldr r1, [r6, 0x54] | r1 = *((r6 + 0x54));
0x08008b14 ldrh r3, [r5, 0xe] | r3 = *((r5 + 0xe));
0x08008b18 lsr sb, sb, 4 | sb >>= 4;
0x08008b1c ldr r0, [sp, 0x14] | r0 = var_14h;
0x08008b20 rev16 ip, r3 | __asm ("rev16 ip, r3");
0x08008b24 sub r3, r1, r7 | r3 = r1 - r7;
0x08008b28 lsl sb, sb, 2 | sb <<= 2;
0x08008b2c strh ip, [sp, 0x46] | var_46h = ip;
0x08008b30 sub r3, r3, sb | r3 -= sb;
0x08008b34 add r3, r3, r0 | r3 += r0;
0x08008b38 and r0, r2, 1 | r0 = r2 & 1;
0x08008b3c add r3, r3, r0 | r3 += r0;
0x08008b40 ubfx r2, r2, 1, 1 | r2 = (r2 >> 1) & ((1 << 1) - 1);
0x08008b44 add r3, r3, r2 | r3 += r2;
0x08008b48 ldr r2, [sp, 0x20] | r2 = var_20h;
0x08008b4c str r3, [sp, 0x28] | var_28h = r3;
0x08008b50 add r3, r4, 0x90 | r3 = r4 + 0x90;
0x08008b54 add r3, r3, r2 | r3 += r2;
0x08008b58 ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x08008b5c str r3, [sp, 0x3c] | var_3ch = r3;
0x08008b60 uxth r3, ip | r3 = (int16_t) ip;
0x08008b64 str r2, [sp, 0x34] | var_34h = r2;
0x08008b68 str r3, [sp, 0x30] | var_30h = r3;
0x08008b6c str r3, [sp, 0x40] | var_40h = r3;
| if ((r3 & 2) != 0) {
0x08008b70 bne 0x80092b4 | goto label_36;
| }
| label_9:
0x08008b74 ldr sb, [sp, 0x1c] | sb = var_1ch;
| label_11:
0x08008b78 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x08008b7c mov sl, 0x14 | sl = 0x14;
0x08008b80 ldr r1, [sp, 0x10] | r1 = var_10h;
0x08008b84 mov r0, r4 | r0 = r4;
0x08008b88 sub r2, r3, 1 | r2 = r3 - 1;
0x08008b8c stmdaeq r0, {r2, r3, r7, r8, fp, sp, pc} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, sp, pc}");
0x08008b90 sub r3, sb, r0 | r3 = sb - r0;
0x08008b94 mla sb, sl, fp, r4 | __asm ("mla sb, sl, fp, r4");
0x08008b98 str r3, [sp, 0x2c] | var_2ch = r3;
0x08008b9c str r0, [sp, 0x38] | var_38h = r0;
0x08008ba0 ldr r3, [sb, 0x98] | r3 = *((sb + 0x98));
0x08008ba4 cmp r3, 0 |
| if (r3 != 0) {
0x08008ba8 bne 0x80091cc | goto label_37;
| }
0x08008bac ldrb r3, [r5, 0xd] | r3 = *((r5 + 0xd));
0x08008bb0 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x08008bb4 bne 0x80095ec | goto label_38;
| }
0x08008bb8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08008bbc ldr r1, [sp, 0x28] | r1 = var_28h;
0x08008bc0 ldr r0, [sp, 0x30] | r0 = var_30h;
0x08008bc4 mla sl, sl, r3, r4 | __asm ("mla sl, sl, r3, r4");
0x08008bc8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x08008bcc add r2, r4, r3 | r2 = r4 + r3;
0x08008bd0 str r1, [r2, 0x90] | *((r2 + 0x90)) = r1;
0x08008bd4 ldrb r3, [sb, 0xa0] | r3 = *((sb + 0xa0));
0x08008bd8 lsl r3, r0, r3 | r3 = r0 << r3;
0x08008bdc cmp r3, 1 |
| if (r3 >= 1) {
0x08008be0 movlo r3, 1 | r3 = 1;
| }
0x08008be4 str r3, [sb, 0x98] | *((sb + 0x98)) = r3;
0x08008be8 add r3, r1, r3 | r3 = r1 + r3;
0x08008bec str r3, [r2, 0x94] | *((r2 + 0x94)) = r3;
0x08008bf0 ldr r1, [sl, 0x98] | r1 = *((sl + 0x98));
0x08008bf4 cmp r1, 0 |
| if (r1 != 0) {
0x08008bf8 bne 0x80095d0 | goto label_39;
| }
0x08008bfc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x08008c00 str r3, [sl, 0x94] | *((sl + 0x94)) = r3;
0x08008c04 str r3, [sl, 0x90] | *((sl + 0x90)) = r3;
0x08008c08 ldr r3, [r2, 0x94] | r3 = *((r2 + 0x94));
| label_17:
0x08008c0c ldrb r1, [r5, 0xd] | r1 = *((r5 + 0xd));
0x08008c10 tst r1, 0x10 |
| if ((r1 & 0x10) != 0) {
0x08008c14 bne 0x80091fc | goto label_18;
| }
| label_6:
0x08008c18 ldr r0, [sp, 0x10] | r0 = var_10h;
0x08008c1c mov r2, 0x14 | r2 = 0x14;
0x08008c20 mla r2, r2, r0, r4 | __asm ("mla r2, r2, r0, r4");
0x08008c24 ldr r2, [r2, 0x90] | r2 = *((r2 + 0x90));
0x08008c28 str r2, [sp, 0x2c] | var_2ch = r2;
0x08008c2c mov sl, r2 | sl = r2;
| label_7:
0x08008c30 ldr r2, [sp, 0x14] | r2 = var_14h;
0x08008c34 clz r2, r2 | r2 &= r2;
0x08008c38 lsr r2, r2, 5 | r2 >>= 5;
0x08008c3c ands r2, r2, r1, lsr 2 | r2 &= (r1 >> 2);
| if (r2 != r2) {
0x08008c40 bne 0x80093a0 | goto label_40;
| }
| label_12:
0x08008c44 ldr ip, [sp, 0x10] | ip = var_10h;
0x08008c48 mov r0, 0x14 | r0 = 0x14;
0x08008c4c ldr r2, [sp, 0x14] | r2 = var_14h;
0x08008c50 sub r2, r2, r3 | r2 -= r3;
0x08008c54 mla ip, r0, ip, r4 | __asm ("mla ip, r0, ip, r4");
0x08008c58 sub r2, r2, 1 | r2--;
0x08008c5c ldr ip, [ip, 0x98] | ip = *((ip + 0x98));
0x08008c60 cmp ip, 0 |
| if (ip == 0) {
0x08008c64 beq 0x80091bc | goto label_41;
| }
0x08008c68 mla r0, r0, fp, r4 | __asm ("mla r0, r0, fp, r4");
0x08008c6c ldr r0, [r0, 0x90] | r0 = *((r0 + 0x90));
0x08008c70 sub r0, r0, 1 | r0--;
0x08008c74 sub r0, r0, ip | r0 -= ip;
0x08008c78 ldr ip, [sp, 0x28] | ip = var_28h;
0x08008c7c sub r0, r0, ip | r0 -= ip;
0x08008c80 cmp r0, 0 |
| if (r0 < 0) {
0x08008c84 movge ip, 0 |
| }
| if (r0 < 0) {
0x08008c88 blt 0x80091bc | goto label_41;
| }
| label_5:
0x08008c8c mov r3, 0x14 | r3 = 0x14;
0x08008c90 mla r1, r3, fp, r4 | __asm ("mla r1, r3, fp, r4");
0x08008c94 ldrb r0, [r1, 0xa1] | r0 = *((r1 + 0xa1));
0x08008c98 tst r0, 8 |
| if ((r0 & 8) == 0) {
0x08008c9c bne 0x8008cb0 |
0x08008ca0 ldr r0, [sp, 0x34] | r0 = var_34h;
0x08008ca4 ldr r0, [r0, 0x6a8] | r0 = *((r0 + 0x6a8));
0x08008ca8 cmp r0, 0 |
| if (r0 == 0) {
0x08008cac beq 0x8009ba4 | goto label_42;
| }
| }
| label_19:
0x08008cb0 ldr r2, [sp, 0x18] | r2 = var_18h;
0x08008cb4 sub r3, r8, 4 | r3 = r8 - 4;
0x08008cb8 clz r3, r3 | r3 &= r3;
0x08008cbc ldrb r1, [r4, 0xba] | r1 = *((r4 + 0xba));
0x08008cc0 cmp r8, r2 |
0x08008cc4 lsr r3, r3, 5 | r3 >>= 5;
| if (r8 != r2) {
0x08008cc8 moveq r3, 0 | r3 = 0;
| }
| label_15:
0x08008ccc cmp r3, 0 |
0x08008cd0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x08008cd4 strb r3, [r4, 0xbb] | *((r4 + 0xbb)) = r3;
| if (r3 == 0) {
0x08008cd8 movne r3, 0x14 | r3 = 0x14;
| }
0x08008cdc strb fp, [r4, 0xb9] | *((r4 + 0xb9)) = fp;
0x08008ce0 strb r8, [r4, 0xb8] | *((r4 + 0xb8)) = r8;
0x08008ce4 mlane r3, r3, fp, r4 | __asm ("mlane r3, r3, fp, r4");
| if (r3 == 0) {
0x08008ce8 ldrbne r2, [r3, 0xa1] | r2 = *((r3 + 0xa1));
| }
| if (r3 == 0) {
0x08008cec orrne r2, r2, 4 | r2 |= 4;
| }
| if (r3 == 0) {
0x08008cf0 strbne r2, [r3, 0xa1] | *((r3 + 0xa1)) = r2;
| }
0x08008cf4 ldr r3, [r4, 0x8c] | r3 = *((r4 + 0x8c));
0x08008cf8 cmp r3, 0 |
| if (r3 == 0) {
0x08008cfc beq 0x8008d0c | goto label_3;
| }
0x08008d00 ldrb r2, [r3, 6] | r2 = *((r3 + 6));
0x08008d04 cmp r2, 0 |
0x08008d08 bne 0x800919c |
| while (r3 == r2) {
| label_3:
0x08008d0c ldr r3, [sp, 0x24] | r3 = var_24h;
0x08008d10 add r7, r3, 0x660 | r7 = r3 + 0x660;
0x08008d14 add r7, r7, 0xc | r7 += 0xc;
| label_4:
0x08008d18 ldr r3, [sp, 0x24] | r3 = var_24h;
0x08008d1c ldr r3, [r3, 0x6ac] | r3 = *((r3 + 0x6ac));
0x08008d20 cmp r3, r1 |
| if (r3 <= r1) {
0x08008d24 bgt 0x8008d38 |
0x08008d28 ldr sb, [r7, 0x30] | sb = *((r7 + 0x30));
0x08008d2c ldr r3, [r7, r8, lsl 2] | offset_1 = r8 << 2;
| r3 = *((r7 + offset_1));
0x08008d30 cmp r3, sb |
| if (r3 > sb) {
0x08008d34 bhi 0x8008d88 | goto label_43;
| }
| }
0x08008d38 ldr r3, [sp, 0xc] | r3 = var_ch;
0x08008d3c cmp r3, 4 |
| if (r3 != 4) {
0x08008d40 ldreq sb, [r7, 0x20] | sb = *((r7 + 0x20));
| }
| if (r3 != 4) {
0x08008d44 beq 0x8008d88 |
0x08008d48 ldrb r3, [r4, 0xa1] | r3 = *((r4 + 0xa1));
0x08008d4c ldrb r2, [r4, 0xb5] | r2 = *((r4 + 0xb5));
0x08008d50 ldr sb, [r7, r8, lsl 2] | offset_2 = r8 << 2;
| sb = *((r7 + offset_2));
0x08008d54 orr r3, r3, r2 | r3 |= r2;
0x08008d58 tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x08008d5c beq 0x8008d70 |
0x08008d60 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x08008d64 cmp r3, sb |
| if (r3 >= sb) {
0x08008d68 movlo sb, r3 | sb = r3;
| }
| if (r3 <= sb) {
0x08008d6c blo 0x8008d88 | goto label_43;
| }
| }
0x08008d70 ldrh r3, [r4, 0xc8] | r3 = *((r4 + 0xc8));
0x08008d74 cmp r3, 0 |
| if (r3 != 0) {
0x08008d78 bne 0x8008d88 | goto label_43;
| }
0x08008d7c ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x08008d80 cmp sb, r3 |
| if (sb >= r3) {
0x08008d84 movhs sb, r3 | sb = r3;
| goto label_43;
| }
| }
| label_43:
0x08008d88 ldr r0, [pc, 0xed8] | r0 = *(0x8009c64);
0x08008d8c movw r1, 0x201 | r1 = 0x201;
0x08008d90 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08008d94 ldr r3, [sp, 0x18] | r3 = var_18h;
0x08008d98 cmp r3, r8 |
| if (r3 != r8) {
0x08008d9c beq 0x8008de8 |
0x08008da0 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x08008da4 ldr r3, [r3, 0x660] | r3 = *((r3 + 0x660));
0x08008da8 cmp r3, 0 |
| if (r3 == 0) {
0x08008dac beq 0x8008de8 | goto label_44;
| }
0x08008db0 ldr r3, [r4, 0x8c] | r3 = *((r4 + 0x8c));
0x08008db4 cmp r3, 0 |
| if (r3 == 0) {
0x08008db8 beq 0x8008de8 | goto label_44;
| }
0x08008dbc ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x08008dc0 cmp r2, 0 |
| if (r2 == 0) {
0x08008dc4 beq 0x8008de8 | goto label_44;
| }
0x08008dc8 cmn r3, r2 |
| if (r3 == r2) {
0x08008dcc beq 0x8008de8 | goto label_44;
| }
0x08008dd0 mrs r0, apsr | r0 = apsr;
0x08008dd4 cpsid i | __asm ("cpsid i");
0x08008dd8 ldr r1, [r3, r2] | r1 = *((r3 + r2));
0x08008ddc orr r1, r1, 0x20 | r1 |= 0x20;
0x08008de0 str r1, [r3, r2] | *((r3 + r2)) = r1;
0x08008de4 msr cpsr_c, r0 | cpsr_c = r0;
| }
| label_44:
0x08008de8 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x08008dec tst r3, 2 |
| if ((r3 & 2) != 0) {
0x08008df0 bne 0x8009230 | goto label_45;
| }
0x08008df4 ldrb r3, [r5, 0xd] | r3 = *((r5 + 0xd));
0x08008df8 tst r3, 4 |
| if ((r3 & 4) != 0) {
0x08008dfc bne 0x8009680 | goto label_46;
| }
0x08008e00 cmp r8, 3 |
| if (r8 == 3) {
0x08008e04 bne 0x8008e14 |
0x08008e08 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x08008e0c cmp sb, r3 |
| if (sb >= r3) {
0x08008e10 movhs sb, r3 | sb = r3;
| goto label_8;
| }
| }
| label_8:
0x08008e14 mov r0, r4 | r0 = r4;
0x08008e18 mov r5, 1 | r5 = 1;
0x08008e1c ldr r1, [sp, 8] | r1 = var_8h;
0x08008e20 mov r3, sb | r3 = sb;
0x08008e24 mov r2, r6 | r2 = r6;
0x08008e28 str r5, [sp] | *(sp) = r5;
0x08008e2c stmdaeq r0, {r4, r6, r7, sb, sl, fp} | __asm ("stmdaeq r0, {r4, r6, r7, sb, sl, fp}");
0x08008e30 mov r0, r5 | r0 = r5;
| label_20:
0x08008e34 add sp, sp, 0x8c |
0x08008e38 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0800919c cmn r3, r2 |
0x080091a0 beq 0x8008d0c |
| }
0x080091a4 ldr r7, [r3, r2] | r7 = *((r3 + r2));
0x080091a8 cmp r7, 0 |
| if (r7 == 0) {
0x080091ac beq 0x8008d0c | goto label_3;
| }
0x080091b0 adds r7, r7, 8 | r7 += 8;
| if (r7 != r7) {
0x080091b4 bne 0x8008d18 | goto label_4;
| }
0x080091b8 b 0x8008d0c | goto label_3;
| label_41:
0x080091bc cmp r2, 0 |
| if (r2 < 0) {
0x080091c0 blt 0x8009414 | goto label_47;
| }
| label_14:
0x080091c4 mov ip, 1 |
0x080091c8 b 0x8008c8c | goto label_5;
| label_37:
0x080091cc ldrb r3, [r4, 0xb8] | r3 = *((r4 + 0xb8));
0x080091d0 cmp r3, 1 |
| if (r3 == 1) {
0x080091d4 beq 0x80095a0 | goto label_48;
| }
0x080091d8 cmp r3, 2 |
| if (r3 == 2) {
0x080091dc movne r2, 0 | r2 = 0;
| }
| if (r3 != 2) {
0x080091e0 andeq r2, fp, 1 | r2 = fp & 1;
| }
0x080091e4 cmp r2, 0 |
| if (r2 != 0) {
0x080091e8 bne 0x80095ac | goto label_49;
| }
| label_16:
0x080091ec ldrb r1, [r5, 0xd] | r1 = *((r5 + 0xd));
0x080091f0 ldr r3, [sb, 0x94] | r3 = *((sb + 0x94));
0x080091f4 tst r1, 0x10 |
| if ((r1 & 0x10) == 0) {
0x080091f8 beq 0x8008c18 | goto label_6;
| }
| label_18:
0x080091fc ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x08009200 ldr r0, [sp, 0x38] | r0 = var_38h;
0x08009204 subs sl, r2, r0 | sl = r2 - r0;
0x08009208 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0800920c and r0, r0, 0x1400 | r0 &= 0x1400;
| if (sl != r2) {
0x08009210 moveq r2, 1 | r2 = 1;
| }
| if (sl == r2) {
0x08009214 movne r2, 0 | r2 = 0;
| }
0x08009218 cmp r0, 0x1400 |
| if (r0 == 0x1400) {
0x0800921c movne r2, 0 | r2 = 0;
| }
| if (r0 != 0x1400) {
0x08009220 andeq r2, r2, 1 | r2 &= 1;
| }
0x08009224 cmp r2, 0 |
| if (r2 == 0) {
0x08009228 beq 0x8008c30 | goto label_7;
| }
0x0800922c b 0x8008c18 | goto label_6;
| label_45:
0x08009230 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x08009234 tst r3, 4 |
| if ((r3 & 4) != 0) {
0x08009238 bne 0x8008e14 | goto label_8;
| }
0x0800923c ldr r3, [sp, 0x18] | r3 = var_18h;
0x08009240 sub r3, r3, 2 | r3 -= 2;
0x08009244 cmp r3, 1 |
0x08009248 cmpls r8, 3 | __asm ("cmpls r8, 3");
| if (r3 != 1) {
0x0800924c bne 0x8008e14 | goto label_8;
| }
0x08009250 mrs r2, apsr | r2 = apsr;
0x08009254 cpsid i | __asm ("cpsid i");
0x08009258 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0800925c orr r3, r3, 4 | r3 |= 4;
0x08009260 str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x08009264 msr cpsr_c, r2 | cpsr_c = r2;
0x08009268 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0800926c ldr r3, [r3, 0x660] | r3 = *((r3 + 0x660));
0x08009270 cmp r3, 0 |
| if (r3 == 0) {
0x08009274 beq 0x8008e14 | goto label_8;
| }
0x08009278 ldr r3, [r4, 0x8c] | r3 = *((r4 + 0x8c));
0x0800927c cmp r3, 0 |
| if (r3 == 0) {
0x08009280 beq 0x8008e14 | goto label_8;
| }
0x08009284 ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x08009288 cmp r2, 0 |
| if (r2 == 0) {
0x0800928c beq 0x8008e14 | goto label_8;
| }
0x08009290 cmn r3, r2 |
| if (r3 == r2) {
0x08009294 beq 0x8008e14 | goto label_8;
| }
0x08009298 mrs r0, apsr | r0 = apsr;
0x0800929c cpsid i | __asm ("cpsid i");
0x080092a0 ldr r1, [r3, r2] | r1 = *((r3 + r2));
0x080092a4 orr r1, r1, 0x10 | r1 |= 0x10;
0x080092a8 str r1, [r3, r2] | *((r3 + r2)) = r1;
0x080092ac msr cpsr_c, r0 | cpsr_c = r0;
0x080092b0 b 0x8008e14 | goto label_8;
| label_36:
0x080092b4 subs sb, sb, 0x14 | sb -= 0x14;
| if (sb == sb) {
0x080092b8 beq 0x8008b74 | goto label_9;
| }
0x080092bc ldr r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x080092c0 sub r3, r1, r3 | r3 = r1 - r3;
0x080092c4 add r1, r7, 0x14 | r1 = r7 + 0x14;
0x080092c8 sub r3, r3, r1 | r3 -= r1;
0x080092cc cmp sb, r3 |
0x080092d0 ldr r3, [r6, 0xa8] | r3 = *((r6 + 0xa8));
| if (sb <= r3) {
0x080092d4 ble 0x80097c0 | goto label_50;
| }
0x080092d8 cmp r6, 0 |
| if (r6 == 0) {
0x080092dc beq 0x80097c8 | goto label_51;
| }
0x080092e0 mov r3, sb | r3 = sb;
0x080092e4 add r2, sp, 0x60 | r2 += var_60h;
0x080092e8 mov r0, r6 | r0 = r6;
0x080092ec stmdaeq r1, {r2, r3, r5, r6, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r6, r7, sl, fp, lr, pc}");
0x080092f0 cmp r0, 0 |
| if (r0 < 0) {
0x080092f4 blt 0x80097c8 | goto label_51;
| }
0x080092f8 add r3, sp, 0x60 | r3 += var_60h;
| label_21:
0x080092fc cmp sb, 0xc |
| if (sb == 0xc) {
0x08009300 beq 0x8009820 | goto label_52;
| }
| label_10:
0x08009304 cmp sb, 0 |
| if (sb <= 0) {
0x08009308 ble 0x8008b74 | goto label_9;
| }
| label_22:
0x0800930c ldrb r2, [r3] | r2 = *(r3);
0x08009310 cmp r2, 0 |
| if (r2 == 0) {
0x08009314 beq 0x8008b74 | goto label_9;
| }
0x08009318 cmp r2, 1 |
| if (r2 != 1) {
0x0800931c addeq r3, r3, 1 | r3++;
| }
| if (r2 == 1) {
0x08009320 subeq sb, sb, 1 | sb--;
| goto label_53;
| }
| if (r2 == 1) {
| label_53:
0x08009324 beq 0x8009304 | goto label_10;
| }
0x08009328 cmp sb, 1 |
| if (sb == 1) {
0x0800932c beq 0x8008b74 | goto label_9;
| }
0x08009330 ldrb r1, [r3, 1] | r1 = *((r3 + 1));
0x08009334 cmp sb, r1 |
0x08009338 cmpge r1, 1 | __asm ("cmpge r1, 1");
| if (sb <= r1) {
0x0800933c ble 0x8008b74 | goto label_9;
| }
0x08009340 sub r2, r2, 5 | r2 -= 5;
0x08009344 cmp r1, 9 |
0x08009348 clz r2, r2 | r2 &= r2;
0x0800934c lsr r2, r2, 5 | r2 >>= 5;
| if (r1 > 9) {
0x08009350 movle r2, 0 | r2 = 0;
| }
0x08009354 cmp r2, 0 |
| if (r2 == 0) {
0x08009358 beq 0x8009394 | goto label_54;
| }
0x0800935c sub r2, r1, 2 | r2 = r1 - 2;
0x08009360 ands r0, r2, 7 | r0 = r2 & 7;
| if (r0 != r2) {
0x08009364 bne 0x8009394 | goto label_54;
| }
0x08009368 ldr sb, [sp, 0x1c] | sb = var_1ch;
| do {
0x0800936c add r1, r3, r0 | r1 = r3 + r0;
0x08009370 add r0, r0, 8 | r0 += 8;
0x08009374 ldr r1, [r1, 6] | r1 = *((r1 + 6));
0x08009378 rev r1, r1 | r1 = SWAP32 (r1);
0x0800937c sub ip, sb, r1 |
0x08009380 cmp ip, 0 |
| if (ip >= 0) {
0x08009384 movlt sb, r1 | sb = r1;
| }
0x08009388 cmp r2, r0 |
0x0800938c bgt 0x800936c |
| } while (r2 > r0);
0x08009390 b 0x8008b78 | goto label_11;
| label_54:
0x08009394 add r3, r3, r1 | r3 += r1;
0x08009398 sub sb, sb, r1 | sb -= r1;
0x0800939c b 0x8009304 | goto label_10;
| label_40:
0x080093a0 ldrb r2, [r4, 0xb8] | r2 = *((r4 + 0xb8));
0x080093a4 cmp r2, 1 |
| if (r2 != 1) {
0x080093a8 moveq r2, 0x14 | r2 = 0x14;
| }
| if (r2 == 1) {
0x080093ac movne r2, 0 | r2 = 0;
| }
| if (r2 == 1) {
0x080093b0 strne r2, [sp, 0x14] | var_14h = r2;
| }
0x080093b4 mlaeq r2, r2, fp, r4 | __asm ("mlaeq r2, r2, fp, r4");
| if (r2 != 1) {
0x080093b8 ldreq r2, [r2, 0x90] | r2 = *((r2 + 0x90));
| }
| if (r2 != 1) {
0x080093bc streq r2, [sp, 0x14] | var_14h = r2;
| }
| if (r2 != 1) {
0x080093c0 streq r2, [sp, 0x28] | var_28h = r2;
| }
0x080093c4 b 0x8008c44 | goto label_12;
| label_30:
0x080093c8 ldrb r3, [r8, 4] | r3 = *((r8 + 4));
0x080093cc mov r2, r7 | r2 = r7;
0x080093d0 str r3, [sp] | *(sp) = r3;
0x080093d4 mov r0, r6 | r0 = r6;
0x080093d8 mov r3, 6 | r3 = 6;
0x080093dc stmdaeq r1, {r2, r3, r5, sb, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r5, sb, sl, fp, lr, pc}");
0x080093e0 cmp r0, 0 |
| if (r0 == 0) {
0x080093e4 beq 0x8008990 | goto label_13;
| }
0x080093e8 ldrb r2, [r8, 4] | r2 = *((r8 + 4));
0x080093ec stmdaeq r0, {r2, r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r6, r8, sp, lr, pc}");
0x080093f0 stmdaeq r0, {r2, r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r6, r8, sp, lr, pc}");
0x080093f4 ldr r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x080093f8 mov r0, r6 | r0 = r6;
| label_26:
0x080093fc stmdaeq r0, {r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r6, r8, sp, lr, pc}");
0x08009400 stmdaeq r0, {r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r6, r8, sp, lr, pc}");
0x08009404 stm sp, {r3, ip} | *(sp) = r3;
| *((sp + 4)) = ip;
0x08009408 mov r3, 6 | r3 = 6;
0x0800940c stmdaeq r0, {r2, r3, r4, r5, r7, r8, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, r8, lr, pc}");
0x08009410 b 0x8008a88 | goto label_1;
| label_47:
0x08009414 ldr ip, [sp, 0x10] | ip = var_10h;
0x08009418 mov r0, 0x14 | r0 = 0x14;
0x0800941c ldr sb, [sp, 0x2c] | sb = var_2ch;
0x08009420 mla r7, r0, ip, r4 | __asm ("mla r7, r0, ip, r4");
0x08009424 ldr ip, [r7, 0x90] | ip = *((r7 + 0x90));
0x08009428 sub lr, sb, ip | lr = sb - ip;
0x0800942c cmp lr, 1 |
| if (lr >= 1) {
0x08009430 bpl 0x80091c4 | goto label_14;
| }
0x08009434 mla r0, r0, fp, r4 | __asm ("mla r0, r0, fp, r4");
0x08009438 mov lr, 0x1d0 |
0x0800943c movt lr, 1 | lr = 0x101d0;
0x08009440 str r0, [sp, 0x1c] | var_1ch = r0;
0x08009444 mvn sb, sb | sb = ~sb;
0x08009448 ldr r0, [r0, 0x98] | r0 = *((r0 + 0x98));
0x0800944c cmp r0, lr |
| if (r0 < lr) {
0x08009450 subhs ip, ip, r0 |
| }
| if (r0 >= lr) {
0x08009454 sublo ip, ip, lr |
| }
0x08009458 cmn sb, ip |
| if (sb >= ip) {
0x0800945c bpl 0x80091c4 | goto label_14;
| }
0x08009460 tst r1, 2 |
| if ((r1 & 2) != 0) {
0x08009464 ldreq r2, [sp, 0x1c] | r2 = var_1ch;
| }
| if ((r1 & 2) != 0) {
0x08009468 ldreq r1, [sp, 0x30] | r1 = var_30h;
| }
| if ((r1 & 2) != 0) {
0x0800946c ldrbeq r2, [r2, 0xa0] | r2 = *((r2 + 0xa0));
| }
| if ((r1 & 2) != 0) {
0x08009470 lsleq r2, r1, r2 | r2 = r1 << r2;
| }
| if ((r1 & 2) != 0) {
0x08009474 streq r2, [sp, 0x40] | var_40h = r2;
| }
0x08009478 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0800947c ldr r1, [sp, 0x40] | r1 = var_40h;
0x08009480 sub r2, r2, sl | r2 -= sl;
0x08009484 add r2, r2, r1 | r2 += r1;
0x08009488 cmp r0, r2 |
0x0800948c ldr r0, [sp, 0x28] | r0 = var_28h;
| if (r0 >= r2) {
0x08009490 movlo r1, 0x14 | r1 = 0x14;
| }
0x08009494 mlalo r1, r1, fp, r4 | __asm ("mlalo r1, r1, fp, r4");
| if (r0 >= r2) {
0x08009498 strlo r2, [r1, 0x98] | *((r1 + 0x98)) = r2;
| }
0x0800949c ldr r2, [sp, 0x20] | r2 = var_20h;
0x080094a0 add r1, r4, r2 | r1 = r4 + r2;
0x080094a4 ldr r2, [r1, 0x90] | r2 = *((r1 + 0x90));
0x080094a8 sub r2, r2, r0 | r2 -= r0;
0x080094ac cmp r2, 0 |
| if (r2 < 0) {
0x080094b0 bge 0x80094cc |
0x080094b4 mov r2, 0x14 | r2 = 0x14;
0x080094b8 str r0, [r1, 0x90] | *((r1 + 0x90)) = r0;
0x080094bc mla r2, r2, fp, r4 | __asm ("mla r2, r2, fp, r4");
0x080094c0 ldrb r1, [r2, 0xa1] | r1 = *((r2 + 0xa1));
0x080094c4 orr r1, r1, 0x10 | r1 |= 0x10;
0x080094c8 strb r1, [r2, 0xa1] | *((r2 + 0xa1)) = r1;
| }
0x080094cc ldrb r2, [r5, 0xd] | r2 = *((r5 + 0xd));
0x080094d0 tst r2, 0x10 |
| if ((r2 & 0x10) != 0) {
0x080094d4 beq 0x80094f8 |
0x080094d8 mov r2, 0x14 | r2 = 0x14;
0x080094dc mla r2, r2, fp, r4 | __asm ("mla r2, r2, fp, r4");
0x080094e0 ldrb r1, [r2, 0xa1] | r1 = *((r2 + 0xa1));
0x080094e4 tst r1, 0x20 |
| if ((r1 & 0x20) != 0) {
0x080094e8 bne 0x80099c4 | goto label_55;
| }
0x080094ec orr r1, r1, 0x20 | r1 |= 0x20;
0x080094f0 str sl, [r2, 0x9c] | *((r2 + 0x9c)) = sl;
0x080094f4 strb r1, [r2, 0xa1] | *((r2 + 0xa1)) = r1;
| }
| label_24:
0x080094f8 ldr r1, [sp, 0x10] | r1 = var_10h;
0x080094fc mov r2, 0x14 | r2 = 0x14;
0x08009500 mla r2, r2, r1, r4 | __asm ("mla r2, r2, r1, r4");
0x08009504 ldr r1, [r2, 0x98] | r1 = *((r2 + 0x98));
0x08009508 cmp r1, 0 |
| if (r1 != 0) {
0x0800950c beq 0x8009528 |
0x08009510 ldr ip, [sp, 0x28] | ip = var_28h;
0x08009514 sub r0, r3, ip | r0 = r3 - ip;
0x08009518 cmp r0, 0 |
| if (r0 >= 0) {
0x0800951c sublt r3, r1, r3 | r3 = r1 - r3;
| }
| if (r0 >= 0) {
0x08009520 addlt r3, r3, ip | r3 += ip;
| }
| if (r0 < 0) {
0x08009524 strlt r3, [r2, 0x98] | *((r2 + 0x98)) = r3;
| goto label_56;
| }
| }
| label_56:
0x08009528 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0800952c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x08009530 ldr r2, [r7, 0x94] | r2 = *((r7 + 0x94));
0x08009534 add r3, r0, r3 | r3 = r0 + r3;
0x08009538 mvn r1, r3 | r1 = ~r3;
0x0800953c cmn r1, r2 |
| if (r1 < r2) {
0x08009540 bpl 0x8009554 |
0x08009544 cmp r0, 0 |
| if (r0 != 0) {
0x08009548 ldreq r3, [sp, 0x2c] | r3 = var_2ch;
| }
| if (r0 != 0) {
0x0800954c addeq r3, r3, 1 | r3++;
| }
0x08009550 str r3, [r7, 0x94] | *((r7 + 0x94)) = r3;
| }
0x08009554 ldr r3, [r7, 0x90] | r3 = *((r7 + 0x90));
0x08009558 cmp sl, r3 |
| if (sl == r3) {
0x0800955c bne 0x8009578 |
0x08009560 ldr r2, [sp, 0x10] | r2 = var_10h;
0x08009564 mov r3, 0x14 | r3 = 0x14;
0x08009568 mla r3, r3, r2, r4 | __asm ("mla r3, r3, r2, r4");
0x0800956c ldrb r2, [r3, 0xa1] | r2 = *((r3 + 0xa1));
0x08009570 bic r2, r2, 0x10 | r2 = BIT_MASK (r2, 0x10);
0x08009574 strb r2, [r3, 0xa1] | *((r3 + 0xa1)) = r2;
| }
0x08009578 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0800957c ldr r2, [sp, 0xc] | r2 = var_ch;
0x08009580 subs r3, r8, r3 | r3 = r8 - r3;
| if (r3 == r8) {
0x08009584 movne r3, 1 | r3 = 1;
| }
0x08009588 cmp r8, 4 |
| if (r8 == 4) {
0x0800958c movne r3, 0 | r3 = 0;
| }
0x08009590 cmp r2, 3 |
| if (r2 == 3) {
0x08009594 beq 0x8009918 | goto label_57;
| }
0x08009598 ldrb r1, [r4, 0xba] | r1 = *((r4 + 0xba));
0x0800959c b 0x8008ccc | goto label_15;
| label_48:
0x080095a0 ldr r3, [sp, 8] | r3 = var_8h;
0x080095a4 cmp r3, 2 |
| if (r3 > 2) {
0x080095a8 bhi 0x80091ec | goto label_16;
| }
| label_49:
0x080095ac ldr r3, [sp, 0x20] | r3 = var_20h;
0x080095b0 ldr r2, [sp, 0x28] | r2 = var_28h;
0x080095b4 add sl, r4, r3 | sl = r4 + r3;
0x080095b8 ldr r3, [sl, 0x90] | r3 = *((sl + 0x90));
0x080095bc sub r3, r3, r2 | r3 -= r2;
0x080095c0 cmp r3, 0 |
| if (r3 < 0) {
0x080095c4 blt 0x8009838 | goto label_58;
| }
| label_23:
0x080095c8 ldr r3, [sl, 0x94] | r3 = *((sl + 0x94));
0x080095cc b 0x8008c0c | goto label_17;
| label_39:
0x080095d0 ldr r1, [sl, 0x90] | r1 = *((sl + 0x90));
0x080095d4 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x080095d8 add r1, r1, 1 | r1++;
0x080095dc cmp r0, r1 |
| if (r0 != r1) {
0x080095e0 streq r0, [sl, 0x90] | *((sl + 0x90)) = r0;
| }
| if (r0 != r1) {
0x080095e4 ldreq r3, [r2, 0x94] | r3 = *((r2 + 0x94));
| }
0x080095e8 b 0x8008c0c | goto label_17;
| label_38:
0x080095ec ldr r0, [sp, 0x20] | r0 = var_20h;
0x080095f0 mov r1, r7 | r1 = r7;
0x080095f4 ldr r2, [sp, 0x30] | r2 = var_30h;
0x080095f8 add r7, r4, r0 | r7 = r4 + r0;
0x080095fc ldr r0, [sp, 0x28] | r0 = var_28h;
0x08009600 cmp r2, 1 |
0x08009604 ldr r3, [sp, 0x3c] | r3 = var_3ch;
| if (r2 >= 1) {
0x08009608 movlo r2, 1 | r2 = 1;
| }
0x0800960c str r0, [r7, 0x94] | *((r7 + 0x94)) = r0;
0x08009610 str r0, [r7, 0x90] | *((r7 + 0x90)) = r0;
0x08009614 mov r0, r6 | r0 = r6;
0x08009618 str r2, [sb, 0x98] | *((sb + 0x98)) = r2;
0x0800961c mov r2, r5 | r2 = r5;
0x08009620 bl 0x8008640 | tcp_options ();
0x08009624 ldrb r3, [sb, 0xa1] | r3 = *((sb + 0xa1));
0x08009628 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0800962c beq 0x8009644 |
0x08009630 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08009634 mla sl, sl, r3, r4 | __asm ("mla sl, sl, r3, r4");
0x08009638 ldrb r3, [sl, 0xa1] | r3 = *((sl + 0xa1));
0x0800963c tst r3, 1 |
| if ((r3 & 1) != 0) {
0x08009640 bne 0x8009660 | goto label_59;
| }
| }
0x08009644 ldr r1, [sp, 0x10] | r1 = var_10h;
0x08009648 mov r3, 0x14 | r3 = 0x14;
0x0800964c mov r2, 0 | r2 = 0;
0x08009650 mla r1, r3, r1, r4 | __asm ("mla r1, r3, r1, r4");
0x08009654 mla r3, r3, fp, r4 | __asm ("mla r3, r3, fp, r4");
0x08009658 strb r2, [r1, 0xa0] | *((r1 + 0xa0)) = r2;
0x0800965c strb r2, [r3, 0xa0] | *((r3 + 0xa0)) = r2;
| label_59:
0x08009660 ldrb r1, [r5, 0xd] | r1 = *((r5 + 0xd));
0x08009664 tst r1, 0x10 |
| if ((r1 & 0x10) != 0) {
0x08009668 ldrne r3, [r7, 0x94] | r3 = *((r7 + 0x94));
| goto label_60;
| }
| if ((r1 & 0x10) != 0) {
| label_60:
0x0800966c bne 0x80091fc | goto label_18;
| }
0x08009670 b 0x8008cb0 | goto label_19;
| label_34:
0x08009674 mov r3, 2 | r3 = 2;
0x08009678 str r3, [sp, 0xc] | var_ch = r3;
0x0800967c b 0x8008a24 | goto label_2;
| label_46:
0x08009680 ldr r1, [sp, 8] | r1 = var_8h;
0x08009684 mov r2, r6 | r2 = r6;
0x08009688 mov r0, r4 | r0 = r4;
0x0800968c stmdaeq r0, {r2, sb, sl, fp, ip} | __asm ("stmdaeq r0, {r2, sb, sl, fp, ip}");
0x08009690 mov r0, 1 | r0 = 1;
0x08009694 b 0x8008e34 | goto label_20;
| label_50:
0x080097c0 adds r3, r3, r1 | r3 += r1;
| if (r3 != r3) {
0x080097c4 bne 0x80092fc | goto label_21;
| }
| label_51:
0x080097c8 udf 0x12 | __asm ("udf 0x12");
| label_52:
0x08009820 ldr r1, [r3] | r1 = *(r3);
0x08009824 movw r2, 0x101 |
0x08009828 movt r2, 0xa08 | r2 = 0xa080101;
0x0800982c cmp r1, r2 |
| if (r1 != r2) {
0x08009830 bne 0x800930c | goto label_22;
| }
0x08009834 b 0x8008b74 | goto label_9;
| label_58:
0x08009838 mov r2, 0x14 | r2 = 0x14;
0x0800983c ldr r0, [sp, 0x30] | r0 = var_30h;
0x08009840 ldr r3, [sp, 0x28] | r3 = var_28h;
0x08009844 mov r1, r7 | r1 = r7;
0x08009848 mla r2, r2, fp, r4 | __asm ("mla r2, r2, fp, r4");
0x0800984c cmp r0, 1 |
0x08009850 str r3, [sl, 0x94] | *((sl + 0x94)) = r3;
0x08009854 str r3, [sl, 0x90] | *((sl + 0x90)) = r3;
| if (r0 >= 1) {
0x08009858 movlo r0, 1 | r0 = 1;
| }
0x0800985c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x08009860 str r0, [r2, 0x98] | *((r2 + 0x98)) = r0;
0x08009864 mov r2, r5 | r2 = r5;
0x08009868 mov r0, r6 | r0 = r6;
0x0800986c bl 0x8008640 | tcp_options ();
0x08009870 b 0x80095c8 | goto label_23;
| label_57:
0x08009918 ldrb r2, [r4, 0xb9] | r2 = *((r4 + 0xb9));
0x0800991c cmp fp, r2 |
0x08009920 beq 0x80099d8 |
| while (r1 != r2) {
| label_25:
0x08009924 ldr r2, [sp, 0x14] | r2 = var_14h;
0x08009928 mov r1, 0 | r1 = 0;
0x0800992c str r2, [r4, 0xbc] | *((r4 + 0xbc)) = r2;
0x08009930 ldr r2, [sp, 0x28] | r2 = var_28h;
0x08009934 str r2, [r4, 0xc4] | *((r4 + 0xc4)) = r2;
0x08009938 ldrh r2, [sp, 0x46] | r2 = var_46h;
0x0800993c str sl, [r4, 0xc0] | *((r4 + 0xc0)) = sl;
0x08009940 strh r2, [r4, 0xc8] | *((r4 + 0xc8)) = r2;
0x08009944 strb r1, [r4, 0xba] | *((r4 + 0xba)) = r1;
0x08009948 b 0x8008ccc | goto label_15;
| label_55:
0x080099c4 ldr r1, [r2, 0x9c] | r1 = *((r2 + 0x9c));
0x080099c8 sub r1, r1, sl | r1 -= sl;
0x080099cc cmp r1, 0 |
| if (r1 >= 0) {
0x080099d0 strlt sl, [r2, 0x9c] | *((r2 + 0x9c)) = sl;
| }
0x080099d4 b 0x80094f8 | goto label_24;
0x080099d8 ldr r2, [r4, 0xbc] | r2 = *((r4 + 0xbc));
0x080099dc ldr r1, [sp, 0x14] | r1 = var_14h;
0x080099e0 cmp r1, r2 |
0x080099e4 bne 0x8009924 |
| }
0x080099e8 ldr r2, [r4, 0xc0] | r2 = *((r4 + 0xc0));
0x080099ec cmp sl, r2 |
| if (sl != r2) {
0x080099f0 bne 0x8009924 | goto label_25;
| }
0x080099f4 ldr r2, [r4, 0xc4] | r2 = *((r4 + 0xc4));
0x080099f8 ldr r1, [sp, 0x28] | r1 = var_28h;
0x080099fc cmp r1, r2 |
| if (r1 != r2) {
0x08009a00 bne 0x8009924 | goto label_25;
| }
0x08009a04 ldrh r2, [r4, 0xc8] | r2 = *((r4 + 0xc8));
0x08009a08 ldr r1, [sp, 0x30] | r1 = var_30h;
0x08009a0c cmp r2, r1 |
| if (r2 != r1) {
0x08009a10 bne 0x8009924 | goto label_25;
| }
0x08009a14 ldrb r1, [r4, 0xba] | r1 = *((r4 + 0xba));
0x08009a18 add r1, r1, 1 | r1++;
0x08009a1c uxtb r1, r1 | r1 = (int8_t) r1;
0x08009a20 strb r1, [r4, 0xba] | *((r4 + 0xba)) = r1;
0x08009a24 b 0x8008ccc | goto label_15;
| label_31:
0x08009b8c stmdaeq r0, {r2, r4, r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r6, r8, sp, lr, pc}");
0x08009b90 stmdaeq r0, {r2, r4, r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r6, r8, sp, lr, pc}");
0x08009b94 ldrb r2, [r8, 4] | r2 = *((r8 + 4));
0x08009b98 mov r0, r6 | r0 = r6;
0x08009b9c ldr r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x08009ba0 b 0x80093fc | goto label_26;
| label_42:
0x08009ba4 cmp r2, 0 |
| if (r2 >= 0) {
0x08009ba8 bge 0x8009c44 | goto label_61;
| }
0x08009bac cmp ip, 0 |
| if (ip == 0) {
0x08009bb0 beq 0x8009c50 | goto label_62;
| }
0x08009bb4 ldr r2, [sp, 0x10] | r2 = var_10h;
0x08009bb8 mla r3, r3, r2, r4 | __asm ("mla r3, r3, r2, r4");
0x08009bbc ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x08009bc0 ldr r3, [r3, 0x90] | r3 = *((r3 + 0x90));
0x08009bc4 sub r2, r2, r3 | r2 -= r3;
0x08009bc8 cmp r2, 1 |
| if (r2 >= 1) {
0x08009bcc bpl 0x8009c5c | goto label_63;
| }
0x08009bd0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x08009bd4 ldr r0, [r1, 0x98] | r0 = *((r1 + 0x98));
0x08009bd8 mvn r1, r2 | r1 = ~r2;
0x08009bdc mov r2, 0x1d0 |
0x08009be0 movt r2, 1 | r2 = 0x101d0;
0x08009be4 cmp r0, r2 |
| if (r0 >= r2) {
0x08009be8 sublo r3, r3, r2 | r3 -= r2;
| }
| if (r0 < r2) {
0x08009bec subhs r3, r3, r0 | r3 -= r0;
| }
0x08009bf0 cmn r1, r3 |
0x08009bf4 stmdaeq r0, {r4, r5, r6, r7, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, sp, lr, pc}");
0x08009bf8 stmdaeq r0, {r4, r5, r6, r7, sp, lr, pc} | __asm ("stmdaeq r0, {r4, r5, r6, r7, sp, lr, pc}");
0x08009bfc stmdaeq r0, {r2, r3, r5, r6, r7, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r6, r7, sp, lr, pc}");
0x08009c00 stmdaeq r0, {r2, r3, r5, r6, r7, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r6, r7, sp, lr, pc}");
0x08009c04 movpl r3, r2 | r3 = r2;
| while (1) {
| label_27:
0x08009c08 mov r1, r4 | r1 = r4;
0x08009c0c mov r0, r6 | r0 = r6;
0x08009c10 stmdaeq r0, {r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r6, r8, sp, lr, pc}");
0x08009c14 stmdaeq r0, {r6, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r6, r8, sp, lr, pc}");
0x08009c18 stmdaeq r0, {r2, r3, r4, r5, sb, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r5, sb, lr, pc}");
0x08009c1c ldr r0, [pc, 0x60] | r0 = .text;
0x08009c20 movw r1, 0x201 | r1 = 0x201;
0x08009c24 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08009c28 mvn r0, 0 | r0 = ~0;
0x08009c2c b 0x8008e34 | goto label_20;
| label_29:
0x08009c30 stmdaeq r0, {r2, r3, r5, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r8, sp, lr, pc}");
0x08009c34 stmdaeq r0, {r2, r3, r5, r8, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r5, r8, sp, lr, pc}");
0x08009c38 ldrb r2, [r8, 4] | r2 = *((r8 + 4));
0x08009c3c mov r0, r6 | r0 = r6;
0x08009c40 b 0x80093fc | goto label_26;
| label_61:
0x08009c44 stmdaeq r0, {r2, r4, r5, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, sp, lr, pc}");
0x08009c48 stmdaeq r0, {r2, r4, r5, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, sp, lr, pc}");
0x08009c4c b 0x8009c08 |
| }
| label_62:
0x08009c50 stmdaeq r0, {r2, r4, r5, r6, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, r6, sp, lr, pc}");
0x08009c54 stmdaeq r0, {r2, r4, r5, r6, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, r6, sp, lr, pc}");
0x08009c58 b 0x8009c08 | goto label_27;
| label_63:
0x08009c5c stmdaeq r0, {r2, r4, r5, r7, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, r7, sp, lr, pc}");
0x08009c60 stmdaeq r0, {r2, r4, r5, r7, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r4, r5, r7, sp, lr, pc}");
0x08009c64 b 0x8009c08 | goto label_27;
| }
; 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/netfilter/nf_conntrack.ko @ 0x80056d0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_ct_expect_iterate_destroy () | void nf_ct_expect_iterate_destroy (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x080056d0 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x080056d4 mov r3, sp | r3 = sp;
0x080056d8 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080056dc bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080056e0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080056e4 add r3, r3, 0x200 | r3 += 0x200;
0x080056e8 add r3, r3, 1 | r3++;
0x080056ec str r3, [r2, 4] | *((r2 + 4)) = r3;
0x080056f0 stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc}");
0x080056f4 stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc}");
0x080056f8 ldr r3, [sb] | r3 = *(sb);
0x080056fc cmp r3, 0 |
| if (r3 == 0) {
0x08005700 beq 0x8005794 | goto label_3;
| }
0x08005704 mov r6, r0 | r6 = r0;
0x08005708 mov r7, r1 | r7 = r1;
0x0800570c mov r8, 0 | r8 = 0;
| label_2:
0x08005710 ldr r3, [sb, 4] | r3 = *((sb + 4));
0x08005714 ldr r4, [r3, r8, lsl 2] | offset_0 = r8 << 2;
| r4 = *((r3 + offset_0));
0x08005718 cmp r4, 0 |
| if (r4 == 0) {
0x0800571c beq 0x8005784 | goto label_4;
| }
0x08005720 subs r4, r4, 8 | r4 -= 8;
| if (r4 != r4) {
0x08005724 bne 0x800573c | goto label_5;
| }
0x08005728 b 0x8005784 | goto label_4;
| do {
| label_0:
0x0800572c cmp r5, 0 |
| if (r5 == 0) {
0x08005730 beq 0x8005784 | goto label_4;
| }
| label_1:
0x08005734 subs r4, r5, 8 | r4 = r5 - 8;
| if (r4 == r5) {
0x08005738 beq 0x8005784 | goto label_4;
| }
| label_5:
0x0800573c mov r1, r7 | r1 = r7;
0x08005740 mov r0, r4 | r0 = r4;
0x08005744 ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x08005748 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t) (r0, r1);
0x0800574c cmp r0, 0 |
0x08005750 beq 0x800572c |
| } while (r0 == 0);
0x08005754 add r0, r4, 0x58 | r0 = r4 + 0x58;
0x08005758 stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc}");
0x0800575c cmp r0, 0 |
| if (r0 == 0) {
0x08005760 beq 0x800572c | goto label_0;
| }
0x08005764 mov r2, 0 | r2 = 0;
0x08005768 mov r0, r4 | r0 = r4;
0x0800576c mov r1, r2 | r1 = r2;
0x08005770 stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr}");
0x08005774 mov r0, r4 | r0 = r4;
0x08005778 stmdaeq r0, {r2, r3, r5, sb, ip, lr} | __asm ("stmdaeq r0, {r2, r3, r5, sb, ip, lr}");
0x0800577c cmp r5, 0 |
| if (r5 != 0) {
0x08005780 bne 0x8005734 | goto label_1;
| }
| label_4:
0x08005784 ldr r3, [sb] | r3 = *(sb);
0x08005788 add r8, r8, 1 | r8++;
0x0800578c cmp r3, r8 |
| if (r3 > r8) {
0x08005790 bhi 0x8005710 | goto label_2;
| }
| label_3:
0x08005794 pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08005798 movw r1, 0x201 | r1 = 0x201;
0x0800579c ldr r0, [pc] | r0 = *(0x800579c);
0x080057a0 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x080057a4 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/netfilter/nf_conntrack.ko @ 0x80057a8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_ct_expect_iterate_net () | void nf_ct_expect_iterate_net (int32_t arg_30h, int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x080057a8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080057ac mov r7, r2 | r7 = r2;
0x080057b0 sub sp, sp, 0xc |
0x080057b4 str r3, [sp, 4] | var_4h = r3;
0x080057b8 mov r3, sp | r3 = sp;
0x080057bc bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x080057c0 ldr fp, [sp, 0x30] | fp = *(arg_30h);
0x080057c4 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x080057c8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x080057cc add r3, r3, 0x200 | r3 += 0x200;
0x080057d0 add r3, r3, 1 | r3++;
0x080057d4 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x080057d8 stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc}");
0x080057dc stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, sb, sl, fp, sp, lr, pc}");
0x080057e0 ldr r3, [sb] | r3 = *(sb);
0x080057e4 cmp r3, 0 |
| if (r3 == 0) {
0x080057e8 beq 0x800588c | goto label_3;
| }
0x080057ec mov r5, r0 | r5 = r0;
0x080057f0 mov r6, r1 | r6 = r1;
0x080057f4 mov r8, 0 | r8 = 0;
| label_2:
0x080057f8 ldr r3, [sb, 4] | r3 = *((sb + 4));
0x080057fc ldr r4, [r3, r8, lsl 2] | offset_0 = r8 << 2;
| r4 = *((r3 + offset_0));
0x08005800 cmp r4, 0 |
| if (r4 == 0) {
0x08005804 beq 0x800587c | goto label_4;
| }
0x08005808 subs r4, r4, 8 | r4 -= 8;
| if (r4 != r4) {
0x0800580c bne 0x8005824 | goto label_5;
| }
0x08005810 b 0x800587c | goto label_4;
| do {
| label_0:
0x08005814 cmp sl, 0 |
| if (sl == 0) {
0x08005818 beq 0x800587c | goto label_4;
| }
| label_1:
0x0800581c subs r4, sl, 8 | r4 = sl - 8;
| if (r4 == sl) {
0x08005820 beq 0x800587c | goto label_4;
| }
| label_5:
0x08005824 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x08005828 ldr sl, [r4, 8] | sl = *((r4 + 8));
0x0800582c ldr r2, [r2, 0x74] | r2 = *((r2 + 0x74));
0x08005830 cmp r5, r2 |
0x08005834 bne 0x8005814 |
| } while (r5 != r2);
0x08005838 mov r1, r7 | r1 = r7;
0x0800583c mov r0, r4 | r0 = r4;
0x08005840 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t) (r0, r1);
0x08005844 cmp r0, 0 |
| if (r0 == 0) {
0x08005848 beq 0x8005814 | goto label_0;
| }
0x0800584c add r0, r4, 0x58 | r0 = r4 + 0x58;
0x08005850 stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc}");
0x08005854 cmp r0, 0 |
| if (r0 == 0) {
0x08005858 beq 0x8005814 | goto label_0;
| }
0x0800585c ldr r1, [sp, 4] | r1 = var_4h;
0x08005860 mov r2, fp | r2 = fp;
0x08005864 mov r0, r4 | r0 = r4;
0x08005868 stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr}");
0x0800586c mov r0, r4 | r0 = r4;
0x08005870 stmdaeq r0, {r2, r3, r5, sb, ip, lr} | __asm ("stmdaeq r0, {r2, r3, r5, sb, ip, lr}");
0x08005874 cmp sl, 0 |
| if (sl != 0) {
0x08005878 bne 0x800581c | goto label_1;
| }
| label_4:
0x0800587c ldr r3, [sb] | r3 = *(sb);
0x08005880 add r8, r8, 1 | r8++;
0x08005884 cmp r3, r8 |
| if (r3 > r8) {
0x08005888 bhi 0x80057f8 | goto label_2;
| }
| label_3:
0x0800588c ldr r0, [pc, 0xc] | r0 = *(0x800589c);
0x08005890 movw r1, 0x201 | r1 = 0x201;
0x08005894 add sp, sp, 0xc |
0x08005898 pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0800589c stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x080058a0 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/netfilter/nf_conntrack.ko @ 0x8005680 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_ct_expectation_timed_out () | void nf_ct_expectation_timed_out (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x08005680 push {r4, r5, r6, lr} |
0x08005684 movw r5, 0x201 | r5 = 0x201;
0x08005688 sub r4, r0, 0x58 | r4 = r0 - 0x58;
0x0800568c mov r3, sp | r3 = sp;
0x08005690 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08005694 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08005698 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800569c add r2, r2, r5 | r2 += r5;
0x080056a0 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080056a4 mov r2, 0 | r2 = 0;
0x080056a8 mov r0, r4 | r0 = r4;
0x080056ac mov r1, r2 | r1 = r2;
0x080056b0 stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr}");
0x080056b4 ldr r0, [pc, 0x10] | r0 = *(0x80056c8);
0x080056b8 mov r1, r5 | r1 = r5;
0x080056bc stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x080056c0 mov r0, r4 | r0 = r4;
0x080056c4 pop {r4, r5, r6, lr} |
0x080056c8 stmdaeq r0, {r2, r3, r5, sb, ip, lr} | __asm ("stmdaeq r0, {r2, r3, r5, sb, ip, lr}");
0x080056cc 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/netfilter/nf_conntrack.ko @ 0x800660c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_ct_helper_expectfn_register () | void nf_ct_helper_expectfn_register (int32_t arg1) {
| r0 = arg1;
0x0800660c mov r3, sp | r3 = sp;
0x08006610 movw r1, 0x201 | r1 = 0x201;
0x08006614 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08006618 mov r3, r0 | r3 = r0;
0x0800661c bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08006620 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x08006624 add r0, r0, r1 | r0 += r1;
0x08006628 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x0800662c stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc}");
0x08006630 stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc}");
0x08006634 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08006638 ldr ip, [r2] | ip = *(r2);
0x0800663c str ip, [r3] | *(r3) = ip;
0x08006640 ldr r0, [pc, 8] | r0 = sym.__nf_conntrack_hash_insert;
0x08006644 str r3, [ip, 4] | *((ip + 4)) = r3;
0x08006648 str r3, [r2] | *(r2) = r3;
0x0800664c stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08006650 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/netfilter/nf_conntrack.ko @ 0x8006654 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_ct_helper_expectfn_unregister () | void nf_ct_helper_expectfn_unregister (int32_t arg1) {
| r0 = arg1;
0x08006654 mov r3, sp | r3 = sp;
0x08006658 movw r1, 0x201 | r1 = 0x201;
0x0800665c bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08006660 mov r3, r0 | r3 = r0;
0x08006664 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08006668 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0800666c add r0, r0, r1 | r0 += r1;
0x08006670 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x08006674 ldm r3, {r0, r2} | r0 = *(r3);
| r2 = *((r3 + 4));
0x08006678 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0800667c movw ip, 0x122 | ip = 0x122;
0x08006680 str r0, [r2] | *(r2) = r0;
0x08006684 ldr r0, [pc, 4] | r0 = sym.__nf_conntrack_hash_insert;
0x08006688 str ip, [r3, 4] | *((r3 + 4)) = ip;
0x0800668c stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08006690 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/netfilter/nf_conntrack.ko @ 0x80058a4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_ct_remove_expectations () | void nf_ct_remove_expectations (int32_t arg1) {
| r0 = arg1;
0x080058a4 ldr r3, [r0, 0x8c] | r3 = *((r0 + 0x8c));
0x080058a8 cmp r3, 0 |
| if (r3 != 0) {
0x080058ac bxeq lr | return;
| }
0x080058b0 ldrb r2, [r3] | r2 = *(r3);
0x080058b4 cmp r2, 0 |
| if (r2 != 0) {
0x080058b8 bxeq lr | return;
| }
0x080058bc adds r3, r3, r2 | r3 += r2;
| if (r3 != r3) {
0x080058c0 bxeq lr | return;
| }
0x080058c4 push {r4, r5, r6, lr} |
0x080058c8 mov r2, sp | r2 = sp;
0x080058cc bic r1, r2, 0x1fc0 | r1 = BIT_MASK (r2, 0x1fc0);
0x080058d0 bic r1, r1, 0x3f | r1 = BIT_MASK (r1, 0x3f);
0x080058d4 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x080058d8 add r2, r2, 0x200 | r2 += 0x200;
0x080058dc add r2, r2, 1 | r2++;
0x080058e0 str r2, [r1, 4] | *((r1 + 4)) = r2;
0x080058e4 ldr r4, [r3, 4] | r4 = *((r3 + 4));
| do {
0x080058e8 cmp r4, 0 |
| if (r4 == 0) {
0x080058ec beq 0x8005928 | goto label_1;
| }
| label_0:
0x080058f0 mov r5, r4 | r5 = r4;
0x080058f4 ldr r4, [r4] | r4 = *(r4);
0x080058f8 add r0, r5, 0x58 | r0 = r5 + 0x58;
0x080058fc stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc}");
0x08005900 cmp r0, 0 |
0x08005904 beq 0x80058e8 |
| } while (r0 == 0);
0x08005908 mov r2, 0 | r2 = 0;
0x0800590c mov r0, r5 | r0 = r5;
0x08005910 mov r1, r2 | r1 = r2;
0x08005914 stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr}");
0x08005918 mov r0, r5 | r0 = r5;
0x0800591c stmdaeq r0, {r2, r3, r5, sb, ip, lr} | __asm ("stmdaeq r0, {r2, r3, r5, sb, ip, lr}");
0x08005920 cmp r4, 0 |
| if (r4 != 0) {
0x08005924 bne 0x80058f0 | goto label_0;
| }
| label_1:
0x08005928 pop {r4, r5, r6, lr} |
0x0800592c movw r1, 0x201 | r1 = 0x201;
0x08005930 ldr r0, [pc] | r0 = *(0x8005930);
0x08005934 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08005938 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/netfilter/nf_conntrack.ko @ 0x8005af4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.nf_ct_unexpect_related () | void nf_ct_unexpect_related (uint32_t arg1) {
| int32_t var_ch;
| int32_t var_ch_2;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_20h_2;
| int32_t var_24h_2;
| int32_t var_0h;
| r0 = arg1;
0x08005af4 push {r4, lr} |
0x08005af8 mov r4, r0 | r4 = r0;
0x08005afc mov r3, sp | r3 = sp;
0x08005b00 bic r2, r3, 0x1fc0 | r2 = BIT_MASK (r3, 0x1fc0);
0x08005b04 bic r2, r2, 0x3f | r2 = BIT_MASK (r2, 0x3f);
0x08005b08 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x08005b0c add r3, r3, 0x200 | r3 += 0x200;
0x08005b10 add r3, r3, 1 | r3++;
0x08005b14 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x08005b18 add r0, r0, 0x58 | r0 += 0x58;
0x08005b1c stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r6, r7, r8, sl, fp, lr, pc}");
0x08005b20 cmp r0, 0 |
| if (r0 == 0) {
0x08005b24 bne 0x8005b38 |
0x08005b28 pop {r4, lr} |
0x08005b2c movw r1, 0x201 | r1 = 0x201;
0x08005b30 ldr r0, [pc, 0x28] | r0 = *(0x8005b5c);
0x08005b34 stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
| }
0x08005b38 mov r0, r4 | r0 = r4;
0x08005b3c mov r2, 0 | r2 = 0;
0x08005b40 mov r1, r2 | r1 = r2;
0x08005b44 stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr} | __asm ("stmdaeq r0, {r3, r4, r5, r8, sl, ip, lr}");
0x08005b48 mov r0, r4 | r0 = r4;
0x08005b4c stmdaeq r0, {r2, r3, r5, sb, ip, lr} | __asm ("stmdaeq r0, {r2, r3, r5, sb, ip, lr}");
0x08005b50 ldr r0, [pc, 8] | r0 = sym.__nf_conntrack_hash_insert;
0x08005b54 pop {r4, lr} |
0x08005b58 movw r1, 0x201 | r1 = 0x201;
0x08005b5c stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r4, r5, r7, sl, fp, lr, pc}");
0x08005b60 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
| }
[*] Function sprintf used 1 times nf_conntrack.ko