[*] Binary protection state of libxtables.so.12.2.0
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function system tear down of libxtables.so.12.2.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/libxtables.so.12.2.0 @ 0x4aa0 */
| #include <stdint.h>
|
; (fcn) fcn.00004aa0 () | void fcn_00004aa0 (char * arg1, int32_t arg2) {
| int32_t var_4h;
| void * s;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x00004aa0 push {r4, r5, r6, r7, lr} |
0x00004aa4 sub sp, sp, 0x2c |
0x00004aa8 mov r7, r0 | r7 = r0;
0x00004aac mov r6, r1 | r6 = r1;
0x00004ab0 bl 0x2220 | r0 = fcn_00002220 ();
0x00004ab4 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x00004ab8 bne 0x4af4 |
0x00004abc mov r0, r7 | r0 = r7;
0x00004ac0 bl 0x2598 | r0 = getnetbyname ();
0x00004ac4 cmp r0, 0 |
| if (r0 == 0) {
0x00004ac8 beq 0x4b20 | goto label_3;
| }
0x00004acc ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00004ad0 cmp r3, 2 |
| if (r3 != 2) {
0x00004ad4 bne 0x4b20 | goto label_3;
| }
0x00004ad8 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00004adc bl 0x8a00 | fcn_00008a00 (r0);
0x00004ae0 ldr r4, [pc, 0xf0] |
0x00004ae4 add r4, pc, r4 | r4 = pc + r4;
0x00004ae8 add r4, r4, 0x430 | r4 = 0x5004;
0x00004aec str r0, [r4, 8] | *((r4 + 8)) = r0;
0x00004af0 add r4, r4, 8 | r4 += 8;
| }
0x00004af4 mov r0, 4 | r0 = 4;
0x00004af8 bl 0x2400 | fcn_00002400 ();
0x00004afc mov r2, 4 | r2 = 4;
0x00004b00 mov r1, r4 | r1 = r4;
0x00004b04 mov r5, r0 | r5 = r0;
0x00004b08 bl 0x22a4 | memcpy (r0, r1, r2);
0x00004b0c mov r3, 1 | r3 = 1;
0x00004b10 str r3, [r6] | *(r6) = r3;
| label_0:
0x00004b14 mov r0, r5 | r0 = r5;
0x00004b18 add sp, sp, 0x2c |
0x00004b1c pop {r4, r5, r6, r7, pc} |
| label_3:
0x00004b20 add r4, sp, 8 | r4 += s;
0x00004b24 mov r2, 0x20 | r2 = 0x20;
0x00004b28 mov r1, 0 | r1 = 0;
0x00004b2c mov r0, r4 | r0 = r4;
0x00004b30 bl 0x24cc | memset (r0, r1, r2);
0x00004b34 mov r3, 2 | r3 = 2;
0x00004b38 str r3, [sp, 0xc] | var_ch = r3;
0x00004b3c mov r1, 0 | r1 = 0;
0x00004b40 mov r3, 3 | r3 = 3;
0x00004b44 str r3, [sp, 0x10] | var_10h = r3;
0x00004b48 str r1, [r6] | *(r6) = r1;
0x00004b4c add r3, sp, 4 | r3 += var_4h;
0x00004b50 mov r2, r4 | r2 = r4;
0x00004b54 mov r0, r7 | r0 = r7;
0x00004b58 bl 0x2574 | r0 = getaddrinfo ();
0x00004b5c cmp r0, 0 |
| if (r0 != 0) {
0x00004b60 ldreq r3, [sp, 4] | r3 = var_4h;
| }
| if (r0 == 0) {
0x00004b64 beq 0x4b7c | goto label_4;
| }
| label_1:
0x00004b68 mov r0, r7 | r0 = r7;
0x00004b6c bl 0x26b0 | entry0 (r0);
| do {
0x00004b70 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00004b74 add r0, r0, 1 | r0++;
0x00004b78 str r0, [r6] | *(r6) = r0;
| label_4:
0x00004b7c cmp r3, 0 |
0x00004b80 ldr r0, [r6] | r0 = *(r6);
0x00004b84 bne 0x4b70 |
| } while (r3 != 0);
0x00004b88 mov r1, 4 | r1 = 4;
0x00004b8c bl 0x225c | fcn_0000225c ();
0x00004b90 ldr r4, [sp, 4] | r4 = var_4h;
0x00004b94 mov r5, r0 | r5 = r0;
0x00004b98 mov r3, r0 | r3 = r0;
| label_2:
0x00004b9c cmp r4, 0 |
| if (r4 != 0) {
0x00004ba0 bne 0x4bb8 | goto label_5;
| }
0x00004ba4 ldr r0, [sp, 4] | r0 = var_4h;
0x00004ba8 bl 0x2364 | freeaddrinfo ();
0x00004bac cmp r5, 0 |
| if (r5 != 0) {
0x00004bb0 bne 0x4b14 | goto label_0;
| }
0x00004bb4 b 0x4b68 | goto label_1;
| label_5:
0x00004bb8 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00004bbc mov r2, 4 | r2 = 4;
0x00004bc0 mov r0, r3 | r0 = r3;
0x00004bc4 add r1, r1, r2 | r1 += r2;
0x00004bc8 bl 0x22a4 | memcpy (r0, r1, r2);
0x00004bcc ldr r4, [r4, 0x1c] | r4 = *((r4 + 0x1c));
0x00004bd0 add r3, r0, 4 | r3 = r0 + 4;
0x00004bd4 b 0x4b9c | goto label_2;
| }
; 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/libxtables.so.12.2.0 @ 0x541c */
| #include <stdint.h>
|
; (fcn) fcn.0000541c () | void fcn_0000541c (char * arg1, int32_t arg2) {
| int32_t var_4h;
| void * s;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x0000541c push {r4, r5, r6, r7, lr} |
0x00005420 sub sp, sp, 0x2c |
0x00005424 mov r7, r0 | r7 = r0;
0x00005428 mov r5, r1 | r5 = r1;
0x0000542c bl 0x2358 | r0 = fcn_00002358 ();
0x00005430 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 != r0) {
0x00005434 beq 0x5464 |
0x00005438 mov r0, 0x10 | r0 = 0x10;
0x0000543c bl 0x2400 | fcn_00002400 ();
0x00005440 mov r2, 0x10 | r2 = 0x10;
0x00005444 mov r1, r6 | r1 = r6;
0x00005448 mov r4, r0 | r4 = r0;
0x0000544c bl 0x22a4 | memcpy (r0, r1, r2);
0x00005450 mov r3, 1 | r3 = 1;
0x00005454 str r3, [r5] | *(r5) = r3;
| label_0:
0x00005458 mov r0, r4 | r0 = r4;
0x0000545c add sp, sp, 0x2c |
0x00005460 pop {r4, r5, r6, r7, pc} |
| }
0x00005464 add r4, sp, 8 | r4 += s;
0x00005468 mov r2, 0x20 | r2 = 0x20;
0x0000546c mov r1, r6 | r1 = r6;
0x00005470 mov r0, r4 | r0 = r4;
0x00005474 bl 0x24cc | memset (r0, r1, r2);
0x00005478 mov r3, 0xa | r3 = 0xa;
0x0000547c str r3, [sp, 0xc] | var_ch = r3;
0x00005480 mov r3, 3 | r3 = 3;
0x00005484 str r3, [sp, 0x10] | var_10h = r3;
0x00005488 str r6, [r5] | *(r5) = r6;
0x0000548c add r3, sp, 4 | r3 += var_4h;
0x00005490 mov r2, r4 | r2 = r4;
0x00005494 mov r1, r6 | r1 = r6;
0x00005498 mov r0, r7 | r0 = r7;
0x0000549c bl 0x2574 | r0 = getaddrinfo ();
0x000054a0 cmp r0, 0 |
| if (r0 != 0) {
0x000054a4 ldreq r3, [sp, 4] | r3 = var_4h;
| }
| if (r0 == 0) {
0x000054a8 beq 0x54c0 | goto label_3;
| }
| label_1:
0x000054ac mov r0, r7 | r0 = r7;
0x000054b0 bl 0x26b0 | entry0 (r0);
| do {
0x000054b4 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000054b8 add r0, r0, 1 | r0++;
0x000054bc str r0, [r5] | *(r5) = r0;
| label_3:
0x000054c0 cmp r3, 0 |
0x000054c4 ldr r0, [r5] | r0 = *(r5);
0x000054c8 bne 0x54b4 |
| } while (r3 != 0);
0x000054cc mov r1, 0x10 | r1 = 0x10;
0x000054d0 bl 0x225c | fcn_0000225c ();
0x000054d4 ldr r5, [sp, 4] | r5 = var_4h;
0x000054d8 mov r4, r0 | r4 = r0;
0x000054dc mov r3, r0 | r3 = r0;
| label_2:
0x000054e0 cmp r5, 0 |
| if (r5 != 0) {
0x000054e4 bne 0x54fc | goto label_4;
| }
0x000054e8 ldr r0, [sp, 4] | r0 = var_4h;
0x000054ec bl 0x2364 | freeaddrinfo ();
0x000054f0 cmp r4, 0 |
| if (r4 != 0) {
0x000054f4 bne 0x5458 | goto label_0;
| }
0x000054f8 b 0x54ac | goto label_1;
| label_4:
0x000054fc ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x00005500 mov r0, r3 | r0 = r3;
0x00005504 mov r2, 0x10 | r2 = 0x10;
0x00005508 add r1, r1, 8 | r1 += 8;
0x0000550c bl 0x22a4 | memcpy (r0, r1, r2);
0x00005510 ldr r5, [r5, 0x1c] | r5 = *((r5 + 0x1c));
0x00005514 add r3, r0, 0x10 | r3 = r0 + 0x10;
0x00005518 b 0x54e0 | goto label_2;
| }
; 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/libxtables.so.12.2.0 @ 0x6588 */
| #include <stdint.h>
|
; (fcn) fcn.00006588 () | void fcn_00006588 (int32_t arg1) {
| r0 = arg1;
0x00006588 push {r4, r5, r6, lr} |
0x0000658c ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x00006590 add r5, r0, 0x28 | r5 = r0 + 0x28;
0x00006594 mov r4, r0 | r4 = r0;
0x00006598 bl 0x642c | fcn_0000642c (r0);
0x0000659c mov r2, 0x10 | r2 = 0x10;
0x000065a0 mov r1, 0xff | r1 = 0xff;
0x000065a4 mov r0, r5 | r0 = r5;
0x000065a8 bl 0x24cc | memset (r0, r1, r2);
0x000065ac ldrb r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000065b0 cmp r3, 0 |
| if (r3 != 0) {
0x000065b4 bne 0x6624 | goto label_2;
| }
0x000065b8 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x000065bc str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x000065c0 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000065c4 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| do {
| label_0:
0x000065c8 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x000065cc bl 0x8a00 | fcn_00008a00 (r0);
0x000065d0 str r0, [r4, 0x28] | *((r4 + 0x28)) = r0;
0x000065d4 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000065d8 bl 0x8a00 | fcn_00008a00 (r0);
0x000065dc str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
0x000065e0 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x000065e4 bl 0x8a00 | fcn_00008a00 (r0);
0x000065e8 str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x000065ec ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x000065f0 bl 0x8a00 | fcn_00008a00 (r0);
0x000065f4 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x000065f8 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000065fc tst r3, 8 |
0x00006600 popeq {r4, r5, r6, pc} |
0x00006604 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00006608 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000660c ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00006610 mov r1, r5 | r1 = r5;
0x00006614 mov r2, 0x10 | r2 = 0x10;
0x00006618 add r0, r0, r3 | r0 += r3;
0x0000661c pop {r4, r5, r6, lr} |
0x00006620 b 0x22a4 | void (*0x22a4)() ();
| label_2:
0x00006624 cmp r3, 0x20 |
| if (r3 > 0x20) {
0x00006628 bhi 0x6650 | goto label_3;
| }
0x0000662c ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00006630 rsb r3, r3, 0x20 | r3 = 0x20 - r3;
0x00006634 lsl r3, r2, r3 | r3 = r2 << r3;
0x00006638 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x0000663c mov r3, 0 | r3 = 0;
0x00006640 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x00006644 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00006648 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0000664c b 0x65c8 |
| } while (1);
| label_3:
0x00006650 cmp r3, 0x40 |
| if (r3 <= 0x40) {
0x00006654 bhi 0x6678 |
0x00006658 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0000665c rsb r3, r3, 0x40 | r3 = 0x40 - r3;
0x00006660 lsl r3, r2, r3 | r3 = r2 << r3;
0x00006664 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x00006668 mov r3, 0 | r3 = 0;
0x0000666c str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x00006670 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00006674 b 0x65c8 | goto label_0;
| }
0x00006678 cmp r3, 0x60 |
| if (r3 <= 0x60) {
0x0000667c bhi 0x669c |
0x00006680 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x00006684 rsb r3, r3, 0x60 | r3 = 0x60 - r3;
0x00006688 lsl r3, r2, r3 | r3 = r2 << r3;
0x0000668c str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00006690 mov r3, 0 | r3 = 0;
| label_1:
0x00006694 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x00006698 b 0x65c8 | goto label_0;
| }
0x0000669c cmp r3, 0x80 |
| if (r3 > 0x80) {
0x000066a0 bhi 0x65c8 | goto label_0;
| }
0x000066a4 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x000066a8 rsb r3, r3, 0x80 | r3 = 0x80 - r3;
0x000066ac lsl r3, r2, r3 | r3 = r2 << r3;
0x000066b0 b 0x6694 | goto label_1;
| }
; 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/libxtables.so.12.2.0 @ 0x3afc */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_match () | void xtables_find_match (int32_t arg_0h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x00003afc push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00003b00 ldr r7, [pc, 0x42c] | r7 = *(0x3f30);
0x00003b04 sub sp, sp, 0x1c |
0x00003b08 mov r6, r0 | r6 = r0;
0x00003b0c mov fp, r1 |
0x00003b10 mov sb, r2 | sb = r2;
0x00003b14 bl 0x2610 | strlen (r0);
0x00003b18 add r7, pc, r7 | r7 = pc + r7;
0x00003b1c cmp r0, 0x1c |
| if (r0 < 0x1c) {
0x00003b20 bls 0x3b4c | goto label_7;
| }
0x00003b24 ldr r3, [pc, 0x40c] |
0x00003b28 ldr r1, [pc, 0x40c] | r1 = *(0x3f38);
0x00003b2c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003b30 mov r2, r6 | r2 = r6;
0x00003b34 ldr r3, [r3] | r3 = *(0x3f34);
0x00003b38 add r1, pc, r1 | r1 = pc + r1;
0x00003b3c ldr r4, [r3, 0x14] | r4 = *(0x3f48);
0x00003b40 mov r3, 0x1c | r3 = 0x1c;
| do {
0x00003b44 mov r0, 2 | r0 = 2;
0x00003b48 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_7:
0x00003b4c ldr r1, [pc, 0x3ec] | r1 = *(0x3f3c);
0x00003b50 mov r0, r6 | r0 = r6;
0x00003b54 add r1, pc, r1 | r1 = pc + r1;
0x00003b58 bl 0x2508 | r0 = strcmp (r0, r1);
0x00003b5c cmp r0, 0 |
| if (r0 == 0) {
0x00003b60 beq 0x3c9c | goto label_8;
| }
0x00003b64 ldr r1, [pc, 0x3d8] | r1 = *(0x3f40);
0x00003b68 mov r0, r6 | r0 = r6;
0x00003b6c add r1, pc, r1 | r1 = pc + r1;
0x00003b70 bl 0x2508 | r0 = strcmp (r0, r1);
0x00003b74 cmp r0, 0 |
| if (r0 == 0) {
0x00003b78 beq 0x3ca8 | goto label_9;
| }
0x00003b7c ldr r4, [pc, 0x3c4] | r4 = *(0x3f44);
0x00003b80 mov r0, r6 | r0 = r6;
0x00003b84 add r4, pc, r4 | r4 = pc + r4;
0x00003b88 mov r1, r4 | r1 = r4;
0x00003b8c bl 0x2508 | r0 = strcmp (r0, r1);
0x00003b90 cmp r0, 0 |
| if (r0 != 0) {
0x00003b94 moveq r6, r4 | r6 = r4;
| }
| label_0:
0x00003b98 ldr r3, [pc, 0x3ac] | r3 = *(0x3f48);
0x00003b9c ldr r8, [r7, r3] | r8 = *((r7 + r3));
| label_1:
0x00003ba0 ldr r5, [r8] | r5 = *(r8);
0x00003ba4 cmp r5, 0 |
| if (r5 != 0) {
0x00003ba8 bne 0x3cb4 | goto label_10;
| }
0x00003bac ldr r3, [pc, 0x39c] | r3 = *(0x3f4c);
0x00003bb0 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003bb4 ldr r4, [r3] | r4 = *(0x3f4c);
| label_5:
0x00003bb8 cmp r4, 0 |
| if (r4 != 0) {
0x00003bbc beq 0x3c10 |
0x00003bc0 ldrh r2, [r4, 0x12] | r2 = *((r4 + 0x12));
0x00003bc4 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00003bc8 mov r0, r6 | r0 = r6;
0x00003bcc bl 0x2974 | r0 = fcn_00002974 (r0, r1);
0x00003bd0 cmp r0, 0 |
| if (r0 == 0) {
0x00003bd4 beq 0x3eb4 | goto label_11;
| }
0x00003bd8 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x00003bdc cmp r3, 0 |
| if (r3 == 0) {
0x00003be0 beq 0x3c10 | goto label_12;
| }
0x00003be4 mov r0, 0x64 | r0 = 0x64;
0x00003be8 bl 0x2400 | fcn_00002400 ();
0x00003bec mov r2, 0x64 | r2 = 0x64;
0x00003bf0 mov r1, r4 | r1 = r4;
0x00003bf4 bl 0x22a4 | memcpy (r0, r1, r2);
0x00003bf8 mov r2, 0 | r2 = 0;
0x00003bfc mov r3, r0 | r3 = r0;
0x00003c00 mov r4, r0 | r4 = r0;
0x00003c04 str r2, [r0, 0x50] | *((r0 + 0x50)) = r2;
0x00003c08 str r2, [r0, 0x5c] | *((r0 + 0x5c)) = r2;
0x00003c0c str r0, [r3, 4] | *((r3 + 4)) = r0;
| }
| label_12:
0x00003c10 adds r3, fp, 0 | r3 += arg_0h;
| if (r3 == arg_0h) {
0x00003c14 movne r3, 1 | r3 = 1;
| }
0x00003c18 cmp r4, 0 |
| if (r4 == 0) {
0x00003c1c movne r3, 0 | r3 = 0;
| }
0x00003c20 cmp r3, 0 |
| if (r3 == 0) {
0x00003c24 beq 0x3ebc | goto label_13;
| }
0x00003c28 cmp fp, 1 |
| if (fp != 1) {
0x00003c2c moveq r4, 0 | r4 = 0;
| }
| if (fp == 1) {
0x00003c30 beq 0x3ebc | goto label_13;
| }
0x00003c34 ldr r3, [pc, 0x318] | r3 = "_";
0x00003c38 ldr r0, [pc, 0x318] |
0x00003c3c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003c40 add r0, pc, r0 | r0 = pc + r0;
0x00003c44 ldr r1, [r3] |
0x00003c48 mov r2, r6 | r2 = r6;
0x00003c4c mov r3, 0 | r3 = 0;
0x00003c50 ldr r1, [r1, 8] | r1 = *(0x3f58);
0x00003c54 ldr r0, [r0] | r0 = *(0x3f54);
0x00003c58 bl 0x394c | r0 = fcn_0000394c (r0, r1);
0x00003c5c cmp r0, 0 |
0x00003c60 cmpeq fp, 3 | __asm ("cmpeq fp, 3");
0x00003c64 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00003c68 bne 0x3ebc | goto label_13;
| }
0x00003c6c ldr r3, [pc, 0x2c4] |
0x00003c70 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003c74 ldr r3, [r3] | r3 = *(0x3f34);
0x00003c78 ldr r4, [r3, 0x14] | r4 = *(0x3f48);
0x00003c7c bl 0x25a4 | r0 = errno_location ();
0x00003c80 ldr r0, [r0] | r0 = *(r0);
0x00003c84 bl 0x2214 | strerror (r0);
0x00003c88 ldr r1, [pc, 0x2cc] | r1 = *(0x3f58);
0x00003c8c mov r2, r6 | r2 = r6;
0x00003c90 add r1, pc, r1 | r1 = pc + r1;
0x00003c94 mov r3, r0 | r3 = r0;
0x00003c98 b 0x3b44 |
| } while (1);
| label_8:
0x00003c9c ldr r6, [pc, 0x2bc] | r6 = *(0x3f5c);
0x00003ca0 add r6, pc, r6 | r6 = pc + r6;
0x00003ca4 b 0x3b98 | goto label_0;
| label_9:
0x00003ca8 ldr r6, [pc, 0x2b4] | r6 = *(0x3f60);
0x00003cac add r6, pc, r6 | r6 = pc + r6;
0x00003cb0 b 0x3b98 | goto label_0;
| label_10:
0x00003cb4 ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x00003cb8 ldrh r2, [r5, 0x12] | r2 = *((r5 + 0x12));
0x00003cbc mov r1, r4 | r1 = r4;
0x00003cc0 mov r0, r6 | r0 = r6;
0x00003cc4 bl 0x2974 | r0 = fcn_00002974 (r0, r1);
0x00003cc8 cmp r0, 0 |
| if (r0 == 0) {
0x00003ccc beq 0x3eac | goto label_14;
| }
0x00003cd0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00003cd4 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00003cd8 str r3, [r8] | *(r8) = r3;
0x00003cdc ldr r3, [pc, 0x270] | r3 = "_";
0x00003ce0 cmp r0, 0 |
0x00003ce4 ldr r3, [r7, r3] | r3 = *((r7 + r3));
| if (r0 != 0) {
0x00003ce8 moveq r0, r4 | r0 = r4;
| }
0x00003cec str r3, [sp, 0x14] | var_14h = r3;
0x00003cf0 ldr r2, [r3] |
0x00003cf4 ldr r3, [pc, 0x23c] |
0x00003cf8 ldr r2, [r2, 0x10] | r2 = *(0x3f60);
0x00003cfc ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003d00 ldrb r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x00003d04 str r3, [sp, 0xc] | var_ch = r3;
0x00003d08 ldr r3, [r3] |
0x00003d0c ldr r3, [r3, 0x18] | r3 = *(0x3f4c);
0x00003d10 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00003d14 cmp r0, 0 |
| if (r0 != 0) {
0x00003d18 streq r5, [r8] | *(r8) = r5;
| }
| if (r0 == 0) {
0x00003d1c beq 0x3eac | goto label_14;
| }
0x00003d20 mov r2, 0 | r2 = 0;
0x00003d24 mov r1, 1 | r1 = 1;
0x00003d28 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x00003d2c bl 0x2514 | fcn_00002514 ();
0x00003d30 mov r3, 0 | r3 = 0;
0x00003d34 mov r4, r0 | r4 = r0;
| do {
0x00003d38 cmp r4, 0 |
| if (r4 == 0) {
0x00003d3c bne 0x3d78 |
0x00003d40 cmp r3, 0 |
| if (r3 == 0) {
0x00003d44 movne r4, r3 | r4 = r3;
| }
| if (r3 != 0) {
0x00003d48 bne 0x3ea0 | goto label_15;
| }
0x00003d4c ldr r3, [pc, 0x1fc] | r3 = *(0x3f4c);
0x00003d50 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003d54 ldr r4, [r3] | r4 = *(0x3f4c);
| label_3:
0x00003d58 cmp r4, 0 |
| if (r4 != 0) {
0x00003d5c bne 0x3e80 | goto label_16;
| }
| label_4:
0x00003d60 str r4, [r5, 4] | *((r5 + 4)) = r4;
0x00003d64 str r5, [r3] | *(r3) = r5;
0x00003d68 mov r3, 0 | r3 = 0;
0x00003d6c str r3, [r5, 0x58] | *((r5 + 0x58)) = r3;
0x00003d70 str r3, [r5, 0x5c] | *((r5 + 0x5c)) = r3;
0x00003d74 b 0x3ba0 | goto label_1;
| }
0x00003d78 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00003d7c ldrh r1, [r5, 0x12] | r1 = *((r5 + 0x12));
0x00003d80 str r3, [sp, 0x10] | var_10h = r3;
0x00003d84 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00003d88 ldr sl, [r4, 0xc] | sl = *((r4 + 0xc));
0x00003d8c ldrh r2, [r4, 0x12] | r2 = *((r4 + 0x12));
0x00003d90 str r1, [sp, 4] | var_4h = r1;
0x00003d94 ldrb r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x00003d98 adds r3, r3, 0 | r3 += 0;
| if (r3 == r3) {
0x00003d9c movne r3, 1 | r3 = 1;
| }
0x00003da0 adds r0, sl, 0 | r0 = sl + 0;
0x00003da4 str r1, [sp] | *(sp) = r1;
| if (r0 == sl) {
0x00003da8 movne r0, 1 | r0 = 1;
| }
0x00003dac ldr r1, [sp, 0x10] | r1 = var_10h;
0x00003db0 bl 0x29c4 | r0 = fcn_000029c4 (r0, r1, r2, r3);
0x00003db4 cmp r0, 0 |
| if (r0 == 0) {
0x00003db8 bne 0x3dec |
0x00003dbc ldr r3, [sp, 0xc] | r3 = var_ch;
0x00003dc0 ldr r1, [pc, 0x1a0] | r1 = *(0x3f64);
0x00003dc4 ldr r2, [r3] | r2 = *(r3);
0x00003dc8 ldr r3, [pc, 0x19c] | r3 = *(0x3f68);
0x00003dcc ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00003dd0 ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00003dd4 add r1, pc, r1 | r1 = pc + r1;
0x00003dd8 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00003ddc ldr r0, [r0] | r0 = *(r0);
0x00003de0 bl 0x23e8 | fprintf (r0, r1, r2, r3);
0x00003de4 mov r0, 1 | r0 = 1;
0x00003de8 bl 0x25b0 | exit (r0);
| }
0x00003dec cmp sl, 0 |
| if (sl != 0) {
0x00003df0 ldreq sl, [r4, 8] | sl = *((r4 + 8));
| }
0x00003df4 cmp r0, 0 |
| if (r0 <= 0) {
0x00003df8 ble 0x3f24 | goto label_17;
| }
0x00003dfc ldr r3, [sp, 0x14] | r3 = var_14h;
0x00003e00 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00003e04 ldr r2, [r3] | r2 = *(r3);
0x00003e08 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00003e0c ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x00003e10 ldr r3, [r3] | r3 = *(r3);
0x00003e14 mov r0, sl | r0 = sl;
0x00003e18 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00003e1c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00003e20 cmp r0, 0 |
| if (r0 == 0) {
0x00003e24 bne 0x3e44 |
0x00003e28 ldr r3, [pc, 0x120] | r3 = *(0x3f4c);
0x00003e2c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003e30 ldr r2, [r3] | r2 = *(0x3f4c);
| label_2:
0x00003e34 cmp r4, r2 |
| if (r4 != r2) {
0x00003e38 bne 0x3e74 | goto label_18;
| }
0x00003e3c ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00003e40 str r2, [r3] | *(r3) = r2;
| }
0x00003e44 ldr sl, [r4, 4] | sl = *((r4 + 4));
0x00003e48 cmp sl, 0 |
| if (sl == 0) {
0x00003e4c beq 0x3ea0 | goto label_15;
| }
0x00003e50 ldrh r2, [sl, 0x12] | r2 = *((sl + 0x12));
0x00003e54 ldr r1, [sl, 8] | r1 = *((sl + 8));
0x00003e58 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x00003e5c bl 0x2974 | fcn_00002974 (r0, r1);
0x00003e60 mov r3, r4 | r3 = r4;
0x00003e64 cmp r0, 0 |
| if (r0 == 0) {
0x00003e68 beq 0x3ea0 | goto label_15;
| }
0x00003e6c mov r4, sl | r4 = sl;
0x00003e70 b 0x3d38 |
| } while (1);
| label_18:
0x00003e74 add r3, r2, 4 | r3 = r2 + 4;
0x00003e78 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00003e7c b 0x3e34 | goto label_2;
| label_16:
0x00003e80 add r3, r4, 4 | r3 = r4 + 4;
0x00003e84 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00003e88 b 0x3d58 | goto label_3;
| do {
0x00003e8c add r3, r2, 4 | r3 = r2 + 4;
0x00003e90 ldr r2, [r2, 4] | r2 = *((r2 + 4));
| label_6:
0x00003e94 cmp r4, r2 |
0x00003e98 bne 0x3e8c |
| } while (r4 != r2);
0x00003e9c b 0x3d60 | goto label_4;
| label_15:
0x00003ea0 add r3, r4, 4 | r3 = r4 + 4;
0x00003ea4 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00003ea8 b 0x3d60 | goto label_4;
| label_14:
0x00003eac add r8, r5, 4 | r8 = r5 + 4;
0x00003eb0 b 0x3ba0 | goto label_1;
| label_11:
0x00003eb4 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00003eb8 b 0x3bb8 | goto label_5;
| label_13:
0x00003ebc cmp r4, 0 |
0x00003ec0 cmpne sb, 0 | __asm ("cmpne sb, 0");
| if (r4 == 0) {
0x00003ec4 beq 0x3ef4 | goto label_19;
| }
0x00003ec8 mov r0, 0xc | r0 = 0xc;
0x00003ecc bl 0x2400 | fcn_00002400 ();
0x00003ed0 mov r8, 1 | r8 = 1;
0x00003ed4 mov r7, r0 | r7 = r0;
| do {
0x00003ed8 ldr r5, [sb] | r5 = *(sb);
0x00003edc cmp r5, 0 |
| if (r5 == 0) {
0x00003ee0 bne 0x3f00 |
0x00003ee4 str r4, [r7, 4] | *((r7 + 4)) = r4;
0x00003ee8 strb r5, [r7, 8] | *((r7 + 8)) = r5;
0x00003eec str r5, [r7] | *(r7) = r5;
0x00003ef0 str r7, [sb] | *(sb) = r7;
| label_19:
0x00003ef4 mov r0, r4 | r0 = r4;
0x00003ef8 add sp, sp, 0x1c |
0x00003efc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00003f00 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00003f04 mov r0, r6 | r0 = r6;
0x00003f08 ldrh r2, [r3, 0x12] | r2 = *((r3 + 0x12));
0x00003f0c ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00003f10 bl 0x2974 | fcn_00002974 (r0, r1);
0x00003f14 mov sb, r5 | sb = r5;
0x00003f18 cmp r0, 0 |
| if (r0 == 0) {
0x00003f1c strbne r8, [r5, 8] | *((r5 + 8)) = r8;
| }
0x00003f20 b 0x3ed8 |
| } while (1);
| label_17:
0x00003f24 ldr r3, [pc, 0x24] | r3 = *(0x3f4c);
0x00003f28 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00003f2c ldr r2, [r3] | r2 = *(0x3f4c);
0x00003f30 b 0x3e94 | goto label_6;
| }
; 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/libxtables.so.12.2.0 @ 0x3f70 */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_match_revision () | void xtables_find_match_revision (int32_t arg1) {
| r0 = arg1;
0x00003f70 push {r4, r5, r6, lr} |
0x00003f74 subs r4, r2, 0 | r4 = r2 - 0;
0x00003f78 mov r5, r0 | r5 = r0;
0x00003f7c mov r6, r3 | r6 = r3;
| if (r4 != r2) {
0x00003f80 bne 0x3f90 | goto label_0;
| }
0x00003f84 bl 0x2514 | r0 = fcn_00002514 ();
0x00003f88 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
| do {
0x00003f8c beq 0x3fc0 | goto label_1;
| }
| label_0:
0x00003f90 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00003f94 cmp r3, r6 |
| if (r3 == r6) {
0x00003f98 beq 0x3fc4 | goto label_2;
| }
0x00003f9c ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00003fa0 cmp r4, 0 |
| if (r4 == 0) {
0x00003fa4 beq 0x3fc0 | goto label_1;
| }
0x00003fa8 ldrh r2, [r4, 0x12] | r2 = *((r4 + 0x12));
0x00003fac ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00003fb0 mov r0, r5 | r0 = r5;
0x00003fb4 bl 0x2974 | r0 = fcn_00002974 (r0, r1);
0x00003fb8 cmp r0, 0 |
0x00003fbc b 0x3f8c |
| } while (1);
| label_1:
0x00003fc0 mov r4, 0 | r4 = 0;
| label_2:
0x00003fc4 mov r0, r4 | r0 = r4;
0x00003fc8 pop {r4, r5, r6, pc} |
| }
; 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/libxtables.so.12.2.0 @ 0x3540 */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_target () | void xtables_find_target (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| char * s2;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x00003540 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00003544 ldrb r3, [r0] | r3 = *(r0);
0x00003548 ldr r6, [pc, 0x3b0] | r6 = *(0x38fc);
0x0000354c cmp r3, 0 |
0x00003550 add r6, pc, r6 | r6 = pc + r6;
0x00003554 sub sp, sp, 0x14 |
0x00003558 mov sl, r1 | sl = r1;
| if (r3 == 0) {
0x0000355c beq 0x3684 | goto label_7;
| }
0x00003560 ldr r1, [pc, 0x39c] | r1 = *(0x3900);
0x00003564 mov r7, r0 | r7 = r0;
0x00003568 add r1, pc, r1 | r1 = pc + r1;
0x0000356c bl 0x2508 | r0 = strcmp (r0, r1);
0x00003570 cmp r0, 0 |
| if (r0 == 0) {
0x00003574 beq 0x3690 | goto label_8;
| }
0x00003578 ldr r1, [pc, 0x388] | r1 = *(0x3904);
0x0000357c mov r0, r7 | r0 = r7;
0x00003580 add r1, pc, r1 | r1 = pc + r1;
0x00003584 bl 0x2508 | r0 = strcmp (r0, r1);
0x00003588 cmp r0, 0 |
| if (r0 == 0) {
0x0000358c beq 0x369c | goto label_9;
| }
0x00003590 ldr r1, [pc, 0x374] | r1 = *(0x3908);
0x00003594 mov r0, r7 | r0 = r7;
0x00003598 add r1, pc, r1 | r1 = pc + r1;
0x0000359c bl 0x2508 | r0 = strcmp (r0, r1);
0x000035a0 cmp r0, 0 |
| if (r0 == 0) {
0x000035a4 beq 0x36a8 | goto label_10;
| }
0x000035a8 ldr r1, [pc, 0x360] | r1 = *(0x390c);
0x000035ac mov r0, r7 | r0 = r7;
0x000035b0 add r1, pc, r1 | r1 = pc + r1;
0x000035b4 bl 0x2508 | r0 = strcmp (r0, r1);
0x000035b8 cmp r0, 0 |
| if (r0 == 0) {
0x000035bc beq 0x36b4 | goto label_11;
| }
| do {
| label_0:
0x000035c0 ldr r3, [pc, 0x34c] | r3 = *(0x3910);
0x000035c4 ldr r8, [r6, r3] | r8 = *((r6 + r3));
0x000035c8 ldr r3, [pc, 0x348] | r3 = *(0x3914);
0x000035cc add r3, pc, r3 | r3 = pc + r3;
0x000035d0 str r3, [sp, 0xc] | s2 = r3;
| label_1:
0x000035d4 ldr r4, [r8] | r4 = *(r8);
0x000035d8 cmp r4, 0 |
| if (r4 != 0) {
0x000035dc bne 0x36c0 | goto label_12;
| }
0x000035e0 ldr r3, [pc, 0x334] | r3 = *(0x3918);
0x000035e4 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x000035e8 ldr r4, [r3] | r4 = *(0x3918);
| label_5:
0x000035ec cmp r4, 0 |
| if (r4 != 0) {
0x000035f0 bne 0x38b8 | goto label_13;
| }
| label_4:
0x000035f4 adds r3, sl, 0 | r3 = sl + 0;
| if (r3 == sl) {
0x000035f8 movne r3, 1 | r3 = 1;
| }
0x000035fc cmp r4, 0 |
| if (r4 == 0) {
0x00003600 movne r3, 0 | r3 = 0;
| }
0x00003604 cmp r3, 0 |
| if (r3 == 0) {
0x00003608 beq 0x38d8 | goto label_14;
| }
0x0000360c cmp sl, 1 |
| if (sl != 1) {
0x00003610 moveq r4, 0 | r4 = 0;
| }
| if (sl == 1) {
0x00003614 beq 0x38e4 | goto label_15;
| }
0x00003618 ldr r3, [pc, 0x300] | r3 = *(0x391c);
0x0000361c ldr r0, [pc, 0x300] |
0x00003620 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003624 add r0, pc, r0 | r0 = pc + r0;
0x00003628 ldr r1, [r3] |
0x0000362c mov r2, r7 | r2 = r7;
0x00003630 mov r3, 1 | r3 = 1;
0x00003634 ldr r1, [r1, 8] | r1 = *(0x3924);
0x00003638 ldr r0, [r0] | r0 = *(0x3920);
0x0000363c bl 0x394c | r0 = fcn_0000394c (r0, r1);
0x00003640 cmp r0, 0 |
0x00003644 cmpeq sl, 3 | __asm ("cmpeq sl, 3");
0x00003648 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0000364c bne 0x38d8 | goto label_14;
| }
0x00003650 ldr r3, [pc, 0x2d0] |
0x00003654 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003658 ldr r3, [r3] | r3 = *(0x3924);
0x0000365c ldr r4, [r3, 0x14] | r4 = *(0x3938);
0x00003660 bl 0x25a4 | r0 = errno_location ();
0x00003664 ldr r0, [r0] | r0 = *(r0);
0x00003668 bl 0x2214 | strerror (r0);
0x0000366c ldr r1, [pc, 0x2b8] | r1 = *(0x3928);
0x00003670 mov r2, r7 | r2 = r7;
0x00003674 add r1, pc, r1 | r1 = pc + r1;
0x00003678 mov r3, r0 | r3 = r0;
0x0000367c mov r0, 2 | r0 = 2;
0x00003680 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_7:
0x00003684 ldr r7, [pc, 0x2a4] | r7 = *(0x392c);
0x00003688 add r7, pc, r7 | r7 = pc + r7;
0x0000368c b 0x35c0 |
| } while (1);
| label_8:
0x00003690 ldr r7, [pc, 0x29c] | r7 = *(0x3930);
0x00003694 add r7, pc, r7 | r7 = pc + r7;
0x00003698 b 0x35c0 | goto label_0;
| label_9:
0x0000369c ldr r7, [pc, 0x294] | r7 = *(0x3934);
0x000036a0 add r7, pc, r7 | r7 = pc + r7;
0x000036a4 b 0x35c0 | goto label_0;
| label_10:
0x000036a8 ldr r7, [pc, 0x28c] | r7 = *(0x3938);
0x000036ac add r7, pc, r7 | r7 = pc + r7;
0x000036b0 b 0x35c0 | goto label_0;
| label_11:
0x000036b4 ldr r7, [pc, 0x284] | r7 = *(0x393c);
0x000036b8 add r7, pc, r7 | r7 = pc + r7;
0x000036bc b 0x35c0 | goto label_0;
| label_12:
0x000036c0 ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x000036c4 ldrh r2, [r4, 0x12] | r2 = *((r4 + 0x12));
0x000036c8 mov r1, r5 | r1 = r5;
0x000036cc mov r0, r7 | r0 = r7;
0x000036d0 bl 0x2974 | r0 = fcn_00002974 (r0, r1);
0x000036d4 cmp r0, 0 |
| if (r0 == 0) {
0x000036d8 beq 0x38b0 | goto label_16;
| }
0x000036dc ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000036e0 ldr r1, [sp, 0xc] | r1 = s2;
0x000036e4 str r3, [r8] | *(r8) = r3;
0x000036e8 mov r0, r5 | r0 = r5;
0x000036ec bl 0x2508 | r0 = strcmp (r0, r1);
0x000036f0 cmp r0, 0 |
| if (r0 != 0) {
0x000036f4 beq 0x3738 |
0x000036f8 ldr r3, [pc, 0x220] | r3 = *(0x391c);
0x000036fc ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00003700 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003704 cmp r0, 0 |
0x00003708 ldr r2, [r3] |
0x0000370c ldr r3, [pc, 0x214] |
| if (r0 != 0) {
0x00003710 moveq r0, r5 | r0 = r5;
| }
0x00003714 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003718 ldr r2, [r2, 0x14] | r2 = *(0x3930);
0x0000371c ldr r3, [r3] |
0x00003720 ldrb r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00003724 ldr r3, [r3, 0x18] | r3 = *(0x393c);
0x00003728 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000372c cmp r0, 0 |
| if (r0 != 0) {
0x00003730 streq r4, [r8] | *(r8) = r4;
| }
| if (r0 == 0) {
0x00003734 beq 0x38b0 | goto label_16;
| }
| }
0x00003738 mov r1, 1 | r1 = 1;
0x0000373c ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00003740 bl 0x21cc | fcn_000021cc ();
0x00003744 mov r3, 0 | r3 = 0;
0x00003748 mov r5, r0 | r5 = r0;
| do {
0x0000374c cmp r5, 0 |
| if (r5 == 0) {
0x00003750 bne 0x3784 |
0x00003754 cmp r3, 0 |
| if (r3 == 0) {
0x00003758 movne r5, r3 | r5 = r3;
| }
| if (r3 != 0) {
0x0000375c bne 0x38a4 | goto label_17;
| }
0x00003760 ldr r3, [pc, 0x1b4] | r3 = *(0x3918);
0x00003764 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003768 ldr r5, [r3] | r5 = *(0x3918);
| label_3:
0x0000376c str r5, [r4, 4] | *((r4 + 4)) = r5;
0x00003770 str r4, [r3] | *(r3) = r4;
0x00003774 mov r3, 0 | r3 = 0;
0x00003778 str r3, [r4, 0x58] | *((r4 + 0x58)) = r3;
0x0000377c str r3, [r4, 0x5c] | *((r4 + 0x5c)) = r3;
0x00003780 b 0x35d4 | goto label_1;
| }
0x00003784 ldrh r1, [r4, 0x12] | r1 = *((r4 + 0x12));
0x00003788 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0000378c ldr sb, [r5, 0xc] | sb = *((r5 + 0xc));
0x00003790 ldrb fp, [r5, 0x10] | fp = *((r5 + 0x10));
0x00003794 ldrh r2, [r5, 0x12] | r2 = *((r5 + 0x12));
0x00003798 str r1, [sp, 4] | var_4h = r1;
0x0000379c ldrb r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x000037a0 adds r3, r3, 0 | r3 += 0;
| if (r3 == r3) {
0x000037a4 movne r3, 1 | r3 = 1;
| }
0x000037a8 adds r0, sb, 0 | r0 = sb + 0;
0x000037ac str r1, [sp] | *(sp) = r1;
| if (r0 == sb) {
0x000037b0 movne r0, 1 | r0 = 1;
| }
0x000037b4 mov r1, fp | r1 = fp;
0x000037b8 bl 0x29c4 | r0 = fcn_000029c4 (r0, r1, r2, r3);
0x000037bc cmp r0, 0 |
| if (r0 == 0) {
0x000037c0 bne 0x37f8 |
0x000037c4 ldr r3, [pc, 0x15c] | r3 = *(0x3924);
0x000037c8 ldr r1, [pc, 0x174] | r1 = *(0x3940);
0x000037cc ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x000037d0 add r1, pc, r1 | r1 = pc + r1;
0x000037d4 ldr r2, [r3] |
0x000037d8 ldr r3, [pc, 0x168] | r3 = *(0x3944);
0x000037dc ldr r2, [r2, 4] | r2 = *(0x3928);
0x000037e0 ldr r0, [r6, r3] | r0 = *((r6 + r3));
0x000037e4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000037e8 ldr r0, [r0] | r0 = *(r0);
0x000037ec bl 0x23e8 | fprintf (r0, r1, r2, r3);
0x000037f0 mov r0, 1 | r0 = 1;
0x000037f4 bl 0x25b0 | exit (r0);
| }
0x000037f8 cmp sb, 0 |
| if (sb != 0) {
0x000037fc ldreq sb, [r5, 8] | sb = *((r5 + 8));
| }
0x00003800 cmp r0, 0 |
| if (r0 <= 0) {
0x00003804 ble 0x38f0 | goto label_18;
| }
0x00003808 ldr r3, [pc, 0x110] | r3 = *(0x391c);
0x0000380c mov r0, sb | r0 = sb;
0x00003810 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003814 ldr r2, [r3] |
0x00003818 ldr r3, [pc, 0x108] |
0x0000381c ldr r2, [r2, 0x14] | r2 = *(0x3930);
0x00003820 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003824 ldr r3, [r3] |
0x00003828 ldr r3, [r3, 0x18] | r3 = *(0x393c);
0x0000382c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00003830 cmp r0, 0 |
| if (r0 == 0) {
0x00003834 bne 0x3854 |
0x00003838 ldr r3, [pc, 0xdc] | r3 = *(0x3918);
0x0000383c ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00003840 ldr r2, [r3] | r2 = *(0x3918);
| label_2:
0x00003844 cmp r5, r2 |
| if (r5 != r2) {
0x00003848 bne 0x3884 | goto label_19;
| }
0x0000384c ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00003850 str r2, [r3] | *(r3) = r2;
| }
0x00003854 ldr sb, [r5, 4] | sb = *((r5 + 4));
0x00003858 cmp sb, 0 |
| if (sb == 0) {
0x0000385c beq 0x38a4 | goto label_17;
| }
0x00003860 ldrh r2, [sb, 0x12] | r2 = *((sb + 0x12));
0x00003864 ldr r1, [sb, 8] | r1 = *((sb + 8));
0x00003868 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0000386c bl 0x2974 | fcn_00002974 (r0, r1);
0x00003870 mov r3, r5 | r3 = r5;
0x00003874 cmp r0, 0 |
| if (r0 == 0) {
0x00003878 beq 0x38a4 | goto label_17;
| }
0x0000387c mov r5, sb | r5 = sb;
0x00003880 b 0x374c |
| } while (1);
| label_19:
0x00003884 add r3, r2, 4 | r3 = r2 + 4;
0x00003888 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0000388c b 0x3844 | goto label_2;
| do {
0x00003890 add r3, r2, 4 | r3 = r2 + 4;
0x00003894 ldr r2, [r2, 4] | r2 = *((r2 + 4));
| label_6:
0x00003898 cmp r5, r2 |
0x0000389c bne 0x3890 |
| } while (r5 != r2);
0x000038a0 b 0x376c | goto label_3;
| label_17:
0x000038a4 add r3, r5, 4 | r3 = r5 + 4;
0x000038a8 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x000038ac b 0x376c | goto label_3;
| label_16:
0x000038b0 add r8, r4, 4 | r8 = r4 + 4;
0x000038b4 b 0x35d4 | goto label_1;
| label_13:
0x000038b8 ldrh r2, [r4, 0x12] | r2 = *((r4 + 0x12));
0x000038bc ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000038c0 mov r0, r7 | r0 = r7;
0x000038c4 bl 0x2974 | r0 = fcn_00002974 (r0, r1);
0x000038c8 cmp r0, 0 |
| if (r0 != 0) {
0x000038cc bne 0x35f4 | goto label_4;
| }
0x000038d0 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x000038d4 b 0x35ec | goto label_5;
| label_14:
0x000038d8 cmp r4, 0 |
| if (r4 == 0) {
0x000038dc movne r3, 1 | r3 = 1;
| }
| if (r4 == 0) {
0x000038e0 strne r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
| }
| label_15:
0x000038e4 mov r0, r4 | r0 = r4;
0x000038e8 add sp, sp, 0x14 |
0x000038ec pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x000038f0 ldr r3, [pc, 0x24] | r3 = *(0x3918);
0x000038f4 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x000038f8 ldr r2, [r3] | r2 = *(0x3918);
0x000038fc b 0x3898 | goto label_6;
| }
; 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/libxtables.so.12.2.0 @ 0x3fcc */
| #include <stdint.h>
|
; (fcn) sym.xtables_find_target_revision () | void xtables_find_target_revision (int32_t arg1) {
| r0 = arg1;
0x00003fcc push {r4, r5, r6, lr} |
0x00003fd0 subs r4, r2, 0 | r4 = r2 - 0;
0x00003fd4 mov r5, r0 | r5 = r0;
0x00003fd8 mov r6, r3 | r6 = r3;
| if (r4 != r2) {
0x00003fdc bne 0x3fec | goto label_0;
| }
0x00003fe0 bl 0x21cc | r0 = fcn_000021cc ();
0x00003fe4 subs r4, r0, 0 | r4 = r0 - 0;
| do {
| if (r4 == r0) {
0x00003fe8 beq 0x401c | goto label_1;
| }
| label_0:
0x00003fec ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00003ff0 cmp r3, r6 |
| if (r3 == r6) {
0x00003ff4 beq 0x4020 | goto label_2;
| }
0x00003ff8 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00003ffc cmp r4, 0 |
| if (r4 == 0) {
0x00004000 beq 0x401c | goto label_1;
| }
0x00004004 ldrh r2, [r4, 0x12] | r2 = *((r4 + 0x12));
0x00004008 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0000400c mov r0, r5 | r0 = r5;
0x00004010 bl 0x2974 | r0 = fcn_00002974 (r0, r1);
0x00004014 cmp r0, 0 |
0x00004018 b 0x3fe8 |
| } while (1);
| label_1:
0x0000401c mov r4, 0 | r4 = 0;
| label_2:
0x00004020 mov r0, r4 | r0 = r4;
0x00004024 pop {r4, r5, r6, pc} |
| }
[*] Function system used 1 times libxtables.so.12.2.0