[*] Binary protection state of libxtables.so.12.6.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of libxtables.so.12.6.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x37e0 */
| #include <stdint.h>
|
; (fcn) fcn.000037e0 () | void fcn_000037e0 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_90h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_19ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000037e0 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x000037e4 mov fp, r0 |
0x000037e6 ldr r0, [pc, 0x170] |
0x000037e8 mov r7, r3 | r7 = r3;
0x000037ea sub sp, 0x1a4 |
0x000037ec mov r6, r2 | r6 = r2;
0x000037ee ldr r3, [pc, 0x16c] | r3 = *(0x395e);
0x000037f0 add.w ip, sp, 0x90 |
0x000037f4 add r0, pc | r0 = 0x7152;
0x000037f6 ldr r2, [pc, 0x168] |
0x000037f8 ldr.w sl, [pc, 0x168] |
0x000037fc mov r8, r6 | r8 = r6;
0x000037fe ldr r3, [r0, r3] |
0x00003800 mov r0, fp | r0 = fp;
0x00003802 add r2, pc | r2 = 0x7168;
0x00003804 add sl, pc | sl = 0x716c;
0x00003806 ldr r3, [r3] | r3 = *(0x7152);
0x00003808 str r3, [sp, 0x19c] | var_19ch = r3;
0x0000380a mov.w r3, 0 | r3 = 0;
0x0000380e ldr r3, [pc, 0x158] |
0x00003810 str r1, [sp, 0x18] | var_18h = r1;
0x00003812 strd r2, r7, [sp, 0x20] | __asm ("strd r2, r7, [sp, 0x20]");
0x00003816 add r3, pc | r3 = 0x7184;
0x00003818 str.w ip, [sp, 0x1c] | __asm ("str.w ip, [var_1ch]");
0x0000381c strd r1, r3, [sp, 0x90] | __asm ("strd r1, r3, [sp, 0x90]");
0x00003820 movs r3, 0 | r3 = 0;
0x00003822 movs r1, 0x3a | r1 = 0x3a;
0x00003824 str r3, [sp, 0x98] | var_98h = r3;
0x00003826 blx 0x26d0 | r0 = fcn_000026d0 ();
0x0000382a mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x0000382c cbz r0, 0x3890 | goto label_5;
| }
| label_0:
0x0000382e ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 == 0) {
0x00003830 cbz r3, 0x387a | goto label_6;
| }
0x00003832 add r7, sp, 0x28 | r7 += var_28h;
0x00003834 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x00003836 mov r2, r7 | r2 = r7;
0x00003838 sub.w r6, sb, fp | r6 = sb - fp;
0x0000383c mov r7, fp | r7 = fp;
0x0000383e add r4, sp, 0x9c | r4 += var_9ch;
0x00003840 mov fp, r2 |
| do {
0x00003842 strd r3, r8, [sp, 0xc] | __asm ("strd r3, r8, [sp, 0xc]");
0x00003846 mov.w r3, 0x100 | r3 = 0x100;
0x0000384a mov r1, r3 | r1 = r3;
0x0000384c movs r2, 1 | r2 = 1;
0x0000384e mov r0, r4 | r0 = r4;
0x00003850 strd r6, r7, [sp, 4] | __asm ("strd r6, r7, [sp, 4]");
0x00003854 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00003858 blx 0x2924 | fcn_00002924 ();
0x0000385c mov r1, fp | r1 = fp;
0x0000385e mov r0, r4 | r0 = r4;
0x00003860 blx 0x2578 | r0 = fcn_00002578 ();
0x00003864 cmp r0, 0 |
| if (r0 == 0) {
0x00003866 beq 0x38d8 | goto label_7;
| }
0x00003868 blx 0x26f8 | r0 = fcn_000026f8 ();
0x0000386c ldr r0, [r0] | r0 = *(r0);
0x0000386e cmp r0, 2 |
| if (r0 != 2) {
0x00003870 bne 0x389c | goto label_8;
| }
0x00003872 ldr r3, [r5, 4]! | r3 = *((r5 += 4));
0x00003876 cmp r3, 0 |
0x00003878 bne 0x3842 |
| } while (r3 != 0);
| label_6:
0x0000387a mov fp, sb |
0x0000387c ldrb r3, [fp], 1 | r3 = *(fp);
| fp++;
| if (r3 == 0) {
0x00003880 cbz r3, 0x38ba | goto label_2;
| }
| label_1:
0x00003882 movs r1, 0x3a | r1 = 0x3a;
0x00003884 mov r0, fp | r0 = fp;
0x00003886 blx 0x26d0 | r0 = fcn_000026d0 ();
0x0000388a mov sb, r0 | sb = r0;
0x0000388c cmp r0, 0 |
| if (r0 != 0) {
0x0000388e bne 0x382e | goto label_0;
| }
| label_5:
0x00003890 mov r0, fp | r0 = fp;
0x00003892 blx 0x26c4 | r0 = fcn_000026c4 ();
0x00003896 add.w sb, fp, r0 | sb = fp + r0;
0x0000389a b 0x382e | goto label_0;
| label_8:
0x0000389c ldr r2, [sp, 0x20] | r2 = var_20h;
0x0000389e ldr r3, [pc, 0xcc] | r3 = *(0x396e);
0x000038a0 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000038a2 ldr r6, [r3] | r6 = *(0x396e);
0x000038a4 blx 0x264c | vfprintf_chk ()
0x000038a8 ldr r2, [pc, 0xc4] |
0x000038aa mov r5, r0 | r5 = r0;
0x000038ac mov r3, r4 | r3 = r4;
0x000038ae movs r1, 1 | r1 = 1;
0x000038b0 mov r0, r6 | r0 = r6;
0x000038b2 str r5, [sp] | *(sp) = r5;
0x000038b4 add r2, pc | r2 = 0x7228;
0x000038b6 blx 0x27c4 | fcn_000027c4 ();
| label_2:
0x000038ba movs r4, 0 | r4 = 0;
| label_3:
0x000038bc ldr r2, [pc, 0xb4] |
0x000038be ldr r3, [pc, 0x9c] | r3 = *(0x395e);
0x000038c0 add r2, pc | r2 = 0x7238;
0x000038c2 ldr r3, [r2, r3] | r3 = *(0x7238);
0x000038c4 ldr r2, [r3] | r2 = *(0x7238);
0x000038c6 ldr r3, [sp, 0x19c] | r3 = var_19ch;
0x000038c8 eors r2, r3 | r2 ^= r3;
0x000038ca mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000038ce bne 0x3954 | goto label_9;
| }
0x000038d0 mov r0, r4 | r0 = r4;
0x000038d2 add sp, 0x1a4 |
0x000038d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x000038d8 movs r1, 2 | r1 = 2;
0x000038da mov r0, r4 | r0 = r4;
0x000038dc blx 0x2658 | r0 = strsep ();
| if (r0 != 0) {
0x000038e0 cbnz r0, 0x390a | goto label_10;
| }
0x000038e2 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000038e4 mov fp, sb |
0x000038e6 ldr r3, [pc, 0x84] | r3 = *(0x396e);
0x000038e8 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000038ea ldr r5, [r3] | r5 = *(0x396e);
0x000038ec blx 0x23f4 | dlerror ();
0x000038f0 ldr r2, [pc, 0x84] |
0x000038f2 mov r3, r4 | r3 = r4;
0x000038f4 str r0, [sp] | *(sp) = r0;
0x000038f6 movs r1, 1 | r1 = 1;
0x000038f8 mov r0, r5 | r0 = r5;
0x000038fa add r2, pc | r2 = 0x7276;
0x000038fc blx 0x27c4 | fcn_000027c4 ();
0x00003900 ldrb r3, [fp], 1 | r3 = *(fp);
| fp++;
0x00003904 cmp r3, 0 |
| if (r3 != 0) {
0x00003906 bne 0x3882 | goto label_1;
| }
0x00003908 b 0x38ba | goto label_2;
| label_10:
0x0000390a str r0, [sp, 0x18] | var_18h = r0;
0x0000390c movs r0, 8 | r0 = 8;
0x0000390e ldr r7, [sp, 0x24] | r7 = var_24h;
0x00003910 mov r6, r8 | r6 = r8;
0x00003912 blx 0x2634 | r0 = strerror (r0);
| if (r0 != 0) {
0x00003916 cbz r0, 0x392c |
0x00003918 ldr r1, [pc, 0x60] |
0x0000391a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000391c add r1, pc |
0x0000391e str r3, [r0, 4] | *((r0 + 4)) = r3;
0x00003920 mov r3, r1 | r3 = r1;
0x00003922 ldr.w r1, [r1, 0x804] | r1 = *(0x7aa0);
0x00003926 str.w r0, [r3, 0x804] | __asm ("str.w r0, aav.0x000000ff");
0x0000392a str r1, [r0] | *(r0) = r1;
| }
| if (r7 == 0) {
0x0000392c cbz r7, 0x3946 | goto label_11;
| }
0x0000392e movs r1, 0 | r1 = 0;
0x00003930 mov r0, r6 | r0 = r6;
0x00003932 blx 0x27e8 | r0 = fcn_000027e8 ();
0x00003936 mov r4, r0 | r4 = r0;
| label_4:
0x00003938 cmp r4, 0 |
| if (r4 != 0) {
0x0000393a bne 0x38bc | goto label_3;
| }
0x0000393c blx 0x26f8 | fcn_000026f8 ();
0x00003940 movs r3, 2 | r3 = 2;
0x00003942 str r3, [r0] | *(r0) = r3;
0x00003944 b 0x38bc | goto label_3;
| label_11:
0x00003946 mov r2, r7 | r2 = r7;
0x00003948 mov r1, r7 | r1 = r7;
0x0000394a mov r0, r6 | r0 = r6;
0x0000394c blx 0x2810 | r0 = fcn_00002810 ();
0x00003950 mov r4, r0 | r4 = r0;
0x00003952 b 0x3938 | goto label_4;
| label_9:
0x00003954 blx 0x2560 | fcn_00002560 ();
0x00003958 str r0, [r6, 0x5c] | *((r6 + 0x5c)) = r0;
0x0000395a movs r0, r0 |
0x0000395c lsls r0, r3, 7 | r0 = r3 << 7;
0x0000395e movs r0, r0 |
0x00003960 str r2, [r4, 0x5c] | *((r4 + 0x5c)) = r2;
0x00003962 movs r0, r0 |
0x00003964 add r0, r0 | r0 += r0;
0x00003966 movs r0, r0 |
0x00003968 mvns r6, r4 | r6 = ~r4;
0x0000396a movs r0, r0 |
0x0000396c lsls r4, r5, 7 | r4 = r5 << 7;
0x0000396e movs r0, r0 |
0x00003970 muls r0, r4, r0 | r0 = r4 * r0;
0x00003972 movs r0, r0 |
0x00003974 str r4, [r4, 0x50] | *((r4 + 0x50)) = r4;
0x00003976 movs r0, r0 |
0x00003978 orrs r2, r3 | r2 |= r3;
0x0000397a movs r0, r0 |
0x0000397c str r0, [r6, 0x6c] | *((r6 + 0x6c)) = r0;
0x0000397e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3ca4 */
| #include <stdint.h>
|
; (fcn) sym.xtables_compatible_revision () | void xtables_compatible_revision (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| char * dest;
| int16_t var_ch;
| int16_t var_28h;
| int16_t var_29h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00003ca4 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, aav.0x000000ff");
0x00003ca8 sub sp, 0x34 |
0x00003caa ldr r5, [pc, 0x150] |
0x00003cac movs r3, 0x1e | r3 = 0x1e;
0x00003cae mov r7, r0 | r7 = r0;
0x00003cb0 mov r8, r2 | r8 = r2;
0x00003cb2 ldr r4, [pc, 0x14c] | r4 = *(0x3e02);
0x00003cb4 movs r2, 0xff | r2 = 0xff;
0x00003cb6 add r5, pc | r5 = 0x7ab8;
0x00003cb8 ldr r6, [pc, 0x148] |
0x00003cba ldr.w ip, [pc, 0x14c] | ip = *(0x3e0a);
0x00003cbc stm r1!, {r2, r3, r6} | *(r1!) = r2;
| *((r1! + 4)) = r3;
| *((r1! + 8)) = r6;
0x00003cbe ldr r4, [r5, r4] |
0x00003cc0 add r6, pc | r6 = 0x7ac8;
0x00003cc2 ldr r4, [r4] | r4 = *(0x7ab8);
0x00003cc4 str r4, [sp, 0x2c] | var_2ch = r4;
0x00003cc6 mov.w r4, 0 | r4 = 0;
0x00003cca str r3, [sp, 8] | dest = r3;
0x00003ccc ldr.w sb, [r6, ip] | sb = *(0x7ac8);
0x00003cd0 mov r4, r1 | r4 = r1;
0x00003cd2 movs r1, 3 | r1 = 3;
0x00003cd4 ldr.w r3, [sb] | r3 = *(0x7ac8);
0x00003cd8 ldrb r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00003cda blx 0x28cc | r0 = fcn_000028cc ();
0x00003cde subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 >= r0) {
0x00003ce0 bge 0x3d0c | goto label_3;
| }
0x00003ce2 blx 0x26f8 | r0 = fcn_000026f8 ();
0x00003ce6 ldr r1, [r0] | r1 = *(r0);
0x00003ce8 cmp r1, 1 |
| if (r1 != 1) {
0x00003cea bne 0x3dd4 | goto label_4;
| }
0x00003cec cmp r4, 0 |
| if (r4 != 0) {
0x00003cee bne 0x3d72 | goto label_5;
| }
| label_0:
0x00003cf0 movs r0, 1 | r0 = 1;
| do {
0x00003cf2 ldr r2, [pc, 0x118] |
0x00003cf4 ldr r3, [pc, 0x108] | r3 = *(0x3e00);
0x00003cf6 add r2, pc | r2 = 0x7b08;
0x00003cf8 ldr r3, [r2, r3] | r3 = *(0x7b08);
0x00003cfa ldr r2, [r3] | r2 = *(0x7b08);
0x00003cfc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00003cfe eors r2, r3 | r2 ^= r3;
0x00003d00 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00003d04 bne 0x3dac | goto label_6;
| }
0x00003d06 add sp, 0x34 |
0x00003d08 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_3:
0x00003d0c movs r2, 1 | r2 = 1;
0x00003d0e movs r1, 2 | r1 = 2;
0x00003d10 blx 0x2804 | fcn_00002804 ();
0x00003d14 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00003d16 beq 0x3db0 | goto label_7;
| }
0x00003d18 ldr r3, [pc, 0xf4] | r3 = *(0x3e10);
0x00003d1a movs r1, 1 | r1 = 1;
0x00003d1c ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003d1e ldr r0, [r3] | r0 = *(0x3e10);
0x00003d20 blx 0x27d0 | fcn_000027d0 ();
0x00003d24 add r3, sp, 0xc | r3 += var_ch;
0x00003d26 movs r2, 0x1c | r2 = 0x1c;
0x00003d28 mov r1, r7 | r1 = r7;
0x00003d2a mov r0, r3 | r0 = r3;
0x00003d2c blx 0x2750 | fcn_00002750 ();
0x00003d30 ldr.w r1, [sb] | r1 = *(sb);
0x00003d34 mov r3, r0 | r3 = r0;
0x00003d36 movs r0, 0 | r0 = 0;
0x00003d38 strb.w r4, [sp, 0x29] | var_29h = r4;
0x00003d3c strb.w r0, [sp, 0x28] | var_28h = r0;
0x00003d40 add r0, sp, 8 | r0 += dest;
0x00003d42 ldrb r1, [r1, 0xd] | r1 = *((r1 + 0xd));
0x00003d44 mov r2, r8 | r2 = r8;
0x00003d46 str r0, [sp] | *(sp) = r0;
0x00003d48 mov r0, r5 | r0 = r5;
0x00003d4a blx 0x25f8 | r0 = strcpy (r0, r1);
0x00003d4e cmp r0, 0 |
| if (r0 >= 0) {
0x00003d50 bge 0x3d86 | goto label_8;
| }
0x00003d52 blx 0x26f8 | r0 = fcn_000026f8 ();
0x00003d56 ldr r0, [r0] | r0 = *(r0);
0x00003d58 cmp r0, 0x5d |
0x00003d5a it ne |
| if (r0 != 0x5d) {
0x00003d5c cmpne r0, 2 | __asm ("cmpne r0, 2");
| }
| if (r0 == 0x5d) {
0x00003d5e beq 0x3d8e | goto label_9;
| }
0x00003d60 cmp r0, 0x5c |
| if (r0 != 0x5c) {
0x00003d62 bne 0x3de8 | goto label_10;
| }
0x00003d64 mov r0, r5 | r0 = r5;
0x00003d66 blx 0x2900 | r0 = fcn_00002900 ();
| label_1:
0x00003d6a clz r0, r4 | r0 &= r4;
0x00003d6e lsrs r0, r0, 5 | r0 >>= 5;
0x00003d70 b 0x3cf2 |
| } while (1);
| label_5:
0x00003d72 ldr r2, [pc, 0xa0] | r2 = *(0x3e16);
0x00003d74 mov r3, r7 | r3 = r7;
0x00003d76 ldr r0, [r6, r2] | r0 = *((r6 + r2));
0x00003d78 ldr r2, [pc, 0x9c] |
0x00003d7a str r4, [sp] | *(sp) = r4;
0x00003d7c ldr r0, [r0] | r0 = *(r0);
0x00003d7e add r2, pc | r2 = 0x7b9a;
0x00003d80 blx 0x27c4 | fcn_000027c4 ();
0x00003d84 b 0x3cf0 | goto label_0;
| label_8:
0x00003d86 mov r0, r5 | r0 = r5;
0x00003d88 blx 0x2900 | fcn_00002900 ();
0x00003d8c b 0x3cf0 | goto label_0;
| label_9:
0x00003d8e mov r0, r5 | r0 = r5;
0x00003d90 blx 0x2900 | fcn_00002900 ();
0x00003d94 cmp r4, 0 |
| if (r4 != 0) {
0x00003d96 bne 0x3d6a | goto label_1;
| }
0x00003d98 ldr r1, [pc, 0x78] | r1 = *(0x3e14);
0x00003d9a mov r3, r7 | r3 = r7;
0x00003d9c ldr r2, [pc, 0x7c] |
0x00003d9e ldr r1, [r6, r1] | r1 = *((r6 + r1));
0x00003da0 add r2, pc | r2 = "ACCEPT";
0x00003da2 ldr r0, [r1] | r0 = *(0x3e14);
0x00003da4 movs r1, 1 | r1 = 1;
0x00003da6 blx 0x27c4 | fcn_000027c4 ();
0x00003daa b 0x3d6a | goto label_1;
| label_6:
0x00003dac blx 0x2560 | fcn_00002560 ();
| label_7:
0x00003db0 ldr r3, [pc, 0x60] | r3 = *(0x3e14);
0x00003db2 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003db4 ldr r4, [r3] | r4 = *(0x3e14);
0x00003db6 blx 0x26f8 | r0 = fcn_000026f8 ();
0x00003dba ldr r0, [r0] | r0 = *(r0);
0x00003dbc blx 0x264c | vfprintf_chk ()
0x00003dc0 ldr r2, [pc, 0x5c] |
0x00003dc2 mov r3, r0 | r3 = r0;
0x00003dc4 add r2, pc | r2 = 0x7be8;
| do {
| label_2:
0x00003dc6 movs r1, 1 | r1 = 1;
0x00003dc8 mov r0, r4 | r0 = r4;
0x00003dca blx 0x27c4 | fcn_000027c4 ();
0x00003dce movs r0, 1 | r0 = 1;
0x00003dd0 blx 0x26a0 | strtoul (r0, r1, r2);
| label_4:
0x00003dd4 ldr r3, [pc, 0x3c] | r3 = *(0x3e14);
0x00003dd6 mov r0, r1 | r0 = r1;
0x00003dd8 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003dda ldr r4, [r3] | r4 = *(0x3e14);
0x00003ddc blx 0x264c | vfprintf_chk ()
0x00003de0 ldr r2, [pc, 0x40] |
0x00003de2 mov r3, r0 | r3 = r0;
0x00003de4 add r2, pc | r2 = 0x7c0c;
0x00003de6 b 0x3dc6 |
| } while (1);
| label_10:
0x00003de8 ldr r3, [pc, 0x28] | r3 = *(0x3e14);
0x00003dea ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003dec ldr r4, [r3] | r4 = *(0x3e14);
0x00003dee blx 0x264c | vfprintf_chk ()
0x00003df2 ldr r2, [pc, 0x34] |
0x00003df4 mov r3, r0 | r3 = r0;
0x00003df6 add r2, pc | r2 = 0x7c24;
0x00003df8 b 0x3dc6 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3980 */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_match () | void xtables_find_match (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00003980 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00003984 sub sp, 0x14 |
0x00003986 ldr.w r8, [pc, 0x230] |
0x0000398a mov r7, r0 | r7 = r0;
0x0000398c mov sl, r2 | sl = r2;
0x0000398e str r1, [sp, 0xc] | var_ch = r1;
0x00003990 blx 0x26c4 | r0 = fcn_000026c4 ();
0x00003994 cmp r0, 0x1c |
0x00003996 add r8, pc | r8 = 0x7554;
| if (r0 > 0x1c) {
0x00003998 bhi.w 0x3ba0 | goto label_8;
| }
0x0000399c ldr r1, [pc, 0x21c] |
0x0000399e mov r0, r7 | r0 = r7;
0x000039a0 add r1, pc | r1 = 0x7560;
0x000039a2 blx 0x2400 | r0 = strcmp (r0, r1);
0x000039a6 cmp r0, 0 |
| if (r0 == 0) {
0x000039a8 beq.w 0x3ac6 | goto label_9;
| }
0x000039ac ldr r1, [pc, 0x210] |
0x000039ae mov r0, r7 | r0 = r7;
0x000039b0 add r1, pc | r1 = 0x7574;
0x000039b2 blx 0x2400 | r0 = strcmp (r0, r1);
0x000039b6 cmp r0, 0 |
| if (r0 == 0) {
0x000039b8 beq.w 0x3b92 | goto label_10;
| }
0x000039bc ldr r4, [pc, 0x204] |
0x000039be mov r0, r7 | r0 = r7;
0x000039c0 add r4, pc | r4 = 0x7588;
0x000039c2 mov r1, r4 | r1 = r4;
0x000039c4 blx 0x2400 | r0 = strcmp (r0, r1);
0x000039c8 cmp r0, 0 |
0x000039ca it eq |
| if (r0 != 0) {
0x000039cc moveq r7, r4 | r7 = r4;
| }
| label_2:
0x000039ce ldr r3, [pc, 0x1f8] | r3 = *(0x3bca);
0x000039d0 ldr.w r5, [r8, r3] | r5 = *((r8 + r3));
0x000039d4 ldr r3, [pc, 0x1f4] | r3 = *(0x3bcc);
0x000039d6 ldr r4, [r5] | r4 = *(r5);
0x000039d8 ldr.w r1, [r8, r3] | r1 = *((r8 + r3));
| if (r4 == 0) {
0x000039dc cbz r4, 0x3a3c | goto label_11;
| }
0x000039de mov.w fp, 0 |
0x000039e2 str.w sl, [sp, 8] | __asm ("str.w sl, [var_8h]");
0x000039e6 mov sl, r5 | sl = r5;
0x000039e8 mov r5, fp | r5 = fp;
0x000039ea str r1, [sp, 4] | var_4h = r1;
| do {
0x000039ec ldr.w sb, [r4, 8] | sb = *((r4 + 8));
0x000039f0 mov r0, r7 | r0 = r7;
0x000039f2 ldrh r6, [r4, 0x12] | r6 = *((r4 + 0x12));
0x000039f4 mov r1, sb | r1 = sb;
0x000039f6 blx 0x2400 | r0 = strcmp (r0, r1);
0x000039fa cmp r0, 0 |
| if (r0 != 0) {
0x000039fc bne.w 0x3b1e | goto label_12;
| }
0x00003a00 ldr r3, [pc, 0x1cc] | r3 = *(0x3bd0);
0x00003a02 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00003a06 ldr r2, [r3] | r2 = *(0x3bd0);
0x00003a08 ldrb r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00003a0a cmp r6, 0 |
0x00003a0c it ne |
| if (r6 != 0) {
0x00003a0e cmpne r3, r6 | __asm ("cmpne r3, r6");
| }
0x00003a10 ite eq |
| if (r6 != 0) {
0x00003a12 moveq r6, 1 | r6 = 1;
| }
| if (r6 == 0) {
0x00003a14 movne r6, 0 | r6 = 0;
| }
| if (r6 != 0) {
0x00003a16 bne.w 0x3b1e | goto label_12;
| }
0x00003a1a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00003a1c str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x00003a20 cmp.w fp, 0 |
| if (fp == 0) {
0x00003a24 beq 0x3a94 | goto label_13;
| }
| if (r5 == 0) {
| label_0:
0x00003a26 cbnz r5, 0x3a30 |
0x00003a28 str.w r4, [sl] | __asm ("str.w r4, [sl]");
| label_5:
0x00003a2c add.w sl, r4, 4 | sl = r4 + 4;
| }
| label_1:
0x00003a30 ldr.w r4, [sl] | r4 = *(sl);
0x00003a34 cmp r4, 0 |
0x00003a36 bne 0x39ec |
| } while (r4 != 0);
0x00003a38 ldrd r1, sl, [sp, 4] | __asm ("ldrd r1, sl, [var_4h]");
| label_11:
0x00003a3c ldr r4, [r1] | r4 = *(r1);
0x00003a3e cmp r4, 0 |
| if (r4 == 0) {
0x00003a40 beq 0x3ad2 | goto label_14;
| }
0x00003a42 ldr r3, [pc, 0x18c] | r3 = *(0x3bd2);
0x00003a44 ldr.w sb, [r8, r3] | sb = *((r8 + r3));
0x00003a48 ldr.w r6, [sb] | r6 = *(sb);
| label_3:
0x00003a4c ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00003a4e mov r0, r7 | r0 = r7;
0x00003a50 blx 0x2400 | r0 = strcmp (r0, r1);
0x00003a54 cmp r0, 0 |
| if (r0 != 0) {
0x00003a56 bne 0x3acc | goto label_15;
| }
0x00003a58 ldrh r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x00003a5a ldrb r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00003a5c cmp r3, 0 |
0x00003a5e it ne |
| if (r3 != 0) {
0x00003a60 cmpne r2, r3 | __asm ("cmpne r2, r3");
| }
| if (r3 != 0) {
0x00003a62 bne 0x3acc | goto label_15;
| }
0x00003a64 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x00003a66 mov r5, r0 | r5 = r0;
| if (r3 != 0) {
0x00003a68 cbz r3, 0x3a82 |
0x00003a6a movs r0, 0x64 | r0 = 0x64;
0x00003a6c blx 0x2640 | r0 = dlopen ();
0x00003a70 mov r6, r0 | r6 = r0;
0x00003a72 mov r1, r4 | r1 = r4;
0x00003a74 mov r4, r6 | r4 = r6;
0x00003a76 movs r2, 0x64 | r2 = 0x64;
0x00003a78 blx 0x2500 | fcn_00002500 ();
0x00003a7c str r5, [r6, 0x50] | *((r6 + 0x50)) = r5;
0x00003a7e str r5, [r6, 0x5c] | *((r6 + 0x5c)) = r5;
0x00003a80 str r6, [r6, 4] | *((r6 + 4)) = r6;
| }
| label_4:
0x00003a82 cmp r4, 0 |
0x00003a84 it ne |
| if (r4 != 0) {
0x00003a86 cmpne sl, 0 | __asm ("cmpne sl, 0");
| }
| if (r4 != 0) {
0x00003a8a bne 0x3b24 | goto label_16;
| }
| label_7:
0x00003a8c mov r0, r4 | r0 = r4;
0x00003a8e add sp, 0x14 |
0x00003a90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00003a94 ldr r3, [pc, 0x13c] |
0x00003a96 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00003a98 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x00003a9a ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00003a9e ldrb r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00003aa0 cmp r0, 0 |
0x00003aa2 it eq |
| if (r0 != 0) {
0x00003aa4 moveq r0, sb | r0 = sb;
| }
0x00003aa6 ldr r3, [r3] |
0x00003aa8 ldr r3, [r3, 0x18] | r3 = xtables_find_match_revision;
0x00003aaa blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00003aac cmp r0, 0 |
| if (r0 == 0) {
0x00003aae beq 0x3a26 | goto label_0;
| }
0x00003ab0 cmp r5, 0 |
| if (r5 == 0) {
0x00003ab2 beq 0x3b7a | goto label_17;
| }
0x00003ab4 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00003ab6 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00003ab8 str r4, [r5, 4] | *((r5 + 4)) = r4;
| label_6:
0x00003aba movs r3, 0 | r3 = 0;
0x00003abc mov fp, r6 |
0x00003abe mov r5, r4 | r5 = r4;
0x00003ac0 strd r3, r3, [r4, 0x58] | __asm ("strd r3, r3, [r4, 0x58]");
0x00003ac4 b 0x3a30 | goto label_1;
| label_9:
0x00003ac6 ldr r7, [pc, 0x110] |
0x00003ac8 add r7, pc | r7 = 0x76a6;
0x00003aca b 0x39ce | goto label_2;
| label_15:
0x00003acc ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00003ace cmp r4, 0 |
| if (r4 != 0) {
0x00003ad0 bne 0x3a4c | goto label_3;
| }
| label_14:
0x00003ad2 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00003ad4 cmp r5, 1 |
| if (r5 < 1) {
0x00003ad6 bls 0x3b98 | goto label_18;
| }
0x00003ad8 ldr r3, [pc, 0xf4] | r3 = *(0x3bd0);
0x00003ada mov r2, r7 | r2 = r7;
0x00003adc ldr.w sb, [r8, r3] | sb = *((r8 + r3));
0x00003ae0 ldr r3, [pc, 0xf8] |
0x00003ae2 add r3, pc | r3 = 0x76c2;
0x00003ae4 ldr.w r0, [r3, 0x800] | r0 = *(0x7ec2);
0x00003ae8 ldr.w r3, [sb] | r3 = *(sb);
0x00003aec ldr r1, [r3, 8] | r1 = *(0x76ca);
0x00003aee movs r3, 0 | r3 = 0;
0x00003af0 bl 0x37e0 | r0 = fcn_000037e0 (r0, r1, r2, r3);
0x00003af4 cmp r0, 0 |
0x00003af6 it eq |
| if (r0 == 0) {
0x00003af8 cmpeq r5, 3 | __asm ("cmpeq r5, 3");
| }
0x00003afa mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00003afc bne 0x3a82 | goto label_4;
| }
0x00003afe ldr r3, [pc, 0xd4] |
0x00003b00 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00003b04 ldr r3, [r3] | r3 = *(0x3bd6);
0x00003b06 ldr r4, [r3, 0x14] | r4 = *(0x3bea);
0x00003b08 blx 0x26f8 | r0 = fcn_000026f8 ();
0x00003b0c ldr r0, [r0] | r0 = *(r0);
0x00003b0e blx 0x264c | vfprintf_chk ()
0x00003b12 ldr r1, [pc, 0xcc] |
0x00003b14 mov r3, r0 | r3 = r0;
0x00003b16 mov r2, r7 | r2 = r7;
0x00003b18 movs r0, 2 | r0 = 2;
0x00003b1a add r1, pc | r1 = 0x7700;
0x00003b1c blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_12:
0x00003b1e ldr.w r4, [sl] | r4 = *(sl);
0x00003b22 b 0x3a2c | goto label_5;
| label_16:
0x00003b24 movs r0, 0xc | r0 = 0xc;
0x00003b26 blx 0x2640 | dlopen ();
0x00003b2a ldr.w r5, [sl] | r5 = *(sl);
0x00003b2e mov r6, r0 | r6 = r0;
| if (r5 == 0) {
0x00003b30 cbz r5, 0x3b66 | goto label_19;
| }
0x00003b32 ldr.w sb, [sb] | sb = *(sb);
0x00003b36 mov.w r8, 1 | r8 = 1;
0x00003b3a mov sl, r7 | sl = r7;
0x00003b3c b 0x3b40 |
| while (r3 != 0) {
0x00003b3e mov r5, r3 | r5 = r3;
0x00003b40 ldr r7, [r5, 4] | r7 = *((r5 + 4));
0x00003b42 mov r0, sl | r0 = sl;
0x00003b44 ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x00003b46 blx 0x2400 | r0 = strcmp (r0, r1);
| if (r0 == 0) {
0x00003b4a cbnz r0, 0x3b5e |
0x00003b4c ldrh r3, [r7, 0x12] | r3 = *((r7 + 0x12));
0x00003b4e ldrb.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x00003b52 cmp r3, 0 |
0x00003b54 it ne |
| if (r3 != 0) {
0x00003b56 cmpne r2, r3 | __asm ("cmpne r2, r3");
| }
0x00003b58 it eq |
| if (r3 == 0) {
0x00003b5a strbeq r8, [r5, 8] | *((r5 + 8)) = r8;
| goto label_20;
| }
| }
| label_20:
0x00003b5e ldr r3, [r5] | r3 = *(r5);
0x00003b60 cmp r3, 0 |
0x00003b62 bne 0x3b3e |
| }
0x00003b64 mov sl, r5 | sl = r5;
| label_19:
0x00003b66 movs r3, 0 | r3 = 0;
0x00003b68 mov r0, r4 | r0 = r4;
0x00003b6a str r4, [r6, 4] | *((r6 + 4)) = r4;
0x00003b6c strb r3, [r6, 8] | *((r6 + 8)) = r3;
0x00003b6e str r3, [r6] | *(r6) = r3;
0x00003b70 str.w r6, [sl] | __asm ("str.w r6, [sl]");
0x00003b74 add sp, 0x14 |
0x00003b76 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x00003b7a ldr r3, [sp, 4] | r3 = var_4h;
0x00003b7c ldr r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x00003b7e cbz r3, 0x3b9c | goto label_21;
| }
| do {
0x00003b80 mov r2, r3 | r2 = r3;
0x00003b82 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00003b84 cmp r3, 0 |
0x00003b86 bne 0x3b80 |
| } while (r3 != 0);
0x00003b88 adds r2, 4 | r2 += 4;
| do {
0x00003b8a movs r3, 0 | r3 = 0;
0x00003b8c str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00003b8e str r4, [r2] | *(r2) = r4;
0x00003b90 b 0x3aba | goto label_6;
| label_10:
0x00003b92 ldr r7, [pc, 0x50] |
0x00003b94 add r7, pc | r7 = 0x777e;
0x00003b96 b 0x39ce | goto label_2;
| label_18:
0x00003b98 movs r4, 0 | r4 = 0;
0x00003b9a b 0x3a8c | goto label_7;
| label_21:
0x00003b9c ldr r2, [sp, 4] | r2 = var_4h;
0x00003b9e b 0x3b8a |
| } while (1);
| label_8:
0x00003ba0 ldr r0, [pc, 0x30] | r0 = *(0x3bd4);
0x00003ba2 movs r3, 0x1c | r3 = 0x1c;
0x00003ba4 ldr r1, [pc, 0x40] |
0x00003ba6 mov r2, r7 | r2 = r7;
0x00003ba8 ldr.w r4, [r8, r0] | r4 = *((r8 + r0));
0x00003bac movs r0, 2 | r0 = 2;
0x00003bae add r1, pc | r1 = 0x779a;
0x00003bb0 ldr r4, [r4] | r4 = *(r4);
0x00003bb2 ldr r4, [r4, 0x14] | r4 = *((r4 + 0x14));
0x00003bb4 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00003bb6 nop |
0x00003bb8 str r6, [r1, 0x44] | *((r1 + 0x44)) = r6;
0x00003bba movs r0, r0 |
0x00003bbc cmp r4, r5 |
0x00003bbe movs r0, r0 |
0x00003bc0 cmp r4, r4 |
0x00003bc2 movs r0, r0 |
0x00003bc4 rsbs r4, r3, 0 | r4 = r3 - ;
0x00003bc6 movs r0, r0 |
0x00003bc8 lsls r0, r2, 8 | r0 = r2 << 8;
0x00003bca movs r0, r0 |
0x00003bcc lsls r4, r3, 7 | r4 = r3 << 7;
0x00003bce movs r0, r0 |
0x00003bd0 lsls r0, r1, 8 | r0 = r1 << 8;
0x00003bd2 movs r0, r0 |
0x00003bd4 lsls r4, r1, 7 | r4 = r1 << 7;
0x00003bd6 movs r0, r0 |
0x00003bd8 adcs r4, r2 | __asm ("adcs r4, r2");
0x00003bda movs r0, r0 |
0x00003bdc str r2, [r5, 0x50] | *((r5 + 0x50)) = r2;
0x00003bde movs r0, r0 |
0x00003be0 adcs r6, r0 | __asm ("adcs r6, r0");
0x00003be2 movs r0, r0 |
0x00003be4 lsls r0, r1 | r0 <<= r1;
0x00003be6 movs r0, r0 |
0x00003be8 eors r6, r6 | r6 = 0;
0x00003bea movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3bec */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_match_revision () | void xtables_find_match_revision (int16_t arg1, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00003bec push.w {r4, r5, r6, r7, r8, lr} |
0x00003bf0 mov r6, r0 | r6 = r0;
0x00003bf2 ldr r5, [pc, 0x4c] |
0x00003bf4 mov r7, r3 | r7 = r3;
0x00003bf6 mov r4, r2 | r4 = r2;
0x00003bf8 add r5, pc | r5 = 0x783e;
| if (r2 == 0) {
0x00003bfa cbz r2, 0x3c32 | goto label_2;
| }
| label_0:
0x00003bfc ldr r3, [pc, 0x44] | r3 = *(0x3c44);
0x00003bfe ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00003c00 ldr.w r8, [r3] | r8 = *(0x3c44);
| do {
0x00003c04 ldrb r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00003c06 mov r0, r6 | r0 = r6;
0x00003c08 cmp r2, r7 |
| if (r2 == r7) {
0x00003c0a beq 0x3c2c | goto label_3;
| }
0x00003c0c ldr r4, [r4, 4] | r4 = *((r4 + 4));
| if (r4 == 0) {
0x00003c0e cbz r4, 0x3c26 | goto label_1;
| }
0x00003c10 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00003c12 ldrh r5, [r4, 0x12] | r5 = *((r4 + 0x12));
0x00003c14 blx 0x2400 | strcmp (r0, r1);
0x00003c16 invalid |
0x00003c1a ldrb.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00003c1e cmp r5, 0 |
0x00003c20 it ne |
| if (r5 != 0) {
0x00003c22 cmpne r3, r5 | __asm ("cmpne r3, r5");
| }
0x00003c24 beq 0x3c04 |
| } while (r5 == 0);
| label_1:
0x00003c26 movs r0, 0 | r0 = 0;
0x00003c28 pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x00003c2c mov r0, r4 | r0 = r4;
0x00003c2e pop.w {r4, r5, r6, r7, r8, pc} |
| label_2:
0x00003c32 blx 0x2810 | r0 = fcn_00002810 ();
0x00003c36 mov r4, r0 | r4 = r0;
0x00003c38 cmp r0, 0 |
| if (r0 != 0) {
0x00003c3a bne 0x3bfc | goto label_0;
| }
0x00003c3c b 0x3c26 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x35a8 */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_target () | void xtables_find_target (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| char * s2;
| int16_t var_8h_2;
| int16_t var_ch_2;
| r0 = arg1;
| r1 = arg2;
0x000035a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000035ac mov r8, r1 | r8 = r1;
0x000035ae ldrb r3, [r0] | r3 = *(r0);
0x000035b0 sub sp, 0x14 |
0x000035b2 ldr.w sb, [pc, 0x1e8] |
0x000035b6 add sb, pc | sb = 0x6d58;
| if (r3 != 0) {
0x000035b8 cbz r3, 0x35d0 |
0x000035ba ldr r1, [pc, 0x1e4] |
0x000035bc mov r7, r0 | r7 = r0;
0x000035be add r1, pc | r1 = 0x6d64;
0x000035c0 blx 0x2400 | r0 = strcmp (r0, r1);
0x000035c4 cmp r0, 0 |
| if (r0 != 0) {
0x000035c6 bne.w 0x3726 | goto label_9;
| }
0x000035ca ldr r7, [pc, 0x1d8] |
0x000035cc add r7, pc | r7 = 0x6d76;
0x000035ce b 0x35d4 |
| } else {
0x000035d0 ldr r7, [pc, 0x1d4] |
0x000035d2 add r7, pc | r7 = 0x6d7e;
| }
| label_6:
0x000035d4 ldr r3, [pc, 0x1d4] | r3 = *(0x37ac);
0x000035d6 ldr.w r5, [sb, r3] | r5 = *((sb + r3));
0x000035da ldr r3, [pc, 0x1d4] | r3 = *(0x37b2);
0x000035dc ldr r4, [r5] | r4 = *(r5);
0x000035de ldr.w r1, [sb, r3] | r1 = *((sb + r3));
0x000035e2 cmp r4, 0 |
| if (r4 == 0) {
0x000035e4 beq 0x364a | goto label_10;
| }
0x000035e6 ldr r3, [pc, 0x1cc] |
0x000035e8 mov.w fp, 0 |
0x000035ec str.w r8, [sp, 0xc] | __asm ("str.w r8, [var_ch_2]");
0x000035f0 mov sl, fp | sl = fp;
0x000035f2 mov r8, r5 | r8 = r5;
0x000035f4 str r1, [sp, 8] | var_8h_2 = r1;
0x000035f6 add r3, pc | r3 = 0x6db0;
0x000035f8 str r3, [sp, 4] | s2 = r3;
| do {
0x000035fa ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x000035fc mov r0, r7 | r0 = r7;
0x000035fe ldrh r6, [r4, 0x12] | r6 = *((r4 + 0x12));
0x00003600 mov r1, r5 | r1 = r5;
0x00003602 blx 0x2400 | r0 = strcmp (r0, r1);
0x00003606 cmp r0, 0 |
| if (r0 != 0) {
0x00003608 bne.w 0x3720 | goto label_11;
| }
0x0000360c ldr r3, [pc, 0x1a8] |
0x0000360e ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00003612 ldr r3, [r3] | r3 = *(0x37b8);
0x00003614 ldrb r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00003616 cmp r6, 0 |
0x00003618 it ne |
| if (r6 != 0) {
0x0000361a cmpne r2, r6 | __asm ("cmpne r2, r6");
| }
0x0000361c ite eq |
| if (r6 != 0) {
0x0000361e moveq r6, 1 | r6 = 1;
| }
| if (r6 == 0) {
0x00003620 movne r6, 0 | r6 = 0;
| }
| if (r6 != 0) {
0x00003622 bne 0x3720 | goto label_11;
| }
0x00003624 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00003626 str.w r2, [r8] | __asm ("str.w r2, [r8]");
0x0000362a cmp.w fp, 0 |
| if (fp == 0) {
0x0000362e beq 0x369a | goto label_12;
| }
| label_0:
0x00003630 cmp.w sl, 0 |
| if (sl == 0) {
0x00003634 bne 0x363e |
0x00003636 str.w r4, [r8] | __asm ("str.w r4, [r8]");
| label_5:
0x0000363a add.w r8, r4, 4 | r8 = r4 + 4;
| }
| label_1:
0x0000363e ldr.w r4, [r8] | r4 = *(r8);
0x00003642 cmp r4, 0 |
0x00003644 bne 0x35fa |
| } while (r4 != 0);
0x00003646 ldrd r1, r8, [sp, 8] | __asm ("ldrd r1, r8, [var_8h_2]");
| label_10:
0x0000364a ldr r4, [r1] | r4 = *(r1);
0x0000364c cmp r4, 0 |
| if (r4 == 0) {
0x0000364e beq 0x36e6 | goto label_13;
| }
0x00003650 ldr r3, [pc, 0x164] | r3 = *(0x37b8);
0x00003652 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00003656 ldr r6, [r3] | r6 = *(0x37b8);
| label_2:
0x00003658 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0000365a mov r0, r7 | r0 = r7;
0x0000365c blx 0x2400 | r0 = strcmp (r0, r1);
0x00003660 cmp r0, 0 |
| if (r0 != 0) {
0x00003662 bne 0x36e0 | goto label_14;
| }
0x00003664 ldrh r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x00003666 ldrb r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00003668 cmp r3, 0 |
0x0000366a it ne |
| if (r3 != 0) {
0x0000366c cmpne r2, r3 | __asm ("cmpne r2, r3");
| }
| if (r3 != 0) {
0x0000366e bne 0x36e0 | goto label_14;
| }
0x00003670 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x00003672 mov r5, r0 | r5 = r0;
| if (r3 != 0) {
0x00003674 cbz r3, 0x368e |
0x00003676 movs r0, 0x68 | r0 = 0x68;
0x00003678 blx 0x2640 | r0 = dlopen ();
0x0000367c mov r6, r0 | r6 = r0;
0x0000367e mov r1, r4 | r1 = r4;
0x00003680 mov r4, r6 | r4 = r6;
0x00003682 movs r2, 0x68 | r2 = 0x68;
0x00003684 blx 0x2500 | fcn_00002500 ();
0x00003688 str r5, [r6, 0x50] | *((r6 + 0x50)) = r5;
0x0000368a str r5, [r6, 0x5c] | *((r6 + 0x5c)) = r5;
0x0000368c str r6, [r6, 4] | *((r6 + 4)) = r6;
| }
| label_3:
0x0000368e movs r3, 1 | r3 = 1;
0x00003690 str r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
| label_4:
0x00003692 mov r0, r4 | r0 = r4;
0x00003694 add sp, 0x14 |
0x00003696 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x0000369a ldr r1, [sp, 4] | r1 = s2;
0x0000369c mov r0, r5 | r0 = r5;
0x0000369e str r3, [sp] | *(sp) = r3;
0x000036a0 blx 0x2400 | strcmp (r0, r1);
0x000036a4 ldr r3, [sp] | r3 = *(sp);
| if (r0 == 0) {
0x000036a6 cbz r0, 0x36c4 | goto label_15;
| }
0x000036a8 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x000036aa ldr r3, [pc, 0x110] |
0x000036ac ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000036ae ldrb r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x000036b0 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x000036b4 cmp r0, 0 |
0x000036b6 it eq |
| if (r0 != 0) {
0x000036b8 moveq r0, r5 | r0 = r5;
| }
0x000036ba ldr r3, [r3] |
0x000036bc ldr r3, [r3, 0x18] | r3 = *(0x37d6);
0x000036be blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000036c0 cmp r0, 0 |
| if (r0 == 0) {
0x000036c2 beq 0x3630 | goto label_0;
| }
| label_15:
0x000036c4 cmp.w sl, 0 |
| if (sl == 0) {
0x000036c8 beq 0x3750 | goto label_16;
| }
0x000036ca ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000036ce str r3, [r4, 4] | *((r4 + 4)) = r3;
0x000036d0 str.w r4, [sl, 4] | __asm ("str.w r4, [sl, 4]");
| label_7:
0x000036d4 movs r3, 0 | r3 = 0;
0x000036d6 mov fp, r6 |
0x000036d8 mov sl, r4 | sl = r4;
0x000036da strd r3, r3, [r4, 0x58] | __asm ("strd r3, r3, [r4, 0x58]");
0x000036de b 0x363e | goto label_1;
| label_14:
0x000036e0 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x000036e2 cmp r4, 0 |
| if (r4 != 0) {
0x000036e4 bne 0x3658 | goto label_2;
| }
| label_13:
0x000036e6 cmp.w r8, 1 |
| if (r8 < 1) {
0x000036ea bls 0x3716 | goto label_17;
| }
0x000036ec ldr r2, [pc, 0xc8] | r2 = *(0x37b8);
0x000036ee ldr r3, [pc, 0xd0] |
0x000036f0 ldr.w r2, [sb, r2] | r2 = *((sb + r2));
0x000036f4 add r3, pc | r3 = 0x6eba;
0x000036f6 ldr.w r0, [r3, 0x800] | r0 = *(0x76ba);
0x000036fa ldr r3, [r2] | r3 = *(0x37b8);
0x000036fc mov r2, r7 | r2 = r7;
0x000036fe ldr r1, [r3, 8] | r1 = *(0x37c0);
0x00003700 movs r3, 1 | r3 = 1;
0x00003702 bl 0x37e0 | r0 = fcn_000037e0 (r0, r1, r2, r3);
0x00003706 cmp r0, 0 |
0x00003708 it eq |
| if (r0 == 0) {
0x0000370a cmpeq r8, 3 | __asm ("cmpeq r8, 3");
| }
0x0000370e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00003710 beq 0x377a | goto label_18;
| }
0x00003712 cmp r0, 0 |
| if (r0 != 0) {
0x00003714 bne 0x368e | goto label_3;
| }
| label_17:
0x00003716 mov r0, r7 | r0 = r7;
0x00003718 bl 0x2f44 | fcn_00002f44 (r0);
| label_8:
0x0000371c movs r4, 0 | r4 = 0;
0x0000371e b 0x3692 | goto label_4;
| label_11:
0x00003720 ldr.w r4, [r8] | r4 = *(r8);
0x00003724 b 0x363a | goto label_5;
| label_9:
0x00003726 ldr r1, [pc, 0x9c] |
0x00003728 mov r0, r7 | r0 = r7;
0x0000372a add r1, pc | r1 = 0x6ef4;
0x0000372c blx 0x2400 | r0 = strcmp (r0, r1);
| if (r0 != 0) {
0x00003730 cbz r0, 0x375a |
0x00003732 ldr r1, [pc, 0x94] |
0x00003734 mov r0, r7 | r0 = r7;
0x00003736 add r1, pc | r1 = 0x6f04;
0x00003738 blx 0x2400 | r0 = strcmp (r0, r1);
| if (r0 == 0) {
0x0000373c cbz r0, 0x3760 | goto label_19;
| }
0x0000373e ldr r1, [pc, 0x8c] |
0x00003740 mov r0, r7 | r0 = r7;
0x00003742 add r1, pc | r1 = 0x6f14;
0x00003744 blx 0x2400 | r0 = strcmp (r0, r1);
| if (r0 != 0) {
0x00003748 cbnz r0, 0x3766 | goto label_20;
| }
0x0000374a ldr r7, [pc, 0x84] |
0x0000374c add r7, pc | r7 = 0x6f22;
0x0000374e b 0x35d4 | goto label_6;
| label_16:
0x00003750 ldr r2, [sp, 8] | r2 = var_8h_2;
0x00003752 ldr r3, [r2] | r3 = *(r2);
0x00003754 str r4, [r2] | *(r2) = r4;
0x00003756 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00003758 b 0x36d4 | goto label_7;
| }
0x0000375a ldr r7, [pc, 0x78] |
0x0000375c add r7, pc | r7 = 0x6f36;
0x0000375e b 0x35d4 | goto label_6;
| label_19:
0x00003760 ldr r7, [pc, 0x74] |
0x00003762 add r7, pc | r7 = 0x6f3e;
0x00003764 b 0x35d4 | goto label_6;
| label_20:
0x00003766 mov r0, r7 | r0 = r7;
0x00003768 bl 0x2a68 | fcn_00002a68 (r0);
0x0000376c cmp.w r8, 3 |
0x00003770 it ne |
| if (r8 == 3) {
0x00003772 cmpne r0, 0 | __asm ("cmpne r0, 0");
| goto label_21;
| }
| if (r8 == 3) {
| label_21:
0x00003774 beq.w 0x35d4 | goto label_6;
| }
0x00003778 b 0x371c | goto label_8;
| label_18:
0x0000377a ldr r3, [pc, 0x40] |
0x0000377c ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00003780 ldr r3, [r3] | r3 = *(0x37be);
0x00003782 ldr r4, [r3, 0x14] | r4 = *(0x37d2);
0x00003784 blx 0x26f8 | r0 = fcn_000026f8 ();
0x00003788 ldr r0, [r0] | r0 = *(r0);
0x0000378a blx 0x264c | vfprintf_chk ()
0x0000378e ldr r1, [pc, 0x4c] |
0x00003790 mov r3, r0 | r3 = r0;
0x00003792 mov r2, r7 | r2 = r7;
0x00003794 movs r0, 2 | r0 = 2;
0x00003796 add r1, pc | r1 = 0x6f78;
0x00003798 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000379a nop |
0x0000379c ldr r6, [r5] | r6 = *(r5);
0x0000379e movs r0, r0 |
0x000037a0 cmp lr, pc |
0x000037a2 movs r0, r0 |
0x000037a4 cmp ip, ip |
0x000037a6 movs r0, r0 |
0x000037a8 cmp lr, fp |
0x000037aa movs r0, r0 |
0x000037ac lsls r0, r4, 7 | r0 = r4 << 7;
0x000037ae movs r0, r0 |
0x000037b0 lsls r0, r0, 8 | r0 <<= 8;
0x000037b2 movs r0, r0 |
0x000037b4 cmp sl, r7 |
0x000037b6 movs r0, r0 |
0x000037b8 lsls r0, r1, 8 | r0 = r1 << 8;
0x000037ba movs r0, r0 |
0x000037bc lsls r4, r1, 7 | r4 = r1 << 7;
0x000037be movs r0, r0 |
0x000037c0 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x000037c2 movs r0, r0 |
0x000037c4 add sl, r3 | sl += r3;
0x000037c6 movs r0, r0 |
0x000037c8 add lr, r2 | lr += r2;
0x000037ca movs r0, r0 |
0x000037cc add sl, r2 | sl += r2;
0x000037ce movs r0, r0 |
0x000037d0 add r4, ip | r4 += ip;
0x000037d2 movs r0, r0 |
0x000037d4 add r4, sl | r4 += sl;
0x000037d6 movs r0, r0 |
0x000037d8 add r6, sb | r6 += sb;
0x000037da movs r0, r0 |
0x000037dc add r6, r8 | r6 += r8;
0x000037de movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxtables.so.12.6.0 @ 0x3c48 */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_target_revision () | void xtables_find_target_revision (int16_t arg1, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00003c48 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00003c4c mov r6, r0 | r6 = r0;
0x00003c4e ldr r5, [pc, 0x4c] |
0x00003c50 mov r7, r3 | r7 = r3;
0x00003c52 mov r4, r2 | r4 = r2;
0x00003c54 add r5, pc | r5 = 0x78f6;
| if (r2 == 0) {
0x00003c56 cbz r2, 0x3c8e | goto label_2;
| }
| label_0:
0x00003c58 ldr r3, [pc, 0x44] | r3 = *(0x3ca0);
0x00003c5a ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00003c5c ldr.w r8, [r3] | r8 = *(0x3ca0);
| do {
0x00003c60 ldrb r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00003c62 mov r0, r6 | r0 = r6;
0x00003c64 cmp r2, r7 |
| if (r2 == r7) {
0x00003c66 beq 0x3c88 | goto label_3;
| }
0x00003c68 ldr r4, [r4, 4] | r4 = *((r4 + 4));
| if (r4 == 0) {
0x00003c6a cbz r4, 0x3c82 | goto label_1;
| }
0x00003c6c ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00003c6e ldrh r5, [r4, 0x12] | r5 = *((r4 + 0x12));
0x00003c70 blx 0x2400 | r0 = strcmp (r0, r1);
| if (r0 != 0) {
0x00003c74 cbnz r0, 0x3c82 | goto label_1;
| }
0x00003c76 ldrb.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00003c7a cmp r5, 0 |
0x00003c7c it ne |
| if (r5 != 0) {
0x00003c7e cmpne r3, r5 | __asm ("cmpne r3, r5");
| }
0x00003c80 beq 0x3c60 |
| } while (r5 == 0);
| label_1:
0x00003c82 movs r0, 0 | r0 = 0;
0x00003c84 pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x00003c88 mov r0, r4 | r0 = r4;
0x00003c8a pop.w {r4, r5, r6, r7, r8, pc} |
0x00003c8c strh r0, [r6, 0xe] | *((r6 + 0xe)) = r0;
| label_2:
0x00003c8e blx 0x27e8 | r0 = fcn_000027e8 ();
0x00003c92 mov r4, r0 | r4 = r0;
0x00003c94 cmp r0, 0 |
| if (r0 != 0) {
0x00003c96 bne 0x3c58 | goto label_0;
| }
0x00003c98 b 0x3c82 | goto label_1;
| }
[*] Function fprintf used 7 times libxtables.so.12.6.0