[*] Binary protection state of pcregrep
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function sprintf tear down of pcregrep
; 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/bin/pcregrep @ 0x13c98 */
| #include <stdint.h>
|
; (fcn) fcn.00013c98 () | void fcn_00013c98 (char * arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_ch;
| char * s;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
| label_5:
0x000139d0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000139d4 ldr r4, [pc, 0x294] | r4 = *(0x13c6c);
0x000139d8 sub sp, sp, 0x810 |
0x000139dc sub sp, sp, 4 |
0x000139e0 mov r8, r1 | r8 = r1;
0x000139e4 mov r1, 0x2f | r1 = 0x2f;
0x000139e8 mov r6, r0 | r6 = r0;
0x000139ec mov r7, r2 | r7 = r2;
0x000139f0 bl 0x10d1c | strrchr (r0, r1);
0x000139f4 add r1, sp, 0x10 | r1 += s;
0x000139f8 cmp r0, 0 |
| if (r0 == 0) {
0x000139fc addne r5, r0, 1 | r5 = r0 + 1;
| }
0x00013a00 mov r0, r6 | r0 = r6;
| if (r0 != 0) {
0x00013a04 moveq r5, r6 | r5 = r6;
| }
0x00013a08 bl 0x10c98 | r0 = stat64 ();
0x00013a0c cmp r0, 0 |
| if (r0 < 0) {
0x00013a10 blt 0x13bdc | goto label_6;
| }
0x00013a14 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00013a18 and r3, r3, 0xf000 | r3 &= 0xf000;
0x00013a1c cmp r3, 0x4000 |
| if (r3 != 0x4000) {
0x00013a20 bne 0x13bdc | goto label_6;
| }
0x00013a24 ldr r3, [r4, 0x70] | r3 = *((r4 + 0x70));
0x00013a28 cmp r3, 1 |
0x00013a2c bne 0x13a44 |
| while (r0 == 0) {
| label_3:
0x00013a30 mvn r5, 0 | r5 = ~0;
| label_0:
0x00013a34 mov r0, r5 | r0 = r5;
0x00013a38 add sp, sp, 0x810 |
0x00013a3c add sp, sp, 4 |
0x00013a40 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00013a44 ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x00013a48 ldr r1, [r4, 0x78] | r1 = *((r4 + 0x78));
0x00013a4c mov r0, r5 | r0 = r5;
0x00013a50 bl 0x126a8 | r0 = fcn_000126a8 (r0, r1);
0x00013a54 cmp r0, 0 |
0x00013a58 beq 0x13a30 |
| }
0x00013a5c ldr r5, [r4, 0x70] | r5 = *((r4 + 0x70));
0x00013a60 cmp r5, 2 |
| if (r5 != 2) {
0x00013a64 beq 0x13ab8 |
| label_4:
0x00013a68 ldr r1, [pc, 0x204] | r1 = *(0x13c70);
0x00013a6c mov r0, r6 | r0 = r6;
0x00013a70 bl 0x10ea8 | r0 = fopen64 ();
0x00013a74 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 != r0) {
0x00013a78 bne 0x13c28 | goto label_7;
| }
0x00013a7c ldr r3, [r4, 0x7c] | r3 = *((r4 + 0x7c));
0x00013a80 cmp r3, 0 |
| if (r3 == 0) {
0x00013a84 bne 0x13ab0 |
0x00013a88 ldr r3, [pc, 0x1e8] | r3 = "rb";
0x00013a8c ldr r4, [r3] | r4 = "rb";
0x00013a90 bl 0x10e18 | r0 = errno_location ();
0x00013a94 ldr r0, [r0] | r0 = *(r0);
0x00013a98 bl 0x10c8c | strerror (r0);
0x00013a9c mov r2, r6 | r2 = r6;
0x00013aa0 ldr r1, [pc, 0x1d4] | r1 = stderr;
0x00013aa4 mov r3, r0 | r3 = r0;
0x00013aa8 mov r0, r4 | r0 = r4;
0x00013aac bl 0x10d34 | fprintf (r0, r1, r2, r3);
| }
0x00013ab0 mov r5, 2 | r5 = 2;
0x00013ab4 b 0x13a34 | goto label_0;
| }
0x00013ab8 mov r0, r6 | r0 = r6;
0x00013abc bl 0x10dac | r0 = opendir ();
0x00013ac0 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 != r0) {
0x00013ac4 bne 0x13bc8 | goto label_8;
| }
0x00013ac8 ldr r3, [r4, 0x7c] | r3 = *((r4 + 0x7c));
0x00013acc cmp r3, 0 |
| if (r3 != 0) {
0x00013ad0 bne 0x13a34 | goto label_0;
| }
0x00013ad4 ldr r3, [pc, 0x19c] | r3 = "rb";
0x00013ad8 ldr r4, [r3] | r4 = "rb";
0x00013adc bl 0x10e18 | r0 = errno_location ();
0x00013ae0 ldr r0, [r0] | r0 = *(r0);
0x00013ae4 bl 0x10c8c | strerror (r0);
0x00013ae8 mov r2, r6 | r2 = r6;
0x00013aec ldr r1, [pc, 0x18c] | r1 = "pcregrep: Failed to open %s: %s\n";
0x00013af0 mov r3, r0 | r3 = r0;
0x00013af4 mov r0, r4 | r0 = r4;
0x00013af8 bl 0x10d34 | fprintf (r0, "pcregrep: Failed to open %s: %s\n", r2, r3);
0x00013afc b 0x13a34 | goto label_0;
| label_2:
0x00013b00 mov r3, 0x2f | r3 = 0x2f;
0x00013b04 mov r2, r6 | r2 = r6;
0x00013b08 mov r1, fp | r1 = fp;
0x00013b0c str r4, [sp] | *(sp) = r4;
0x00013b10 add r0, sp, 0x10 | r0 += s;
0x00013b14 bl 0x10dd0 | sprintf (r0, r1, r2)
0x00013b18 mov r2, 0 | r2 = 0;
0x00013b1c mov r1, r8 | r1 = r8;
0x00013b20 add r0, sp, 0x10 | r0 += s;
0x00013b24 bl 0x13c98 | r0 = fcn_00013c98 (r0, r1);
0x00013b28 cmp r0, 1 |
| if (r0 <= 1) {
0x00013b2c bgt 0x13b40 |
0x00013b30 cmp r0, 0 |
0x00013b34 cmpeq r5, 1 | __asm ("cmpeq r5, 1");
| if (r0 == 0) {
0x00013b38 movne r0, r5 | r0 = r5;
| }
| if (r0 == 0) {
0x00013b3c moveq r0, 0 | r0 = 0;
| goto label_9;
| }
| }
| label_9:
0x00013b40 mov r5, r0 | r5 = r0;
| do {
| label_1:
0x00013b44 mov r0, r7 | r0 = r7;
0x00013b48 bl 0x10d64 | r0 = readdir64 ();
0x00013b4c cmp r0, 0 |
| if (r0 == 0) {
0x00013b50 beq 0x13bbc | goto label_10;
| }
0x00013b54 add r4, r0, 0x13 | r4 = r0 + 0x13;
0x00013b58 mov r1, sb | r1 = sb;
0x00013b5c mov r0, r4 | r0 = r4;
0x00013b60 bl 0x10db8 | r0 = strcmp (r0, r1);
0x00013b64 cmp r0, 0 |
0x00013b68 beq 0x13b44 |
| } while (r0 == 0);
0x00013b6c mov r1, sl | r1 = sl;
0x00013b70 mov r0, r4 | r0 = r4;
0x00013b74 bl 0x10db8 | r0 = strcmp (r0, r1);
0x00013b78 cmp r0, 0 |
| if (r0 == 0) {
0x00013b7c beq 0x13b44 | goto label_1;
| }
0x00013b80 mov r0, r6 | r0 = r6;
0x00013b84 bl 0x10e3c | strlen (r0);
0x00013b88 str r0, [sp, 0xc] | var_ch = r0;
0x00013b8c mov r0, r4 | r0 = r4;
0x00013b90 bl 0x10e3c | strlen (r0);
0x00013b94 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00013b98 add r0, r3, r0 | r0 = r3 + r0;
0x00013b9c add r0, r0, 2 | r0 += 2;
0x00013ba0 cmp r0, 0x800 |
| if (r0 <= 0x800) {
0x00013ba4 ble 0x13b00 | goto label_2;
| }
0x00013ba8 ldr r3, [pc, 0xc8] | r3 = "rb";
0x00013bac ldr r0, [pc, 0xd0] | r0 = "pcregrep: Failed to open directory %s: %s\n";
0x00013bb0 ldr r1, [r3] | r1 = "rb";
0x00013bb4 bl 0x10e60 | fputs ("pcregrep: Failed to open directory %s: %s\n", "rb");
0x00013bb8 mov r5, 2 | r5 = 2;
| label_10:
0x00013bbc mov r0, r7 | r0 = r7;
0x00013bc0 bl 0x10e6c | closedir ();
0x00013bc4 b 0x13a34 | goto label_0;
| label_8:
0x00013bc8 mov r5, 1 | r5 = 1;
0x00013bcc ldr sb, [pc, 0xb4] | sb = "pcre2grep: recursive filename is too long\n";
0x00013bd0 ldr sl, [pc, 0xb4] | sl = *(0x13c88);
0x00013bd4 ldr fp, [pc, 0xb4] | fp = "%s%c%s";
0x00013bd8 b 0x13b44 | goto label_1;
| label_6:
0x00013bdc add r1, sp, 0x10 | r1 += s;
0x00013be0 mov r0, r6 | r0 = r6;
0x00013be4 bl 0x10c98 | r0 = stat64 ();
0x00013be8 cmp r0, 0 |
| if (r0 < 0) {
0x00013bec blt 0x13c0c | goto label_11;
| }
0x00013bf0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00013bf4 and r3, r3, 0xf000 | r3 &= 0xf000;
0x00013bf8 cmp r3, 0x8000 |
| if (r3 == 0x8000) {
0x00013bfc beq 0x13c0c | goto label_11;
| }
0x00013c00 ldr r3, [r4, 0x80] | r3 = *((r4 + 0x80));
0x00013c04 cmp r3, 1 |
| if (r3 == 1) {
0x00013c08 beq 0x13a30 | goto label_3;
| }
| label_11:
0x00013c0c ldr r2, [r4, 0x84] | r2 = *((r4 + 0x84));
0x00013c10 ldr r1, [r4, 0x88] | r1 = *((r4 + 0x88));
0x00013c14 mov r0, r5 | r0 = r5;
0x00013c18 bl 0x126a8 | r0 = fcn_000126a8 (r0, r1);
0x00013c1c cmp r0, 0 |
| if (r0 != 0) {
0x00013c20 bne 0x13a68 | goto label_4;
| }
0x00013c24 b 0x13a30 | goto label_3;
| label_7:
0x00013c28 ldr r3, [pc, 0x64] |
0x00013c2c ldr r3, [r3, 8] | r3 = *(0x13c98);
0x00013c30 cmp r3, 1 |
| if (r3 <= 1) {
0x00013c34 movgt r2, r6 | r2 = r6;
| }
| if (r3 <= 1) {
0x00013c38 bgt 0x13c54 |
0x00013c3c eor r7, r7, 1 | r7 ^= 1;
| if (r3 != 1) {
0x00013c40 andeq r7, r7, 1 | r7 &= 1;
| }
| if (r3 == 1) {
0x00013c44 movne r7, 0 | r7 = 0;
| }
0x00013c48 cmp r7, 0 |
| if (r7 == 0) {
0x00013c4c movne r2, r6 | r2 = r6;
| }
| if (r7 == 0) {
0x00013c50 moveq r2, 0 | r2 = 0;
| goto label_12;
| }
| }
| label_12:
0x00013c54 mov r1, r6 | r1 = r6;
0x00013c58 mov r0, r8 | r0 = r8;
0x00013c5c bl 0x12b48 | r0 = fcn_00012b48 (r0, r1);
0x00013c60 mov r5, r0 | r5 = r0;
0x00013c64 mov r0, r8 | r0 = r8;
0x00013c68 bl 0x10d94 | fclose (r0);
0x00013c6c b 0x13a34 | goto label_0;
0x00013c98 push {r4, r5, r6, lr} |
0x00013c9c mov r6, r1 | r6 = r1;
0x00013ca0 ldr r1, [pc, 0x64] | r1 = *(0x13d08);
0x00013ca4 mov r5, r0 | r5 = r0;
0x00013ca8 mov r4, r2 | r4 = r2;
0x00013cac bl 0x10db8 | r0 = strcmp (r0, r1);
0x00013cb0 cmp r0, 0 |
| if (r0 == 0) {
0x00013cb4 bne 0x13cf8 |
0x00013cb8 ldr r3, [pc, 0x50] | r3 = *(0x13d0c);
0x00013cbc ldr r0, [r3] | r0 = *(0x13d0c);
0x00013cc0 ldr r3, [pc, 0x4c] |
0x00013cc4 ldr r1, [r3] | r1 = stdin;
0x00013cc8 ldr r3, [r3, 8] | r3 = *(0x13d18);
0x00013ccc cmp r3, 1 |
| if (r3 <= 1) {
0x00013cd0 movgt r2, r1 | r2 = r1;
| }
| if (r3 <= 1) {
0x00013cd4 bgt 0x13cf0 |
0x00013cd8 eor r4, r4, 1 | r4 ^= 1;
| if (r3 != 1) {
0x00013cdc andeq r4, r4, 1 | r4 &= 1;
| }
| if (r3 == 1) {
0x00013ce0 movne r4, 0 | r4 = 0;
| }
0x00013ce4 cmp r4, 0 |
| if (r4 == 0) {
0x00013ce8 movne r2, r1 | r2 = r1;
| }
| if (r4 == 0) {
0x00013cec moveq r2, 0 | r2 = 0;
| goto label_13;
| }
| }
| label_13:
0x00013cf0 pop {r4, r5, r6, lr} |
0x00013cf4 b 0x12b48 | void (*0x12b48)() ();
| }
0x00013cf8 mov r2, r4 | r2 = r4;
0x00013cfc mov r1, r6 | r1 = r6;
0x00013d00 mov r0, r5 | r0 = r5;
0x00013d04 pop {r4, r5, r6, lr} |
0x00013d08 b 0x139d0 | goto label_5;
| }
; 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/bin/pcregrep @ 0x13ea4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00013ea4 () | void fcn_00013ea4 (uint32_t arg1, int32_t arg2) {
| char * dest;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x00013ea4 cmp r0, 0x63 |
0x00013ea8 push {r0, r1, r2, r4, r5, r6, r7, r8, sb, lr} |
0x00013eac mov r4, r1 | r4 = r1;
| if (r0 == 0x63) {
0x00013eb0 beq 0x1419c | goto label_8;
| }
0x00013eb4 mov r2, r0 | r2 = r0;
| if (r0 > 0x63) {
0x00013eb8 bgt 0x14010 | goto label_9;
| }
0x00013ebc cmp r0, 0x46 |
| if (r0 == 0x46) {
0x00013ec0 beq 0x141ac | goto label_10;
| }
| if (r0 > 0x46) {
0x00013ec4 bgt 0x13fb4 | goto label_11;
| }
0x00013ec8 cmn r0, 0xb |
| if (r0 == 0xb) {
0x00013ecc beq 0x140cc | goto label_12;
| }
| if (r0 > 0xb) {
0x00013ed0 bgt 0x13f08 | goto label_13;
| }
0x00013ed4 cmn r0, 0x10 |
0x00013ed8 ldr r3, [pc, 0x390] | r3 = *(0x1426c);
| if (r0 == 0x10) {
0x00013edc beq 0x14184 | goto label_14;
| }
0x00013ee0 cmn r0, 0xc |
| if (r0 != 0xc) {
0x00013ee4 moveq r2, 1 | r2 = 1;
| }
| if (r0 != 0xc) {
0x00013ee8 streq r2, [r3, 0x40] | *((r3 + 0x40)) = r2;
| }
| if (r0 == 0xc) {
0x00013eec beq 0x1403c | goto label_1;
| }
| do {
| label_0:
0x00013ef0 ldr r3, [pc, 0x37c] | r3 = *(0x14270);
0x00013ef4 ldr r1, [pc, 0x37c] | r1 = stderr;
0x00013ef8 ldr r0, [r3] | r0 = *(0x14270);
0x00013efc bl 0x10d34 | r0 = fprintf (r0, r1, r2, r3);
0x00013f00 bl 0x13d18 | fcn_00013d18 ();
0x00013f04 b 0x13fb0 | goto label_15;
| label_13:
0x00013f08 cmn r0, 0xa |
| if (r0 == 0xa) {
0x00013f0c beq 0x14170 | goto label_16;
| }
0x00013f10 cmn r0, 4 |
0x00013f14 bne 0x13ef0 |
| } while (r0 != 4);
0x00013f18 ldr r0, [pc, 0x35c] | r0 = "pcregrep: Unknown option -%c\n";
0x00013f1c bl 0x10cd4 | puts ("pcregrep: Unknown option -%c\n");
0x00013f20 ldr r0, [pc, 0x358] | r0 = "Usage:_pcregrep__OPTION_...__PATTERN___FILE1_FILE2_..._";
0x00013f24 bl 0x10cd4 | puts ("Usage:_pcregrep__OPTION_...__PATTERN___FILE1_FILE2_..._");
0x00013f28 ldr r0, [pc, 0x354] | r0 = "Search_for_PATTERN_in_each_FILE_or_standard_input.";
0x00013f2c bl 0x10cd4 | puts ("Search_for_PATTERN_in_each_FILE_or_standard_input.");
0x00013f30 ldr r0, [pc, 0x350] | r0 = "PATTERN must be present if neither -e nor -f is used.";
0x00013f34 bl 0x10cd4 | puts ("PATTERN must be present if neither -e nor -f is used.");
0x00013f38 ldr r0, [pc, 0x34c] | r0 = "\"-\" can be used as a file name to mean STDIN.";
0x00013f3c bl 0x10cd4 | puts ("\"-\" can be used as a file name to mean STDIN.");
0x00013f40 ldr r0, [pc, 0x348] | r0 = "All files are read as plain files, without any interpretation.\n";
0x00013f44 bl 0x10cd4 | puts ("All files are read as plain files, without any interpretation.\n");
0x00013f48 ldr r0, [pc, 0x344] | r0 = "Example: pcregrep -i 'hello.*world' menu.h main.c\n";
0x00013f4c bl 0x10cd4 | puts ("Example: pcregrep -i 'hello.*world' menu.h main.c\n");
0x00013f50 ldr r4, [pc, 0x340] | r4 = "Options:";
0x00013f54 ldr r7, [pc, 0x340] | r7 = *(0x14298);
0x00013f58 ldr r8, [pc, 0x340] | r8 = "___________________________";
0x00013f5c ldr sb, [pc, 0x340] | sb = "_s____s";
| label_2:
0x00013f60 ldr r5, [r4, 4] | r5 = *((r4 + 4));
0x00013f64 cmp r5, 0 |
| if (r5 != 0) {
0x00013f68 bne 0x140dc | goto label_17;
| }
0x00013f6c ldr r0, [pc, 0x334] | r0 = "_s____s";
0x00013f70 bl 0x10cd4 | puts ("_s____s");
0x00013f74 mov r1, 0x5000 | r1 = 0x5000;
0x00013f78 ldr r0, [pc, 0x32c] | r0 = "Numbers_may_be_followed_by_K_or_M__e.g.___buffer_size100K.";
0x00013f7c bl 0x10c80 | printf ("Numbers_may_be_followed_by_K_or_M__e.g.___buffer_size100K.", r1);
0x00013f80 ldr r0, [pc, 0x328] | r0 = "The default value for --buffer-size is %d.\n";
0x00013f84 bl 0x10cd4 | puts ("The default value for --buffer-size is %d.\n");
0x00013f88 ldr r0, [pc, 0x324] | r0 = "When reading patterns or file names from a file, trailing white";
0x00013f8c bl 0x10cd4 | puts ("When reading patterns or file names from a file, trailing white");
0x00013f90 mov r1, 0x2000 | r1 = 0x2000;
0x00013f94 ldr r0, [pc, 0x31c] | r0 = "space is removed and blank lines are ignored.";
0x00013f98 bl 0x10c80 | printf ("space is removed and blank lines are ignored.", r1);
0x00013f9c ldr r0, [pc, 0x318] | r0 = "The maximum size of any pattern is %d bytes.\n";
0x00013fa0 bl 0x10cd4 | puts ("The maximum size of any pattern is %d bytes.\n");
0x00013fa4 ldr r0, [pc, 0x314] | r0 = "\nWith no FILEs, read standard input. If fewer than two FILEs given, assume -h.";
0x00013fa8 bl 0x10cd4 | puts ("\nWith no FILEs, read standard input. If fewer than two FILEs given, assume -h.");
| label_7:
0x00013fac mov r0, 0 | r0 = 0;
| label_15:
0x00013fb0 bl 0x127c8 | r0 = fcn_000127c8 (r0);
| label_11:
0x00013fb4 cmp r0, 0x4c |
| if (r0 == 0x4c) {
0x00013fb8 beq 0x141f4 | goto label_18;
| }
| if (r0 > 0x4c) {
0x00013fbc bgt 0x13fe0 | goto label_19;
| }
0x00013fc0 cmp r0, 0x48 |
| if (r0 == 0x48) {
0x00013fc4 beq 0x141c0 | goto label_20;
| }
0x00013fc8 cmp r0, 0x49 |
| if (r0 != 0x49) {
0x00013fcc ldreq r3, [pc, 0x29c] | r3 = *(0x00014270);
| }
| if (r0 == 0x49) {
0x00013fd0 moveq r2, 1 | r2 = 1;
| goto label_21;
| }
| if (r0 != 0x49) {
| label_21:
0x00013fd4 bne 0x13ef0 | goto label_0;
| }
| label_4:
0x00013fd8 str r2, [r3, 0x44] | *((r3 + 0x44)) = r2;
0x00013fdc b 0x1403c | goto label_1;
| label_19:
0x00013fe0 cmp r0, 0x56 |
| if (r0 == 0x56) {
0x00013fe4 beq 0x14250 | goto label_22;
| }
0x00013fe8 cmp r0, 0x61 |
0x00013fec ldr r3, [pc, 0x27c] | r3 = *(0x1426c);
| if (r0 == 0x61) {
0x00013ff0 beq 0x14194 | goto label_23;
| }
0x00013ff4 cmp r0, 0x4d |
| if (r0 != 0x4d) {
0x00013ff8 bne 0x13ef0 | goto label_0;
| }
0x00013ffc mov r2, 1 | r2 = 1;
0x00014000 orr r4, r1, 0x40000 | r4 = r1 | 0x40000;
0x00014004 str r2, [r3, 0x48] | *((r3 + 0x48)) = r2;
0x00014008 orr r4, r4, 2 | r4 |= 2;
0x0001400c b 0x1403c | goto label_1;
| label_9:
0x00014010 cmp r0, 0x71 |
| if (r0 == 0x71) {
0x00014014 beq 0x1420c | goto label_24;
| }
| if (r0 > 0x71) {
0x00014018 bgt 0x1407c | goto label_25;
| }
0x0001401c cmp r0, 0x6c |
| if (r0 == 0x6c) {
0x00014020 beq 0x141dc | goto label_26;
| }
| if (r0 > 0x6c) {
0x00014024 bgt 0x14048 | goto label_27;
| }
0x00014028 cmp r0, 0x68 |
| if (r0 == 0x68) {
0x0001402c beq 0x141d0 | goto label_28;
| }
0x00014030 cmp r0, 0x69 |
| if (r0 == 0x69) {
0x00014034 orreq r4, r1, 1 | r4 = r1 | 1;
| goto label_29;
| }
| if (r0 != 0x69) {
| label_29:
0x00014038 bne 0x13ef0 | goto label_0;
| }
| label_1:
0x0001403c mov r0, r4 | r0 = r4;
0x00014040 add sp, sp, 0xc |
0x00014044 pop {r4, r5, r6, r7, r8, sb, pc} |
| label_27:
0x00014048 cmp r0, 0x6e |
0x0001404c ldr r5, [pc, 0x21c] | r5 = *(0x1426c);
| if (r0 == 0x6e) {
0x00014050 beq 0x14200 | goto label_30;
| }
0x00014054 cmp r0, 0x6f |
| if (r0 != 0x6f) {
0x00014058 bne 0x13ef0 | goto label_0;
| }
0x0001405c ldr r1, [r5, 0x94] | r1 = *((r5 + 0x94));
0x00014060 mov r0, 0 | r0 = 0;
0x00014064 bl 0x12a88 | fcn_00012a88 (r0, r1);
0x00014068 ldr r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x0001406c cmp r3, 0 |
0x00014070 str r0, [r5, 0x94] | *((r5 + 0x94)) = r0;
| if (r3 != 0) {
0x00014074 streq r0, [r5, 0x60] | *((r5 + 0x60)) = r0;
| }
0x00014078 b 0x1403c | goto label_1;
| label_25:
0x0001407c cmp r0, 0x75 |
0x00014080 ldr r3, [pc, 0x1e8] | r3 = *(0x1426c);
| if (r0 == 0x75) {
0x00014084 beq 0x14228 | goto label_31;
| }
| if (r0 > 0x75) {
0x00014088 bgt 0x140a8 | goto label_32;
| }
0x0001408c cmp r0, 0x72 |
| if (r0 == 0x72) {
0x00014090 beq 0x1421c | goto label_33;
| }
0x00014094 cmp r0, 0x73 |
| if (r0 != 0x73) {
0x00014098 moveq r2, 1 | r2 = 1;
| }
| if (r0 == 0x73) {
0x0001409c streq r2, [r3, 0x7c] | *((r3 + 0x7c)) = r2;
| goto label_34;
| }
| if (r0 == 0x73) {
| label_34:
0x000140a0 beq 0x1403c | goto label_1;
| }
0x000140a4 b 0x13ef0 | goto label_0;
| label_32:
0x000140a8 cmp r0, 0x77 |
| if (r0 == 0x77) {
0x000140ac beq 0x14244 | goto label_35;
| }
| if (r0 < 0x77) {
0x000140b0 blt 0x14238 | goto label_36;
| }
0x000140b4 cmp r0, 0x78 |
| if (r0 != 0x78) {
0x000140b8 ldreq r2, [r3, 0x90] | r2 = *((r3 + 0x90));
| }
| if (r0 == 0x78) {
0x000140bc orreq r2, r2, 2 | r2 |= 2;
| goto label_37;
| }
| if (r0 != 0x78) {
| label_37:
0x000140c0 bne 0x13ef0 | goto label_0;
| }
| label_6:
0x000140c4 str r2, [r3, 0x90] | *((r3 + 0x90)) = r2;
0x000140c8 b 0x1403c | goto label_1;
| label_12:
0x000140cc ldr r3, [pc, 0x19c] | r3 = *(0x1426c);
0x000140d0 mov r2, 1 | r2 = 1;
0x000140d4 str r2, [r3, 0x5c] | *((r3 + 0x5c)) = r2;
0x000140d8 b 0x1403c | goto label_1;
| label_17:
0x000140dc ldr r6, [r4, 0xc] | r6 = *((r4 + 0xc));
0x000140e0 mov r1, 0x5f | r1 = 0x5f;
0x000140e4 mov r0, r6 | r0 = r6;
0x000140e8 bl 0x10e54 | r0 = strchr (r0, r1);
0x000140ec cmp r0, 0 |
| if (r0 != 0) {
0x000140f0 bne 0x14134 | goto label_38;
| }
0x000140f4 cmp r5, 0 |
| if (r5 <= 0) {
0x000140f8 ble 0x14160 | goto label_39;
| }
0x000140fc ldrb r3, [r6] | r3 = *(r6);
0x00014100 cmp r3, 0 |
| if (r3 != 0) {
0x00014104 bne 0x1413c | goto label_40;
| }
0x00014108 mov r1, r5 | r1 = r5;
0x0001410c ldr r0, [pc, 0x1b0] | r0 = "Exit_status_is_0_if_any_matches__1_if_no_matches__and_2_if_trouble.";
0x00014110 bl 0x10c80 | r0 = printf ("Exit_status_is_0_if_any_matches__1_if_no_matches__and_2_if_trouble.", r1);
| do {
0x00014114 rsb r0, r0, 0x1f | r0 = 0x1f - r0;
0x00014118 cmp r0, 1 |
| if (r0 < 1) {
0x0001411c movge r1, r0 | r1 = r0;
| }
0x00014120 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00014124 mov r2, r7 | r2 = r7;
| if (r0 >= 1) {
0x00014128 movlt r1, 1 | r1 = 1;
| }
0x0001412c mov r0, r8 | r0 = r8;
0x00014130 bl 0x10c80 | printf (r0, r1, r2, r3);
| label_38:
0x00014134 add r4, r4, 0x14 | r4 += 0x14;
0x00014138 b 0x13f60 | goto label_2;
| label_40:
0x0001413c mov r2, r5 | r2 = r5;
0x00014140 ldr r1, [pc, 0x180] | r1 = " -%c";
0x00014144 add r0, sp, 4 | r0 += dest;
0x00014148 bl 0x10dd0 | sprintf (r0, " -%c", r2)
| label_3:
0x0001414c ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00014150 add r1, sp, 4 | r1 += dest;
0x00014154 mov r0, sb | r0 = sb;
0x00014158 bl 0x10c80 | printf (r0, r1, r2);
0x0001415c b 0x14114 |
| } while (1);
| label_39:
0x00014160 ldr r1, [pc, 0x164] | r1 = "-%c,";
0x00014164 add r0, sp, 4 | r0 += dest;
0x00014168 bl 0x10c74 | strcpy (r0, "-%c,");
0x0001416c b 0x1414c | goto label_3;
| label_16:
0x00014170 ldr r3, [pc, 0xf8] | r3 = *(0x1426c);
0x00014174 mov r2, 1 | r2 = 1;
0x00014178 str r2, [r3, 0x1c] | *((r3 + 0x1c)) = r2;
0x0001417c str r2, [r3, 0x58] | *((r3 + 0x58)) = r2;
0x00014180 b 0x1403c | goto label_1;
| label_14:
0x00014184 ldr r2, [r3, 0x8c] | r2 = *((r3 + 0x8c));
0x00014188 bic r2, r2, 1 | r2 = BIT_MASK (r2, 1);
0x0001418c str r2, [r3, 0x8c] | *((r3 + 0x8c)) = r2;
0x00014190 b 0x1403c | goto label_1;
| label_23:
0x00014194 mov r2, 2 | r2 = 2;
0x00014198 b 0x13fd8 | goto label_4;
| label_8:
0x0001419c ldr r3, [pc, 0xcc] | r3 = *(0x1426c);
0x000141a0 mov r2, 1 | r2 = 1;
0x000141a4 str r2, [r3, 0x50] | *((r3 + 0x50)) = r2;
0x000141a8 b 0x1403c | goto label_1;
| label_10:
0x000141ac ldr r2, [pc, 0xbc] | r2 = *(0x1426c);
0x000141b0 ldr r3, [r2, 0x90] | r3 = *(0x142fc);
0x000141b4 orr r3, r3, 4 | r3 |= 4;
0x000141b8 str r3, [r2, 0x90] | *((r2 + 0x90)) = r3;
0x000141bc b 0x1403c | goto label_1;
| label_20:
0x000141c0 ldr r3, [pc, 0x108] | r3 = "___";
0x000141c4 mov r2, 4 | r2 = 4;
| do {
| label_5:
0x000141c8 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000141cc b 0x1403c | goto label_1;
| label_28:
0x000141d0 ldr r3, [pc, 0xf8] | r3 = "___";
0x000141d4 mov r2, 0 | r2 = 0;
0x000141d8 b 0x141c8 |
| } while (1);
| label_26:
0x000141dc ldr r3, [pc, 0x8c] | r3 = *(0x1426c);
0x000141e0 mov r2, 1 | r2 = 1;
0x000141e4 str r2, [r3, 0x6c] | *((r3 + 0x6c)) = r2;
0x000141e8 ldr r3, [pc, 0xe0] | r3 = "___";
0x000141ec mov r2, 2 | r2 = 2;
0x000141f0 b 0x141c8 | goto label_5;
| label_18:
0x000141f4 ldr r3, [pc, 0xd4] | r3 = "___";
0x000141f8 mov r2, 3 | r2 = 3;
0x000141fc b 0x141c8 | goto label_5;
| label_30:
0x00014200 mov r3, 1 | r3 = 1;
0x00014204 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00014208 b 0x1403c | goto label_1;
| label_24:
0x0001420c ldr r3, [pc, 0x5c] | r3 = *(0x1426c);
0x00014210 mov r2, 1 | r2 = 1;
0x00014214 str r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x00014218 b 0x1403c | goto label_1;
| label_33:
0x0001421c mov r2, 2 | r2 = 2;
0x00014220 str r2, [r3, 0x70] | *((r3 + 0x70)) = r2;
0x00014224 b 0x1403c | goto label_1;
| label_31:
0x00014228 mov r2, 1 | r2 = 1;
0x0001422c orr r4, r1, 0x800 | r4 = r1 | 0x800;
0x00014230 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x00014234 b 0x1403c | goto label_1;
| label_36:
0x00014238 mov r2, 1 | r2 = 1;
0x0001423c str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x00014240 b 0x1403c | goto label_1;
| label_35:
0x00014244 ldr r2, [r3, 0x90] | r2 = *((r3 + 0x90));
0x00014248 orr r2, r2, 1 | r2 |= 1;
0x0001424c b 0x140c4 | goto label_6;
| label_22:
0x00014250 ldr r3, [pc, 0x7c] | r3 = "_standard_input_";
0x00014254 ldr r4, [r3] | r4 = "_standard_input_";
0x00014258 bl 0x10d28 | pcre_version ();
0x0001425c ldr r1, [pc, 0x74] | r1 = stdout;
0x00014260 mov r2, r0 | r2 = r0;
0x00014264 mov r0, r4 | r0 = r4;
0x00014268 bl 0x10d34 | fprintf (r0, r1, r2);
0x0001426c b 0x13fac | goto label_7;
| }
[*] Function sprintf used 3 times pcregrep