[*] Binary protection state of libip4tc.so.0.1.0
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of libip4tc.so.0.1.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libip4tc.so.0.1.0 @ 0x3734 */
| #include <stdint.h>
|
; (fcn) sym.iptc_commit () | uint32_t iptc_commit (int32_t arg_0h, int32_t arg_8h, char * src, int32_t arg_48h, int32_t arg_74h, int32_t arg1) {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_ch;
| char * var_10h;
| int32_t var_14h;
| char * var_18h;
| int32_t var_1ch;
| int32_t var_24h;
| r0 = arg1;
0x00003734 ldr r3, [pc, 0x5ac] | r3 = *(0x3ce4);
0x00003738 ldr r2, [pc, 0x5ac] | r2 = *(0x3ce8);
0x0000373c add r3, pc, r3 | r3 = pc + r3;
0x00003740 ldr r2, [r3, r2] | r2 = *(0x3ce4);
0x00003744 ldr r3, [pc, 0x5a4] | r3 = *(0x3cec);
0x00003748 add r3, pc, r3 | r3 = pc + r3;
0x0000374c str r2, [r3] | *(r3) = r2;
0x00003750 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00003754 cmp r3, 0 |
| if (r3 == 0) {
0x00003758 beq 0x3ce0 | goto label_11;
| }
0x0000375c mov r1, r0 | r1 = r0;
0x00003760 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00003764 ldr r6, [r1, 8]! | r6 = *((r1 += 8));
0x00003768 mov r3, 0 | r3 = 0;
0x0000376c sub sp, sp, 0x24 |
0x00003770 mov sl, r6 | sl = r6;
0x00003774 mov sb, r3 | sb = r3;
| do {
0x00003778 cmp sl, r1 |
0x0000377c add r8, r3, 1 | r8 = r3 + 1;
| if (sl == r1) {
0x00003780 bne 0x37a4 |
0x00003784 cmp r8, 0 |
0x00003788 mov fp, r0 |
| if (r8 >= 0) {
0x0000378c bge 0x37f8 | goto label_12;
| }
| label_1:
0x00003790 bl 0xed4 | errno_location ();
0x00003794 mov r3, 0xc | r3 = 0xc;
0x00003798 str r3, [r0] | *(r0) = r3;
| label_2:
0x0000379c mov r0, 0 | r0 = 0;
0x000037a0 b 0x3990 | goto label_13;
| }
0x000037a4 ldr r2, [sl, 0x28] | r2 = *((sl + 0x28));
0x000037a8 mov lr, sl | lr = sl;
0x000037ac cmp r2, 0 |
0x000037b0 ldr r2, [lr, 0x54]! | r2 = *((lr += 0x54));
0x000037b4 str sb, [sl, 0x60] | *((sl + 0x60)) = sb;
| if (r2 != 0) {
0x000037b8 moveq r3, r8 | r3 = r8;
| }
| if (r2 != 0) {
0x000037bc addeq sb, sb, 0xb0 | sb += 0xb0;
| }
| label_0:
0x000037c0 cmp r2, lr |
0x000037c4 mov ip, r3 |
0x000037c8 add r3, r3, 1 | r3++;
| if (r2 != lr) {
0x000037cc streq sb, [sl, 0x68] | *((sl + 0x68)) = sb;
| }
| if (r2 != lr) {
0x000037d0 streq ip, [sl, 0x64] | *((sl + 0x64)) = ip;
| }
| if (r2 != lr) {
0x000037d4 addeq sb, sb, 0x98 | sb += 0x98;
| }
| if (r2 != lr) {
0x000037d8 ldreq sl, [sl] | sl = *(sl);
| }
0x000037dc beq 0x3778 |
| } while (r2 == lr);
0x000037e0 str ip, [r2, 0x14] | *((r2 + 0x14)) = ip;
0x000037e4 ldr ip, [r2, 0x24] | ip = *((r2 + 0x24));
0x000037e8 str sb, [r2, 0x18] | *((r2 + 0x18)) = sb;
0x000037ec add sb, sb, ip | sb += ip;
0x000037f0 ldr r2, [r2] | r2 = *(r2);
0x000037f4 b 0x37c0 | goto label_0;
| label_12:
0x000037f8 add r5, sb, 0x110 | r5 = sb + 0x110;
0x000037fc mov r0, r5 | r0 = r5;
0x00003800 bl 0xe38 | r0 = malloc (r0);
0x00003804 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x00003808 beq 0x3790 | goto label_1;
| }
0x0000380c mov r2, r5 | r2 = r5;
0x00003810 mov r1, 0 | r1 = 0;
0x00003814 bl 0xe98 | memset (r0, r1, r2);
0x00003818 ldr r7, [fp, 0x74] | r7 = *(arg_74h);
0x0000381c lsl r0, r7, 4 | r0 = r7 << 4;
0x00003820 bl 0xe38 | r0 = malloc (r0);
0x00003824 cmp r0, 0 |
0x00003828 str r0, [r4, 0x58] | *((r4 + 0x58)) = r0;
| if (r0 != 0) {
0x0000382c bne 0x3848 | goto label_14;
| }
0x00003830 bl 0xed4 | errno_location ();
0x00003834 mov r3, 0xc | r3 = 0xc;
0x00003838 str r3, [r0] | *(r0) = r3;
| do {
0x0000383c mov r0, r4 | r0 = r4;
0x00003840 bl 0xf10 | free (r0);
0x00003844 b 0x379c | goto label_2;
| label_14:
0x00003848 lsl r3, r8, 4 | r3 = r8 << 4;
0x0000384c add r3, r3, 0x28 | r3 += 0x28;
0x00003850 mov r0, r3 | r0 = r3;
0x00003854 str r3, [sp, 8] | var_8h = r3;
0x00003858 bl 0xe38 | r0 = malloc (r0);
0x0000385c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x00003860 bne 0x387c | goto label_15;
| }
0x00003864 bl 0xed4 | errno_location ();
0x00003868 mov r3, 0xc | r3 = 0xc;
0x0000386c str r3, [r0] | *(r0) = r3;
| label_10:
0x00003870 ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x00003874 bl 0xf10 | free (r0);
0x00003878 b 0x383c |
| } while (1);
| label_15:
0x0000387c ldr r2, [sp, 8] | r2 = var_8h;
0x00003880 mov r1, 0 | r1 = 0;
0x00003884 bl 0xe98 | memset (r0, r1, r2);
0x00003888 add r3, fp, 0x28 | r3 += src;
0x0000388c mov r1, r3 | r1 = r3;
0x00003890 mov r0, r4 | r0 = r4;
0x00003894 str r3, [sp, 0x10] | var_10h = r3;
0x00003898 bl 0xdf0 | strcpy (r0, r1)
0x0000389c ldr r3, [fp, 0x48] | r3 = *(arg_48h);
0x000038a0 add sb, sb, 0xb0 | sb += 0xb0;
0x000038a4 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x000038a8 ldr r3, [pc, 0x444] | r3 = *(0x3cf0);
0x000038ac str r8, [r4, 0x24] | *((r4 + 0x24)) = r8;
0x000038b0 add r3, pc, r3 | r3 = pc + r3;
0x000038b4 str sb, [r4, 0x28] | *((r4 + 0x28)) = sb;
0x000038b8 str r7, [r4, 0x54] | *((r4 + 0x54)) = r7;
0x000038bc str r3, [sp, 0x18] | var_18h = r3;
| do {
0x000038c0 add r3, r4, 0x60 | r3 = r4 + 0x60;
0x000038c4 cmp sl, r6 |
0x000038c8 str r3, [sp, 0xc] | var_ch = r3;
| if (sl == r6) {
0x000038cc bne 0x3998 |
0x000038d0 ldr r6, [r4, 0x28] | r6 = *((r4 + 0x28));
0x000038d4 ldr sb, [pc, 0x41c] | sb = "deregisterTMCloneTable";
0x000038d8 sub r6, r6, 0xb0 | r6 -= 0xb0;
0x000038dc add r6, r3, r6 | r6 = r3 + r6;
0x000038e0 ldr r3, [pc, 0x414] |
0x000038e4 mov r7, 0x40 | r7 = 0x40;
0x000038e8 add sb, pc, sb | sb = pc + sb;
0x000038ec str r3, [r6, 0x58] | *((r6 + 0x58)) = r3;
0x000038f0 mov r1, sb | r1 = sb;
0x000038f4 strh r7, [r6, 0x70] | *((r6 + 0x70)) = r7;
0x000038f8 add r0, r6, 0x72 | r0 = r6 + 0x72;
0x000038fc bl 0xdf0 | strcpy (r0, r1)
0x00003900 mov r1, sb | r1 = sb;
0x00003904 add r0, r6, 0x90 | r0 = r6 + 0x90;
0x00003908 bl 0xdf0 | strcpy (r0, r1)
0x0000390c ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00003910 mov r2, r7 | r2 = r7;
0x00003914 add r3, r3, 0x60 | r3 = 0x3d58;
0x00003918 str r3, [sp] | *(sp) = r3;
0x0000391c mov r1, 0 | r1 = 0;
0x00003920 mov r3, r4 | r3 = r4;
0x00003924 ldr r0, [fp] | r0 = *(fp);
0x00003928 bl 0xe80 | r0 = setsockopt ();
0x0000392c cmp r0, 0 |
| if (r0 < 0) {
0x00003930 blt 0x3cd4 | goto label_16;
| }
0x00003934 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00003938 mov r0, r5 | r0 = r5;
0x0000393c bl 0xdf0 | strcpy (r0, r1)
0x00003940 ldr r6, [fp, 8] | r6 = *(arg_8h);
0x00003944 str r8, [r5, 0x20] | *((r5 + 0x20)) = r8;
| label_6:
0x00003948 cmp r6, sl |
| if (r6 != sl) {
0x0000394c bne 0x3b00 | goto label_17;
| }
0x00003950 ldr r3, [sp, 8] | r3 = var_8h;
0x00003954 mov r2, 0x41 | r2 = 0x41;
0x00003958 str r3, [sp] | *(sp) = r3;
0x0000395c mov r1, 0 | r1 = 0;
0x00003960 mov r3, r5 | r3 = r5;
0x00003964 ldr r0, [fp] | r0 = *(fp);
0x00003968 bl 0xe80 | r0 = setsockopt ();
0x0000396c cmp r0, 0 |
| if (r0 < 0) {
0x00003970 blt 0x3cd4 | goto label_16;
| }
0x00003974 ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x00003978 bl 0xf10 | free (r0);
0x0000397c mov r0, r4 | r0 = r4;
0x00003980 bl 0xf10 | free (r0);
0x00003984 mov r0, r5 | r0 = r5;
0x00003988 bl 0xf10 | free (r0);
0x0000398c mov r0, 1 | r0 = 1;
| label_13:
0x00003990 add sp, sp, 0x24 |
0x00003994 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00003998 ldr sb, [r6, 0x28] | sb = *((r6 + 0x28));
0x0000399c ldr r7, [r6, 0x60] | r7 = *((r6 + 0x60));
0x000039a0 cmp sb, 0 |
| if (sb != 0) {
0x000039a4 bne 0x3a54 | goto label_18;
| }
0x000039a8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000039ac ldr r1, [pc, 0x34c] | r1 = *(0x3cfc);
0x000039b0 add r7, r3, r7 | r7 = r3 + r7;
0x000039b4 ldr r3, [pc, 0x340] | r3 = *(0x3cf8);
0x000039b8 add r1, pc, r1 | r1 = pc + r1;
0x000039bc str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x000039c0 add r0, r7, 0x72 | r0 = r7 + 0x72;
0x000039c4 bl 0xdf0 | strcpy (r0, r1)
0x000039c8 mov r3, 0x40 | r3 = 0x40;
0x000039cc strh r3, [r7, 0x70] | *((r7 + 0x70)) = r3;
0x000039d0 mov r2, 0x1e | r2 = 0x1e;
0x000039d4 add r1, r6, 8 | r1 = r6 + 8;
0x000039d8 add r0, r7, 0x90 | r0 = r7 + 0x90;
0x000039dc bl 0xe8c | strncpy (r0, r1, r2);
0x000039e0 strb sb, [r7, 0xad] | *((r7 + 0xad)) = sb;
| label_3:
0x000039e4 mov r3, r6 | r3 = r6;
0x000039e8 ldr r7, [r3, 0x54]! | r7 = *((r3 += 0x54));
0x000039ec str r3, [sp, 0x14] | var_14h = r3;
| label_4:
0x000039f0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000039f4 cmp r7, r3 |
| if (r7 != r3) {
0x000039f8 bne 0x3a68 | goto label_19;
| }
0x000039fc ldr r7, [r6, 0x68] | r7 = *((r6 + 0x68));
0x00003a00 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00003a04 ldr r1, [pc, 0x2f8] | r1 = *(0x3d00);
0x00003a08 add r7, r3, r7 | r7 = r3 + r7;
0x00003a0c ldr r3, [pc, 0x2f4] | r3 = "_";
0x00003a10 add r1, pc, r1 | r1 = pc + r1;
0x00003a14 str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x00003a18 add r0, r7, 0x72 | r0 = r7 + 0x72;
0x00003a1c bl 0xdf0 | strcpy (r0, r1)
0x00003a20 mov r3, 0x28 | r3 = 0x28;
0x00003a24 strh r3, [r7, 0x70] | *((r7 + 0x70)) = r3;
0x00003a28 ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x00003a2c add r1, r6, 0x38 | r1 = r6 + 0x38;
0x00003a30 cmp r3, 0 |
| if (r3 == 0) {
0x00003a34 ldrne r3, [r6, 0x30] | r3 = *((r6 + 0x30));
| }
| if (r3 != 0) {
0x00003a38 mvneq r3, 4 | r3 = ~4;
| }
0x00003a3c str r3, [r7, 0x90] | *((r7 + 0x90)) = r3;
0x00003a40 mov r2, 0x10 | r2 = 0x10;
0x00003a44 add r0, r7, 0x60 | r0 = r7 + 0x60;
0x00003a48 bl 0xe20 | memcpy (r0, r1, r2);
0x00003a4c ldr r6, [r6] | r6 = *(r6);
0x00003a50 b 0x38c0 |
| } while (1);
| label_18:
0x00003a54 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x00003a58 add sb, r4, sb, lsl 2 | sb = r4 + (sb << 2);
0x00003a5c str r7, [sb, 0x28] | *((sb + 0x28)) = r7;
0x00003a60 str r3, [sb, 0x3c] | *((sb + 0x3c)) = r3;
0x00003a64 b 0x39e4 | goto label_3;
| label_19:
0x00003a68 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x00003a6c add r2, r7, 0x28 | r2 = r7 + 0x28;
0x00003a70 cmp r3, 3 |
0x00003a74 str r2, [sp, 0x1c] | var_1ch = r2;
| if (r3 != 3) {
0x00003a78 bne 0x3ad8 | goto label_20;
| }
0x00003a7c ldrh sb, [r7, 0x80] | sb = *((r7 + 0x80));
0x00003a80 mov r1, 0 | r1 = 0;
0x00003a84 add sb, r2, sb | sb = r2 + sb;
0x00003a88 add r3, sb, 2 | r3 = sb + 2;
0x00003a8c mov r0, r3 | r0 = r3;
0x00003a90 mov r2, 0x1d | r2 = 0x1d;
0x00003a94 bl 0xe98 | memset (r0, r1, r2);
0x00003a98 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00003a9c bl 0xdf0 | strcpy (r0, r1)
0x00003aa0 mov r3, 0 | r3 = 0;
0x00003aa4 strb r3, [sb, 0x1f] | *((sb + 0x1f)) = r3;
0x00003aa8 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x00003aac ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x00003ab0 add r3, r3, 0xb0 | r3 += 0xb0;
0x00003ab4 str r3, [sb, 0x20] | *((sb + 0x20)) = r3;
| do {
| label_5:
0x00003ab8 ldr r0, [r7, 0x18] | r0 = *((r7 + 0x18));
0x00003abc ldr r3, [sp, 0xc] | r3 = var_ch;
0x00003ac0 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x00003ac4 add r1, r7, 0x28 | r1 = r7 + 0x28;
0x00003ac8 add r0, r3, r0 | r0 = r3 + r0;
0x00003acc bl 0xe20 | memcpy (r0, r1, r2);
0x00003ad0 ldr r7, [r7] | r7 = *(r7);
0x00003ad4 b 0x39f0 | goto label_4;
| label_20:
0x00003ad8 cmp r3, 2 |
0x00003adc bne 0x3ab8 |
| } while (r3 != 2);
0x00003ae0 ldrh r3, [r7, 0x80] | r3 = *((r7 + 0x80));
0x00003ae4 add r2, r7, 0x28 | r2 = r7 + 0x28;
0x00003ae8 add r3, r2, r3 | r3 = r2 + r3;
0x00003aec ldr r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x00003af0 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x00003af4 add r2, r2, r1 | r2 += r1;
0x00003af8 str r2, [r3, 0x20] | *((r3 + 0x20)) = r2;
0x00003afc b 0x3ab8 | goto label_5;
| label_17:
0x00003b00 ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x00003b04 cmp r3, 0 |
| if (r3 == 0) {
0x00003b08 beq 0x3b4c | goto label_7;
| }
0x00003b0c ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x00003b10 cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x3b1c */
0x00003b14 addls pc, pc, r3, lsl 2 | pc += (r3 << 2);
| }
0x00003b18 b 0x3b4c | goto label_7;
0x00003b1c b 0x3b2c | goto label_21;
0x00003b20 b 0x3b64 | goto label_22;
0x00003b24 b 0x3b88 | goto label_23;
0x00003b28 b 0x3bdc | goto label_24;
| label_21:
0x00003b2c ldr r3, [r6, 0x64] | r3 = *((r6 + 0x64));
0x00003b30 mov r0, 0 | r0 = 0;
0x00003b34 add r2, r5, r3, lsl 4 | r2 = r5 + (r3 << 4);
0x00003b38 add r3, r3, 3 | r3 += 3;
0x00003b3c mov r1, 0 | r1 = 0;
0x00003b40 lsl r3, r3, 4 | r3 <<= 4;
0x00003b44 strd r0, r1, [r2, 0x28] | __asm ("strd r0, r1, [r2, 0x28]");
0x00003b48 strd r0, r1, [r5, r3] | __asm ("strd r0, r1, [r5, r3]");
| do {
| label_7:
0x00003b4c mov r8, r6 | r8 = r6;
0x00003b50 ldr r7, [r8, 0x54]! | r7 = *((r8 += 0x54));
| label_8:
0x00003b54 cmp r7, r8 |
| if (r7 != r8) {
0x00003b58 bne 0x3bf8 | goto label_25;
| }
0x00003b5c ldr r6, [r6] | r6 = *(r6);
0x00003b60 b 0x3948 | goto label_6;
| label_22:
0x00003b64 ldr r2, [r6, 0x4c] | r2 = *((r6 + 0x4c));
0x00003b68 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x00003b6c ldr ip, [r6, 0x64] | ip = *((r6 + 0x64));
0x00003b70 add r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00003b74 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00003b78 add ip, r5, ip, lsl 4 |
0x00003b7c add ip, ip, 0x28 |
0x00003b80 stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00003b84 b 0x3b4c |
| } while (1);
| label_23:
0x00003b88 ldr r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x00003b8c ldr r2, [r4, 0x58] | r2 = *((r4 + 0x58));
0x00003b90 lsl r3, r3, 4 | r3 <<= 4;
0x00003b94 ldrd r0, r1, [r2, r3] | __asm ("ldrd r0, r1, [r2, r3]");
0x00003b98 ldr ip, [r6, 0x64] | ip = *((r6 + 0x64));
0x00003b9c add lr, r2, r3 | lr = r2 + r3;
0x00003ba0 ldrd r2, r3, [r6, 0x38] | __asm ("ldrd r2, r3, [r6, 0x38]");
0x00003ba4 add r7, r5, ip, lsl 4 | r7 = r5 + (ip << 4);
0x00003ba8 subs r0, r0, r2 | r0 -= r2;
0x00003bac sbc r1, r1, r3 | __asm ("sbc r1, r1, r3");
0x00003bb0 mov r8, r0 | r8 = r0;
0x00003bb4 mov sb, r1 | sb = r1;
0x00003bb8 strd r8, sb, [r7, 0x28] | __asm ("strd r8, sb, [r7, 0x28]");
0x00003bbc ldrd r0, r1, [lr, 8] | __asm ("ldrd r0, r1, [lr, 8]");
0x00003bc0 ldrd r2, r3, [r6, 0x40] | __asm ("ldrd r2, r3, [r6, 0x40]");
0x00003bc4 subs r0, r0, r2 | r0 -= r2;
0x00003bc8 sbc r1, r1, r3 | __asm ("sbc r1, r1, r3");
0x00003bcc mov r8, r0 | r8 = r0;
0x00003bd0 mov sb, r1 | sb = r1;
0x00003bd4 strd r8, sb, [r7, 0x30] | __asm ("strd r8, sb, [r7, 0x30]");
0x00003bd8 b 0x3b4c | goto label_7;
| label_24:
0x00003bdc ldr r0, [r6, 0x64] | r0 = *((r6 + 0x64));
0x00003be0 mov r2, 0x10 | r2 = 0x10;
0x00003be4 add r0, r5, r0, lsl 4 | r0 = r5 + (r0 << 4);
0x00003be8 add r1, r6, 0x38 | r1 = r6 + 0x38;
0x00003bec add r0, r0, 0x28 | r0 += 0x28;
0x00003bf0 bl 0xe20 | memcpy (r0, r1, r2);
0x00003bf4 b 0x3b4c | goto label_7;
| label_25:
0x00003bf8 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00003bfc cmp r3, 3 |
| if (r3 > 3) {
| /* switch table (4 cases) at 0x3c08 */
0x00003c00 addls pc, pc, r3, lsl 2 | pc += (r3 << 2);
| }
0x00003c04 b 0x3c38 | goto label_9;
0x00003c08 b 0x3c18 | goto label_26;
0x00003c0c b 0x3c40 | goto label_27;
0x00003c10 b 0x3c64 | goto label_28;
0x00003c14 b 0x3cb8 | goto label_29;
| label_26:
0x00003c18 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00003c1c mov r0, 0 | r0 = 0;
0x00003c20 add r2, r5, r3, lsl 4 | r2 = r5 + (r3 << 4);
0x00003c24 add r3, r3, 3 | r3 += 3;
0x00003c28 mov r1, 0 | r1 = 0;
0x00003c2c lsl r3, r3, 4 | r3 <<= 4;
0x00003c30 strd r0, r1, [r2, 0x28] | __asm ("strd r0, r1, [r2, 0x28]");
0x00003c34 strd r0, r1, [r5, r3] | __asm ("strd r0, r1, [r5, r3]");
| do {
| label_9:
0x00003c38 ldr r7, [r7] | r7 = *(r7);
0x00003c3c b 0x3b54 | goto label_8;
| label_27:
0x00003c40 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00003c44 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x00003c48 ldr ip, [r7, 0x14] | ip = *((r7 + 0x14));
0x00003c4c add r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00003c50 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00003c54 add ip, r5, ip, lsl 4 |
0x00003c58 add ip, ip, 0x28 |
0x00003c5c stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00003c60 b 0x3c38 |
| } while (1);
| label_28:
0x00003c64 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x00003c68 ldr r2, [r4, 0x58] | r2 = *((r4 + 0x58));
0x00003c6c lsl r3, r3, 4 | r3 <<= 4;
0x00003c70 ldrd r0, r1, [r2, r3] | __asm ("ldrd r0, r1, [r2, r3]");
0x00003c74 ldr ip, [r7, 0x14] | ip = *((r7 + 0x14));
0x00003c78 add lr, r2, r3 | lr = r2 + r3;
0x00003c7c ldrd r2, r3, [r7, 0x88] | __asm ("ldrd r2, r3, [r7, 0x88]");
0x00003c80 add sb, r5, ip, lsl 4 | sb = r5 + (ip << 4);
0x00003c84 subs r0, r0, r2 | r0 -= r2;
0x00003c88 sbc r1, r1, r3 | __asm ("sbc r1, r1, r3");
0x00003c8c mov r2, r0 | r2 = r0;
0x00003c90 mov r3, r1 | r3 = r1;
0x00003c94 strd r2, r3, [sb, 0x28] | __asm ("strd r2, r3, [sb, 0x28]");
0x00003c98 ldrd r2, r3, [r7, 0x90] | __asm ("ldrd r2, r3, [r7, 0x90]");
0x00003c9c ldrd r0, r1, [lr, 8] | __asm ("ldrd r0, r1, [lr, 8]");
0x00003ca0 subs r0, r0, r2 | r0 -= r2;
0x00003ca4 sbc r1, r1, r3 | __asm ("sbc r1, r1, r3");
0x00003ca8 mov r2, r0 | r2 = r0;
0x00003cac mov r3, r1 | r3 = r1;
0x00003cb0 strd r2, r3, [sb, 0x30] | __asm ("strd r2, r3, [sb, 0x30]");
0x00003cb4 b 0x3c38 | goto label_9;
| label_29:
0x00003cb8 ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x00003cbc mov r2, 0x10 | r2 = 0x10;
0x00003cc0 add r0, r5, r0, lsl 4 | r0 = r5 + (r0 << 4);
0x00003cc4 add r1, r7, 0x88 | r1 = r7 + 0x88;
0x00003cc8 add r0, r0, 0x28 | r0 += 0x28;
0x00003ccc bl 0xe20 | memcpy (r0, r1, r2);
0x00003cd0 b 0x3c38 | goto label_9;
| label_16:
0x00003cd4 mov r0, r5 | r0 = r5;
0x00003cd8 bl 0xf10 | free (r0);
0x00003cdc b 0x3870 | goto label_10;
| label_11:
0x00003ce0 mov r0, 1 | r0 = 1;
0x00003ce4 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libip4tc.so.0.1.0 @ 0x1e9c */
| #include <stdint.h>
|
; (fcn) sym.iptc_init () | void iptc_init (char * arg1) {
| int32_t var_0h;
| char * src;
| int32_t var_ch;
| int32_t var_10h;
| char * s2;
| int32_t var_64h;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| char * dest;
| size_t size;
| int32_t var_80h;
| int32_t var_84h;
| r0 = arg1;
0x00001e9c ldr r3, [pc, 0x4b4] | r3 = *(0x2354);
0x00001ea0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00001ea4 ldr r7, [pc, 0x4b0] | r7 = *(0x2358);
0x00001ea8 sub sp, sp, 0x84 |
0x00001eac add r3, pc, r3 | r3 = pc + r3;
0x00001eb0 str r3, [sp, 0xc] | var_ch = r3;
0x00001eb4 ldr r3, [pc, 0x4a4] | r3 = *(0x235c);
0x00001eb8 add r7, pc, r7 | r7 = pc + r7;
0x00001ebc str r0, [sp, 8] | src = r0;
0x00001ec0 ldr r3, [r7, r3] | r3 = *(0x2358);
0x00001ec4 str r3, [sp, 0x10] | var_10h = r3;
0x00001ec8 ldr r3, [pc, 0x494] | r3 = *(0x2360);
0x00001ecc add r3, pc, r3 | r3 = pc + r3;
0x00001ed0 str r3, [sp, 0x14] | s2 = r3;
| label_1:
0x00001ed4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00001ed8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00001edc ldr r0, [sp, 8] | r0 = src;
0x00001ee0 str r2, [r3] | *(r3) = r2;
0x00001ee4 bl 0xee0 | r0 = strlen (r0);
0x00001ee8 cmp r0, 0x1f |
| if (r0 < 0x1f) {
0x00001eec bls 0x1f04 | goto label_12;
| }
0x00001ef0 bl 0xed4 | errno_location ();
0x00001ef4 mov r3, 0x16 | r3 = 0x16;
0x00001ef8 str r3, [r0] | *(r0) = r3;
| do {
| label_0:
0x00001efc mov r4, 0 | r4 = 0;
0x00001f00 b 0x215c | goto label_13;
| label_12:
0x00001f04 mov r2, 0xff | r2 = 0xff;
0x00001f08 mov r1, 3 | r1 = 3;
0x00001f0c mov r0, 2 | r0 = 2;
0x00001f10 bl 0xe44 | r0 = socket (r0, r1, r2);
0x00001f14 subs r5, r0, 0 | r5 = r0 - 0;
0x00001f18 blt 0x1efc |
| } while (r5 < r0);
0x00001f1c mov r2, 1 | r2 = 1;
0x00001f20 mov r1, 2 | r1 = 2;
0x00001f24 bl 0xe14 | r0 = fcntl64 ();
0x00001f28 cmn r0, 1 |
| if (r0 == 1) {
0x00001f2c bne 0x1f60 |
0x00001f30 ldr r3, [pc, 0x430] | r3 = *(0x2364);
0x00001f34 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00001f38 ldr r4, [r3] | r4 = *(0x2364);
0x00001f3c bl 0xed4 | r0 = errno_location ();
0x00001f40 ldr r0, [r0] | r0 = *(r0);
0x00001f44 bl 0xe08 | strerror (r0);
0x00001f48 ldr r1, [pc, 0x41c] | r1 = *(0x2368);
0x00001f4c add r1, pc, r1 | r1 = pc + r1;
0x00001f50 mov r2, r0 | r2 = r0;
0x00001f54 mov r0, r4 | r0 = r4;
0x00001f58 bl 0xe68 | r0 = fprintf (r0, r1, r2);
0x00001f5c bl 0xe50 | abort ();
| }
0x00001f60 add r6, sp, 0x2c | r6 += dest;
0x00001f64 ldr r1, [sp, 8] | r1 = src;
0x00001f68 mov sb, 0x54 | sb = 0x54;
0x00001f6c mov r0, r6 | r0 = r6;
0x00001f70 str sb, [sp, 0x20] | var_20h = sb;
0x00001f74 bl 0xdf0 | strcpy (r0, r1)
0x00001f78 add r3, sp, 0x20 | r3 += var_20h;
0x00001f7c str r3, [sp] | *(sp) = r3;
0x00001f80 mov r2, 0x40 | r2 = 0x40;
0x00001f84 mov r3, r6 | r3 = r6;
0x00001f88 mov r1, 0 | r1 = 0;
0x00001f8c mov r0, r5 | r0 = r5;
0x00001f90 bl 0xeb0 | r0 = getsockopt ();
0x00001f94 cmp r0, 0 |
0x00001f98 bge 0x1fa8 |
| while (1) {
| label_2:
0x00001f9c mov r0, r5 | r0 = r5;
0x00001fa0 bl 0xef8 | close (r0);
0x00001fa4 b 0x1efc | goto label_0;
0x00001fa8 mov r0, 0x80 | r0 = 0x80;
0x00001fac bl 0xe38 | r0 = malloc (r0);
0x00001fb0 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x00001fb4 bne 0x1fc8 | goto label_14;
| }
0x00001fb8 bl 0xed4 | errno_location ();
0x00001fbc mov r3, 0xc | r3 = 0xc;
0x00001fc0 str r3, [r0] | *(r0) = r3;
0x00001fc4 b 0x1f9c |
| }
| label_14:
0x00001fc8 mov r2, 0x7c | r2 = 0x7c;
0x00001fcc mov r1, 0 | r1 = 0;
0x00001fd0 add fp, r4, 8 |
0x00001fd4 add r8, r4, 0x28 | r8 = r4 + 0x28;
0x00001fd8 bl 0xe98 | memset (r0, r1, r2);
0x00001fdc mov r1, r6 | r1 = r6;
0x00001fe0 str fp, [r4, 8] | *((r4 + 8)) = fp;
0x00001fe4 str fp, [r4, 0xc] | *((r4 + 0xc)) = fp;
0x00001fe8 mov r0, r8 | r0 = r8;
0x00001fec bl 0xdf0 | strcpy (r0, r1)
0x00001ff0 ldr r0, [sp, 0x7c] | r0 = size;
0x00001ff4 add r0, r0, 0x28 | r0 += 0x28;
0x00001ff8 bl 0xe38 | r0 = malloc (r0);
0x00001ffc cmp r0, 0 |
0x00002000 mov sl, r0 | sl = r0;
0x00002004 str r0, [r4, 0x7c] | *((r4 + 0x7c)) = r0;
| if (r0 == 0) {
0x00002008 beq 0x2078 | goto label_15;
| }
0x0000200c mov r1, r6 | r1 = r6;
0x00002010 bl 0xdf0 | strcpy (r0, r1)
0x00002014 mov r2, sb | r2 = sb;
0x00002018 mov r1, r6 | r1 = r6;
0x0000201c str r5, [r4] | *(r4) = r5;
0x00002020 mov r0, r8 | r0 = r8;
0x00002024 bl 0xe20 | memcpy (r0, r1, r2);
0x00002028 ldr r3, [r4, 0x78] | r3 = *((r4 + 0x78));
0x0000202c add r2, sp, 0x80 | r2 += var_80h;
0x00002030 str r3, [sl, 0x20] | *((sl + 0x20)) = r3;
0x00002034 add r3, r3, 0x28 | r3 += 0x28;
0x00002038 str r3, [r2, -0x64]! | *((r2 -= 0x64)) = r3;
0x0000203c mov r1, 0 | r1 = 0;
0x00002040 str r2, [sp] | *(sp) = r2;
0x00002044 mov r3, sl | r3 = sl;
0x00002048 mov r2, 0x41 | r2 = 0x41;
0x0000204c mov r0, r5 | r0 = r5;
0x00002050 bl 0xeb0 | r0 = getsockopt ();
0x00002054 cmp r0, 0 |
| if (r0 >= 0) {
0x00002058 bge 0x2084 | goto label_16;
| }
| label_3:
0x0000205c mov r0, r4 | r0 = r4;
0x00002060 bl 0xe5c | fcn_00000e5c ();
0x00002064 bl 0xed4 | r0 = errno_location ();
0x00002068 ldr r3, [r0] | r3 = *(r0);
0x0000206c cmp r3, 0xb |
| if (r3 == 0xb) {
0x00002070 beq 0x1ed4 | goto label_1;
| }
0x00002074 b 0x1efc | goto label_0;
| label_15:
0x00002078 mov r0, r4 | r0 = r4;
0x0000207c bl 0xf10 | free (r0);
0x00002080 b 0x1f9c | goto label_2;
| label_16:
0x00002084 ldr sb, [pc, 0x2e4] | sb = *(0x00002370);
0x00002088 mov r6, 0 | r6 = 0;
0x0000208c mov r3, 1 | r3 = 1;
0x00002090 add sb, pc, sb | sb = pc + sb;
0x00002094 str r6, [sp, 0x24] | var_24h = r6;
0x00002098 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
| do {
0x0000209c ldr r5, [r4, 0x7c] | r5 = *((r4 + 0x7c));
0x000020a0 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000020a4 cmp r6, r2 |
| if (r6 >= r2) {
0x000020a8 bhs 0x2134 | goto label_8;
| }
0x000020ac add r5, r5, 0x28 | r5 += 0x28;
0x000020b0 add r8, r5, r6 | r8 = r5 + r6;
0x000020b4 ldrh r3, [r8, 0x5a] | r3 = *((r8 + 0x5a));
0x000020b8 add r3, r3, r6 | r3 += r6;
0x000020bc cmp r2, r3 |
| if (r2 != r3) {
0x000020c0 bne 0x20f0 | goto label_17;
| }
0x000020c4 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000020c8 add r0, r4, 0x10 | r0 = r4 + 0x10;
0x000020cc bl 0x1b08 | fcn_00001b08 (r0, r1);
0x000020d0 mov r3, 0 | r3 = 0;
0x000020d4 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| label_4:
0x000020d8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000020dc add r3, r3, 1 | r3++;
0x000020e0 str r3, [sp, 0x24] | var_24h = r3;
0x000020e4 ldrh r3, [r8, 0x5a] | r3 = *((r8 + 0x5a));
0x000020e8 add r6, r6, r3 | r6 += r3;
0x000020ec b 0x209c |
| } while (1);
| label_17:
0x000020f0 ldrh sl, [r8, 0x58] | sl = *((r8 + 0x58));
0x000020f4 ldr r1, [sp, 0x14] | r1 = s2;
0x000020f8 add sl, r8, sl | sl = r8 + sl;
0x000020fc add r0, sl, 2 | r0 = sl + 2;
0x00002100 bl 0xea4 | r0 = strcmp (r0, r1);
0x00002104 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 == r0) {
0x00002108 ldrne r1, [r4, 0x48] | r1 = *((r4 + 0x48));
| }
| if (r1 == r0) {
0x0000210c movne r3, 0 | r3 = 0;
| }
| if (r1 == r0) {
0x00002110 movne r0, 1 | r0 = 1;
| }
| if (r1 != r0) {
0x00002114 bne 0x2188 | goto label_6;
| }
0x00002118 add r0, sl, 0x20 | r0 = sl + 0x20;
0x0000211c bl 0x1530 | r0 = fcn_00001530 (r0, r1);
0x00002120 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 != r0) {
0x00002124 bne 0x2168 | goto label_18;
| }
| label_5:
0x00002128 bl 0xed4 | errno_location ();
0x0000212c mvn r3, 0xb | r3 = ~0xb;
| label_7:
0x00002130 str r3, [r0] | *(r0) = r3;
| label_8:
0x00002134 mov r0, r4 | r0 = r4;
0x00002138 bl 0x127c | r0 = fcn_0000127c (r0);
0x0000213c cmp r0, 0 |
| if (r0 < 0) {
0x00002140 blt 0x205c | goto label_3;
| }
0x00002144 mov r0, r4 | r0 = r4;
0x00002148 bl 0x10ac | fcn_000010ac (r0);
0x0000214c ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x00002150 add sl, sp, 0x28 | sl += var_28h;
| label_9:
0x00002154 cmp fp, r6 |
| if (fp != r6) {
0x00002158 bne 0x22b0 | goto label_19;
| }
| label_13:
0x0000215c mov r0, r4 | r0 = r4;
0x00002160 add sp, sp, 0x84 |
0x00002164 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x00002168 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0000216c mov r2, r6 | r2 = r6;
0x00002170 add r3, r3, 1 | r3++;
0x00002174 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00002178 mov r0, r4 | r0 = r4;
0x0000217c add r3, sp, 0x24 | r3 += var_24h;
0x00002180 bl 0x1e10 | fcn_00001e10 (r0, r1);
0x00002184 b 0x20d8 | goto label_4;
| label_6:
0x00002188 ands r2, r1, r0, lsl r3 | r2 = r1 & (r0 << r3);
0x0000218c add sl, r3, 1 | sl = r3 + 1;
| if (r2 == r1) {
0x00002190 beq 0x21d4 | goto label_20;
| }
0x00002194 add r2, r4, r3, lsl 2 | r2 = r4 + (r3 << 2);
0x00002198 ldr r2, [r2, 0x4c] | r2 = *((r2 + 0x4c));
0x0000219c add r2, r5, r2 | r2 = r5 + r2;
0x000021a0 cmp r8, r2 |
| if (r8 != r2) {
0x000021a4 bne 0x21d4 | goto label_20;
| }
0x000021a8 mov r1, sl | r1 = sl;
0x000021ac ldr r0, [sb, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((sb + offset_0));
0x000021b0 bl 0x1530 | r0 = fcn_00001530 (r0, r1);
0x000021b4 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 == r0) {
0x000021b8 beq 0x2128 | goto label_5;
| }
0x000021bc str sl, [r1, 0x28] | *((r1 + 0x28)) = sl;
0x000021c0 add r3, sp, 0x24 | r3 += var_24h;
0x000021c4 mov r2, r6 | r2 = r6;
0x000021c8 mov r0, r4 | r0 = r4;
0x000021cc bl 0x1e10 | fcn_00001e10 (r0, r1);
0x000021d0 b 0x21e0 | goto label_21;
| label_20:
0x000021d4 cmp sl, 5 |
0x000021d8 mov r3, sl | r3 = sl;
| if (sl != 5) {
0x000021dc bne 0x2188 | goto label_6;
| }
| label_21:
0x000021e0 ldrh r1, [r8, 0x5a] | r1 = *((r8 + 0x5a));
0x000021e4 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000021e8 bl 0x1244 | r0 = fcn_00001244 (r0, r1);
0x000021ec subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x000021f0 bne 0x2200 |
0x000021f4 bl 0xed4 | errno_location ();
0x000021f8 mov r3, 0xc | r3 = 0xc;
0x000021fc b 0x2130 | goto label_7;
| }
0x00002200 ldr sl, [sp, 0x24] | sl = var_24h;
0x00002204 ldrh r2, [r8, 0x5a] | r2 = *((r8 + 0x5a));
0x00002208 mov r1, r8 | r1 = r8;
0x0000220c str sl, [r5, 0x14] | *((r5 + 0x14)) = sl;
0x00002210 str r6, [r5, 0x18] | *((r5 + 0x18)) = r6;
0x00002214 add r0, r5, 0x28 | r0 = r5 + 0x28;
0x00002218 bl 0xe20 | memcpy (r0, r1, r2);
0x0000221c ldrh r0, [r8, 0x58] | r0 = *((r8 + 0x58));
0x00002220 mov r3, 1 | r3 = 1;
0x00002224 add r2, r8, r0 | r2 = r8 + r0;
0x00002228 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0000222c str sl, [r5, 0x10] | *((r5 + 0x10)) = sl;
0x00002230 ldrb r1, [r2, 2] | r1 = *((r2 + 2));
0x00002234 cmp r1, 0 |
| if (r1 == 0) {
0x00002238 bne 0x2284 |
0x0000223c ldrh r3, [r8, r0] | r3 = *((r8 + r0));
0x00002240 cmp r3, 0x28 |
| if (r3 != 0x28) {
0x00002244 beq 0x2260 |
0x00002248 bl 0xed4 | errno_location ();
0x0000224c mov r3, 0x16 | r3 = 0x16;
0x00002250 str r3, [r0] | *(r0) = r3;
0x00002254 mov r0, r5 | r0 = r5;
0x00002258 bl 0xf10 | free (r0);
0x0000225c b 0x2134 | goto label_8;
| }
0x00002260 ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x00002264 cmp r2, 0 |
| if (r2 >= 0) {
0x00002268 strlt r1, [r5, 0x1c] | *((r5 + 0x1c)) = r1;
| }
| if (r2 < 0) {
0x0000226c blt 0x2288 | goto label_22;
| }
0x00002270 ldrh r3, [r8, 0x5a] | r3 = *((r8 + 0x5a));
0x00002274 add r3, r3, r6 | r3 += r6;
0x00002278 cmp r2, r3 |
| if (r2 != r3) {
0x0000227c moveq r3, 2 | r3 = 2;
| }
| if (r2 != r3) {
0x00002280 movne r3, 3 | r3 = 3;
| goto label_23;
| }
| }
| label_23:
0x00002284 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
| label_22:
0x00002288 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000228c ldr r2, [r3, 0x58] | r2 = *((r3 + 0x58));
0x00002290 add r1, r3, 0x54 | r1 = r3 + 0x54;
0x00002294 str r5, [r3, 0x58] | *((r3 + 0x58)) = r5;
0x00002298 stm r5, {r1, r2} | *(r5) = r1;
| *((r5 + 4)) = r2;
0x0000229c str r5, [r2] | *(r2) = r5;
0x000022a0 ldr r2, [r3, 0x50] | r2 = *((r3 + 0x50));
0x000022a4 add r2, r2, 1 | r2++;
0x000022a8 str r2, [r3, 0x50] | *((r3 + 0x50)) = r2;
0x000022ac b 0x20d8 | goto label_4;
| label_19:
0x000022b0 mov r8, r6 | r8 = r6;
0x000022b4 ldr r5, [r8, 0x54]! | r5 = *((r8 += 0x54));
| label_11:
0x000022b8 cmp r5, r8 |
| if (r5 == r8) {
0x000022bc ldreq r6, [r6] | r6 = *(r6);
| goto label_24;
| }
| if (r5 == r8) {
| label_24:
0x000022c0 beq 0x2154 | goto label_9;
| }
0x000022c4 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000022c8 cmp r3, 3 |
| if (r3 != 3) {
0x000022cc bne 0x2350 | goto label_25;
| }
0x000022d0 ldrh r3, [r5, 0x80] | r3 = *((r5 + 0x80));
0x000022d4 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000022d8 add r3, r5, r3 | r3 = r5 + r3;
0x000022dc cmp fp, r0 |
0x000022e0 ldr sb, [r3, 0x48] | sb = *((r3 + 0x48));
| if (fp == r0) {
0x000022e4 beq 0x205c | goto label_3;
| }
0x000022e8 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000022ec cmp r3, 0 |
| if (r3 != 0) {
0x000022f0 beq 0x2310 |
0x000022f4 mov r3, 1 | r3 = 1;
0x000022f8 str r3, [sp] | *(sp) = r3;
0x000022fc mov r2, sl | r2 = sl;
0x00002300 mov r3, r4 | r3 = r4;
0x00002304 mov r1, sb | r1 = sb;
0x00002308 mov r0, 0 | r0 = 0;
0x0000230c bl 0x140c | fcn_0000140c (r0, r1, r2);
| }
0x00002310 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00002314 ldr r3, [r2] | r3 = *(r2);
| label_10:
0x00002318 cmp r2, r3 |
| if (r2 == r3) {
0x0000231c beq 0x205c | goto label_3;
| }
0x00002320 ldr r1, [r3, 0x60] | r1 = *((r3 + 0x60));
0x00002324 cmp sb, r1 |
| if (sb > r1) {
0x00002328 blo 0x2338 |
0x0000232c ldr r1, [r3, 0x68] | r1 = *((r3 + 0x68));
0x00002330 cmp sb, r1 |
| if (sb < r1) {
0x00002334 bls 0x2340 | goto label_26;
| }
| }
0x00002338 ldr r3, [r3] | r3 = *(r3);
0x0000233c b 0x2318 | goto label_10;
| label_26:
0x00002340 ldr r2, [r3, 0x2c] | r2 = *((r3 + 0x2c));
0x00002344 str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x00002348 add r2, r2, 1 | r2++;
0x0000234c str r2, [r3, 0x2c] | *((r3 + 0x2c)) = r2;
| label_25:
0x00002350 ldr r5, [r5] | r5 = *(r5);
0x00002354 b 0x22b8 | goto label_11;
| }
[*] Function strcpy used 11 times libip4tc.so.0.1.0