[*] Binary protection state of parhand
Full RELRO Canary found NX disabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function popen tear down of parhand
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/4325012-58052244.squashfs_v4_le_extract/usr/bin/parhand @ 0x90e8 */
| #include <stdint.h>
|
; (fcn) sym.map_updateRunGetter () | void map_updateRunGetter () {
0x000090e8 lui gp, 4 |
0x000090ec addiu gp, gp, -0x5d98 |
0x000090f0 addu gp, gp, t9 | gp += t9;
0x000090f4 lw v0, -0x7fb4(gp) | v0 = *(gp);
0x000090f8 addiu sp, sp, -0x40 |
0x000090fc sw s0, 0x1c(sp) | *(var_1ch) = s0;
0x00009100 lw s0, (v0) | s0 = *(v0);
0x00009104 sw gp, 0x10(sp) | *(var_10h) = gp;
0x00009108 sw ra, 0x3c(sp) | *(var_3ch) = ra;
0x0000910c sw s7, 0x38(sp) | *(var_38h) = s7;
0x00009110 sw s6, 0x34(sp) | *(var_34h) = s6;
0x00009114 sw s5, 0x30(sp) | *(var_30h) = s5;
0x00009118 sw s4, 0x2c(sp) | *(var_2ch) = s4;
0x0000911c sw s3, 0x28(sp) | *(var_28h) = s3;
0x00009120 sw s2, 0x24(sp) | *(var_24h) = s2;
0x00009124 sw s1, 0x20(sp) | *(var_20h) = s1;
0x00009128 lw ra, 0x3c(sp) | ra = *(var_3ch);
| if (s0 != 0) {
0x0000912c bnez s0, 0x91c0 | goto label_2;
| }
0x00009130 move s3, a1 | s3 = a1;
| if (a1 == 0) {
0x00009134 beqz a1, 0x91c0 | goto label_2;
| }
0x00009138 lw a1, -0x7fc4(gp) | a1 = *(gp);
0x0000913c lw t9, -0x7d04(gp) | t9 = sym.imp.strncmp;
0x00009140 move s6, a0 | s6 = a0;
0x00009144 addiu a2, zero, 8 | a2 = 8;
| /* str.disabled */
0x00009148 addiu a1, a1, 0x6320 | a1 += 0x6320;
0x0000914c move a0, s3 | a0 = s3;
0x00009150 jalr t9 | t9 ();
0x00009154 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == 0) {
0x00009158 beqz v0, 0x91bc | goto label_3;
| }
0x0000915c lw v0, 0x34(s6) | v0 = *((s6 + 13));
0x00009160 lw a1, -0x7fbc(gp) | a1 = *((gp - 8175));
| if (v0 == 0) {
0x00009164 beqz v0, 0x91ec | goto label_4;
| }
0x00009168 lw s1, 0x2c(s6) | s1 = *((s6 + 11));
0x0000916c lw s2, -0x7fc4(gp) | s2 = *(gp);
| if (s1 == 0) {
0x00009170 beqz s1, 0x91ec | goto label_4;
| }
| /* esilref: 'type' */
0x00009174 addiu s2, s2, 0x658c | s2 += 0x658c;
0x00009178 b 0x9188 |
| while (v0 != 0) {
0x0000917c lw s1, (s1) | s1 = *(s1);
0x00009180 lw a1, -0x7fbc(gp) | a1 = *((gp - 8175));
| if (s1 == 0) {
0x00009184 beqz s1, 0x91ec | goto label_4;
| }
0x00009188 lw t9, -0x7d40(gp) | t9 = sym.imp.strcmp;
0x0000918c lw a0, 4(s1) | a0 = *((s1 + 1));
0x00009190 move a1, s2 | a1 = s2;
0x00009194 jalr t9 | t9 ();
0x00009198 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000919c bnez v0, 0x917c |
| }
0x000091a0 lw a1, -0x7fc4(gp) | a1 = *(gp);
0x000091a4 lw t9, -0x7c98(gp) | t9 = sym.imp.strstr;
0x000091a8 lw a0, 8(s1) | a0 = *((s1 + 2));
| /* str.const */
0x000091ac addiu a1, a1, 0x66e0 | a1 += 0x66e0;
0x000091b0 jalr t9 | t9 ();
0x000091b4 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 != 0) {
0x000091b8 beqz v0, 0x91e8 |
| label_3:
0x000091bc lw ra, 0x3c(sp) | ra = *(var_3ch);
| label_2:
0x000091c0 lw s7, 0x38(sp) | s7 = *(var_38h);
0x000091c4 lw s6, 0x34(sp) | s6 = *(var_34h);
0x000091c8 lw s5, 0x30(sp) | s5 = *(var_30h);
0x000091cc lw s4, 0x2c(sp) | s4 = *(var_2ch);
0x000091d0 lw s3, 0x28(sp) | s3 = *(var_28h);
0x000091d4 lw s2, 0x24(sp) | s2 = *(var_24h);
0x000091d8 lw s1, 0x20(sp) | s1 = *(var_20h);
0x000091dc lw s0, 0x1c(sp) | s0 = *(var_1ch);
0x000091e0 addiu sp, sp, 0x40 |
0x000091e4 jr ra | return v0;
| }
0x000091e8 lw a1, -0x7fbc(gp) | a1 = *((gp - 8175));
| label_4:
0x000091ec lw t9, -0x7bc0(gp) | t9 = sym.imp.popen
0x000091f0 addiu a1, a1, -0x6754 | a1 += -0x6754;
0x000091f4 move a0, s3 | a0 = s3;
0x000091f8 jalr t9 | t9 ();
0x000091fc move s4, v0 | s4 = v0;
0x00009200 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == 0) {
0x00009204 beqz v0, 0x9380 | goto label_5;
| }
0x00009208 lw t9, -0x7cac(gp) | t9 = sym.imp.malloc;
0x0000920c addiu a0, zero, 0x10 | a0 = 0x10;
0x00009210 jalr t9 | t9 ();
0x00009214 move s2, v0 | s2 = v0;
0x00009218 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000921c addiu s1, zero, 0x10 | s1 = 0x10;
0x00009220 addiu s5, zero, -1 | s5 = -1;
| if (v0 != 0) {
0x00009224 bnez v0, 0x92a8 | goto label_6;
| }
0x00009228 lw a0, -0x7fc4(gp) | a0 = *(gp);
0x0000922c lw a2, -0x7fc4(gp) | a2 = *(gp);
0x00009230 lw a1, -0x7fc4(gp) | a1 = *(gp);
0x00009234 lw t9, -0x7fc8(gp) | t9 = sym.fatald;
| /* str.axismapping.c */
0x00009238 addiu a0, a0, 0x61a4 | a0 += 0x61a4;
| /* str.map_updateRunGetter */
0x0000923c addiu a2, a2, 0x6788 | a2 += 0x6788;
| /* str.Out_of_memory_in__s_ */
0x00009240 addiu a1, a1, 0x6688 | a1 += 0x6688;
0x00009244 bal 0x199c0 | sym_fatald ();
0x00009248 lw gp, 0x10(sp) | gp = *(var_10h);
| label_1:
0x0000924c lw ra, 0x3c(sp) | ra = *(var_3ch);
0x00009250 lw s7, 0x38(sp) | s7 = *(var_38h);
0x00009254 lw s6, 0x34(sp) | s6 = *(var_34h);
0x00009258 lw s5, 0x30(sp) | s5 = *(var_30h);
0x0000925c lw s3, 0x28(sp) | s3 = *(var_28h);
0x00009260 lw s2, 0x24(sp) | s2 = *(var_24h);
0x00009264 lw s1, 0x20(sp) | s1 = *(var_20h);
0x00009268 lw s0, 0x1c(sp) | s0 = *(var_1ch);
0x0000926c move a0, s4 | a0 = s4;
0x00009270 lw t9, -0x7cbc(gp) | t9 = sym.imp.pclose;
0x00009274 lw s4, 0x2c(sp) | s4 = *(var_2ch);
0x00009278 addiu sp, sp, 0x40 |
0x0000927c jr t9 | t9 ();
| label_0:
0x00009280 addiu s1, s1, 0x10 | s1 += 0x10;
0x00009284 move a0, s2 | a0 = s2;
0x00009288 move a1, s1 | a1 = s1;
0x0000928c jalr t9 | t9 ();
0x00009290 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == 0) {
0x00009294 beqz v0, 0x93c8 | goto label_7;
| }
0x00009298 move s2, v0 | s2 = v0;
0x0000929c addu v0, s2, s0 | v0 = s2 + s0;
| do {
0x000092a0 addiu s0, s0, 1 | s0++;
0x000092a4 sb s7, (v0) | *(v0) = s7;
| label_6:
0x000092a8 lw t9, -0x7c54(gp) | t9 = sym.imp.fgetc;
0x000092ac move a0, s4 | a0 = s4;
0x000092b0 jalr t9 | t9 ();
0x000092b4 addiu v1, s1, -1 | v1 = s1 + -1;
0x000092b8 lw gp, 0x10(sp) | gp = *(var_10h);
0x000092bc move s7, v0 | s7 = v0;
0x000092c0 slt v1, s0, v1 | v1 = (s0 < v1) ? 1 : 0;
| if (v0 == s5) {
0x000092c4 beq v0, s5, 0x92d8 | goto label_8;
| }
0x000092c8 addu v0, s2, s0 | v0 = s2 + s0;
0x000092cc bnez v1, 0x92a0 |
| } while (v1 != 0);
0x000092d0 lw t9, -0x7b60(gp) | t9 = sym.imp.realloc;
0x000092d4 b 0x9280 | goto label_0;
| label_8:
0x000092d8 addu s0, s2, s0 | s0 = s2 + s0;
0x000092dc lw t9, -0x7cbc(gp) | t9 = sym.imp.pclose;
0x000092e0 sb zero, (s0) | *(s0) = 0;
0x000092e4 move a0, s4 | a0 = s4;
0x000092e8 jalr t9 | t9 ();
0x000092ec lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == s5) {
0x000092f0 beq v0, s5, 0x9348 | goto label_9;
| }
0x000092f4 lw t9, -0x7f3c(gp) | t9 = sym.legacy_drep_assignStringToCustom;
0x000092f8 lw a0, 0x6c(s6) | a0 = *((s6 + 27));
0x000092fc move a2, zero | a2 = 0;
0x00009300 move a1, s2 | a1 = s2;
0x00009304 bal 0xe330 | sym_legacy_drep_assignStringToCustom ();
0x00009308 addiu v0, zero, 1 | v0 = 1;
0x0000930c lw gp, 0x10(sp) | gp = *(var_10h);
0x00009310 sw v0, 0x34(s6) | *((s6 + 13)) = v0;
| do {
0x00009314 lw ra, 0x3c(sp) | ra = *(var_3ch);
0x00009318 lw s7, 0x38(sp) | s7 = *(var_38h);
0x0000931c lw s6, 0x34(sp) | s6 = *(var_34h);
0x00009320 lw s5, 0x30(sp) | s5 = *(var_30h);
0x00009324 lw s4, 0x2c(sp) | s4 = *(var_2ch);
0x00009328 lw s3, 0x28(sp) | s3 = *(var_28h);
0x0000932c lw s1, 0x20(sp) | s1 = *(var_20h);
0x00009330 lw s0, 0x1c(sp) | s0 = *(var_1ch);
0x00009334 move a0, s2 | a0 = s2;
0x00009338 lw t9, -0x7bec(gp) | t9 = sym.imp.free;
0x0000933c lw s2, 0x24(sp) | s2 = *(var_24h);
0x00009340 addiu sp, sp, 0x40 |
0x00009344 jr t9 | t9 ();
| label_9:
0x00009348 lw a1, -0x7fc4(gp) | a1 = *(gp);
0x0000934c lw a0, -0x7fc4(gp) | a0 = *(gp);
0x00009350 lw t9, -0x7fb0(gp) | t9 = sym.logerr;
0x00009354 lw a2, 0x28(s6) | a2 = *((s6 + 10));
0x00009358 move a3, s3 | a3 = s3;
| /* str.Unable_to_get_value_for_param__s._Script__s_returned_error. */
0x0000935c addiu a1, a1, 0x66a0 | a1 += 0x66a0;
| /* str.axismapping.c */
0x00009360 addiu a0, a0, 0x61a4 | a0 += 0x61a4;
0x00009364 bal 0x19b80 | sym_logerr ();
0x00009368 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000936c lw t9, -0x7f30(gp) | t9 = sym.legacy_drep_resetData;
0x00009370 addiu a0, s6, 0x6c | a0 = s6 + 0x6c;
0x00009374 bal 0xf3e4 | sym_legacy_drep_resetData ();
0x00009378 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000937c b 0x9314 |
| } while (1);
| label_5:
0x00009380 lw a1, -0x7fc4(gp) | a1 = *(gp);
0x00009384 lw a0, -0x7fc4(gp) | a0 = *(gp);
0x00009388 lw a2, 0x28(s6) | a2 = *((s6 + 10));
0x0000938c lw ra, 0x3c(sp) | ra = *(var_3ch);
0x00009390 lw s7, 0x38(sp) | s7 = *(var_38h);
0x00009394 lw s6, 0x34(sp) | s6 = *(var_34h);
0x00009398 lw s5, 0x30(sp) | s5 = *(var_30h);
0x0000939c lw s4, 0x2c(sp) | s4 = *(var_2ch);
0x000093a0 lw s2, 0x24(sp) | s2 = *(var_24h);
0x000093a4 lw s1, 0x20(sp) | s1 = *(var_20h);
0x000093a8 lw s0, 0x1c(sp) | s0 = *(var_1ch);
0x000093ac move a3, s3 | a3 = s3;
0x000093b0 lw t9, -0x7fb0(gp) | t9 = sym.logerr;
0x000093b4 lw s3, 0x28(sp) | s3 = *(var_28h);
| /* str.Unable_to_get_value_for_param__s._Failed_to_execute_script__s. */
0x000093b8 addiu a1, a1, 0x6644 | a1 += 0x6644;
| /* str.axismapping.c */
0x000093bc addiu a0, a0, 0x61a4 | a0 += 0x61a4;
0x000093c0 addiu sp, sp, 0x40 |
0x000093c4 b 0x19b80 | void (*0x19b80)() ();
| label_7:
0x000093c8 lw a2, -0x7fc4(gp) | a2 = *(gp);
0x000093cc lw a1, -0x7fc4(gp) | a1 = *(gp);
0x000093d0 lw a0, -0x7fc4(gp) | a0 = *(gp);
0x000093d4 lw t9, -0x7fc8(gp) | t9 = sym.fatald;
| /* str.map_updateRunGetter */
0x000093d8 addiu a2, a2, 0x6788 | a2 += 0x6788;
| /* str.Out_of_memory_in__s_ */
0x000093dc addiu a1, a1, 0x6688 | a1 += 0x6688;
| /* str.axismapping.c */
0x000093e0 addiu a0, a0, 0x61a4 | a0 += 0x61a4;
0x000093e4 bal 0x199c0 | sym_fatald ();
0x000093e8 lw gp, 0x10(sp) | gp = *(var_10h);
0x000093ec lw t9, -0x7bec(gp) | t9 = sym.imp.free;
0x000093f0 move a0, s2 | a0 = s2;
0x000093f4 jalr t9 | t9 ();
0x000093f8 lw gp, 0x10(sp) | gp = *(var_10h);
0x000093fc b 0x924c | goto label_1;
| }
[*] Function popen used 2 times parhand