[*] Binary protection state of iostat
Full RELRO Canary found NX disabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of iostat
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/4325012-58052244.squashfs_v4_le_extract/usr/bin/iostat @ 0x35d8 */
| #include <stdint.h>
|
; (fcn) sym.add_list_device () | void add_list_device () {
0x000035d8 lui gp, 2 |
0x000035dc addiu gp, gp, 0x5ad8 |
0x000035e0 addu gp, gp, t9 | gp += t9;
0x000035e4 addiu sp, sp, -0x30 |
0x000035e8 lw t9, -0x7dd8(gp) | t9 = sym.imp.strnlen;
0x000035ec sw s1, 0x1c(sp) | *(var_1ch) = s1;
0x000035f0 move s1, a1 | s1 = a1;
0x000035f4 sw gp, 0x10(sp) | *(var_10h) = gp;
0x000035f8 sw s4, 0x28(sp) | *(var_28h) = s4;
0x000035fc sw s2, 0x20(sp) | *(var_20h) = s2;
0x00003600 sw ra, 0x2c(sp) | *(var_2ch) = ra;
0x00003604 sw s3, 0x24(sp) | *(var_24h) = s3;
0x00003608 sw s0, 0x18(sp) | *(var_18h) = s0;
0x0000360c move s2, a0 | s2 = a0;
0x00003610 addiu a1, zero, 0x80 | a1 = 0x80;
0x00003614 move a0, s1 | a0 = s1;
0x00003618 move s4, a2 | s4 = a2;
0x0000361c jalr t9 | t9 ();
0x00003620 addiu v1, zero, 0x80 | v1 = 0x80;
0x00003624 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == v1) {
0x00003628 beq v0, v1, 0x3808 | goto label_4;
| }
0x0000362c lw s0, (s2) | s0 = *(s2);
0x00003630 lw v0, -0x7fd4(gp) | v0 = *(gp);
| if (s0 == 0) {
0x00003634 beqz s0, 0x36b8 | goto label_5;
| }
0x00003638 lw s3, (v0) | s3 = *(v0);
0x0000363c andi s3, s3, 0x810 | s3 &= 0x810;
0x00003640 b 0x3664 |
| while (v0 != 0) {
0x00003644 addiu s2, s0, 0x98 | s2 = s0 + 0x98;
| if (s3 != 0) {
0x00003648 bnel s3, zero, 0x3658 |
0x0000364c lw t9, -0x7d7c(gp) | t9 = sym.imp.malloc;
| if (v0 > 0) {
0x00003650 bgtz v0, 0x36bc | goto label_6;
| }
0x00003654 addiu s2, s0, 0x98 | s2 = s0 + 0x98;
| }
0x00003658 lw s0, 0x98(s0) | s0 = *((s0 + 38));
0x0000365c lw t9, -0x7d7c(gp) | t9 = sym.imp.malloc;
| if (s0 == 0) {
0x00003660 beqz s0, 0x36bc | goto label_6;
| }
0x00003664 lw t9, -0x7d18(gp) | t9 = sym.imp.strcmp;
0x00003668 move a1, s1 | a1 = s1;
0x0000366c move a0, s0 | a0 = s0;
0x00003670 jalr t9 | t9 ();
0x00003674 lw gp, 0x10(sp) | gp = *(var_10h);
0x00003678 bnez v0, 0x3644 |
| }
0x0000367c addiu v0, zero, 2 | v0 = 2;
| if (s4 == v0) {
0x00003680 beql s4, v0, 0x37f4 | goto label_7;
| }
0x00003684 lw v1, 0x80(s0) | v1 = *((s0 + 32));
0x00003688 addiu v0, zero, 1 | v0 = 1;
| label_1:
0x0000368c sw v0, 0x84(s0) | *((s0 + 33)) = v0;
| label_2:
0x00003690 move s2, s0 | s2 = s0;
| label_3:
0x00003694 lw ra, 0x2c(sp) | ra = *(var_2ch);
0x00003698 move v0, s2 | v0 = s2;
0x0000369c lw s4, 0x28(sp) | s4 = *(var_28h);
0x000036a0 lw s3, 0x24(sp) | s3 = *(var_24h);
0x000036a4 lw s2, 0x20(sp) | s2 = *(var_20h);
0x000036a8 lw s1, 0x1c(sp) | s1 = *(var_1ch);
0x000036ac lw s0, 0x18(sp) | s0 = *(var_18h);
0x000036b0 addiu sp, sp, 0x30 |
0x000036b4 jr ra | return v0;
| label_5:
0x000036b8 lw t9, -0x7d7c(gp) | t9 = sym.imp.malloc;
| label_6:
0x000036bc addiu a0, zero, 0x9c | a0 = 0x9c;
0x000036c0 jalr t9 | t9 ();
0x000036c4 lw gp, 0x10(sp) | gp = *(var_10h);
0x000036c8 sw v0, (s2) | *(s2) = v0;
| if (v0 == 0) {
0x000036cc beqz v0, 0x3810 | goto label_8;
| }
0x000036d0 lw t9, -0x7dac(gp) | t9 = sym.imp.memset;
0x000036d4 addiu a2, zero, 0x9c | a2 = 0x9c;
0x000036d8 move a1, zero | a1 = 0;
0x000036dc move a0, v0 | a0 = v0;
0x000036e0 jalr t9 | t9 ();
0x000036e4 lw gp, 0x10(sp) | gp = *(var_10h);
0x000036e8 lw s2, (s2) | s2 = *(s2);
0x000036ec lw t9, -0x7d7c(gp) | t9 = sym.imp.malloc;
0x000036f0 addiu a0, zero, 0x40 | a0 = 0x40;
0x000036f4 jalr t9 | t9 ();
0x000036f8 lw gp, 0x10(sp) | gp = *(var_10h);
0x000036fc sw v0, 0x90(s2) | *((s2 + 36)) = v0;
| if (v0 == 0) {
0x00003700 beqz v0, 0x3810 | goto label_8;
| }
0x00003704 lw t9, -0x7dac(gp) | t9 = sym.imp.memset;
0x00003708 addiu a2, zero, 0x40 | a2 = 0x40;
0x0000370c move a1, zero | a1 = 0;
0x00003710 move a0, v0 | a0 = v0;
0x00003714 jalr t9 | t9 ();
0x00003718 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000371c lw t9, -0x7d7c(gp) | t9 = sym.imp.malloc;
0x00003720 addiu a0, zero, 0x40 | a0 = 0x40;
0x00003724 jalr t9 | t9 ();
0x00003728 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000372c sw v0, 0x94(s2) | *((s2 + 37)) = v0;
| if (v0 == 0) {
0x00003730 beqz v0, 0x3810 | goto label_8;
| }
0x00003734 lw t9, -0x7dac(gp) | t9 = sym.imp.memset;
0x00003738 addiu a2, zero, 0x40 | a2 = 0x40;
0x0000373c move a1, zero | a1 = 0;
0x00003740 move a0, v0 | a0 = v0;
0x00003744 jalr t9 | t9 ();
0x00003748 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000374c addiu a2, zero, 0x80 | a2 = 0x80;
0x00003750 move a1, s1 | a1 = s1;
0x00003754 lw t9, -0x7dd0(gp) | t9 = sym.imp.__strcpy_chk
0x00003758 move a0, s2 | a0 = s2;
0x0000375c jalr t9 | t9 ();
0x00003760 addiu v1, zero, 1 | v1 = 1;
0x00003764 addiu v0, zero, 3 | v0 = 3;
0x00003768 lw gp, 0x10(sp) | gp = *(var_10h);
0x0000376c sw v1, 0x84(s2) | *((s2 + 33)) = v1;
0x00003770 sw s0, 0x98(s2) | *((s2 + 38)) = s0;
| if (s4 != v0) {
0x00003774 bne s4, v0, 0x37a0 | goto label_9;
| }
0x00003778 sw s4, 0x80(s2) | *((s2 + 32)) = s4;
| do {
| label_0:
0x0000377c lw ra, 0x2c(sp) | ra = *(var_2ch);
0x00003780 move v0, s2 | v0 = s2;
0x00003784 lw s4, 0x28(sp) | s4 = *(var_28h);
0x00003788 lw s3, 0x24(sp) | s3 = *(var_24h);
0x0000378c lw s2, 0x20(sp) | s2 = *(var_20h);
0x00003790 lw s1, 0x1c(sp) | s1 = *(var_1ch);
0x00003794 lw s0, 0x18(sp) | s0 = *(var_18h);
0x00003798 addiu sp, sp, 0x30 |
0x0000379c jr ra | return v0;
| label_9:
0x000037a0 lw t9, -0x7fb0(gp) | t9 = sym.is_device;
0x000037a4 addiu a1, zero, 1 | a1 = 1;
0x000037a8 move a0, s1 | a0 = s1;
0x000037ac bal 0x99ac | sym_is_device ();
0x000037b0 lw ra, 0x2c(sp) | ra = *(var_2ch);
| if (v0 == 0) {
0x000037b4 beqz v0, 0x37d0 | goto label_10;
| }
0x000037b8 addiu v0, zero, 2 | v0 = 2;
0x000037bc beql s4, v0, 0x377c |
| } while (s4 == v0);
0x000037c0 sw s4, 0x80(s2) | *((s2 + 32)) = s4;
0x000037c4 addiu s4, zero, 1 | s4 = 1;
0x000037c8 sw s4, 0x80(s2) | *((s2 + 32)) = s4;
0x000037cc b 0x377c | goto label_0;
| label_10:
0x000037d0 sw zero, 0x80(s2) | *((s2 + 32)) = 0;
0x000037d4 move v0, s2 | v0 = s2;
0x000037d8 lw s4, 0x28(sp) | s4 = *(var_28h);
0x000037dc lw s3, 0x24(sp) | s3 = *(var_24h);
0x000037e0 lw s2, 0x20(sp) | s2 = *(var_20h);
0x000037e4 lw s1, 0x1c(sp) | s1 = *(var_1ch);
0x000037e8 lw s0, 0x18(sp) | s0 = *(var_18h);
0x000037ec addiu sp, sp, 0x30 |
0x000037f0 jr ra | return v0;
| label_7:
0x000037f4 addiu v0, zero, 1 | v0 = 1;
| if (v1 == v0) {
0x000037f8 beql v1, v0, 0x368c | goto label_1;
| }
0x000037fc sw s4, 0x80(s0) | *((s0 + 32)) = s4;
0x00003800 sw v0, 0x84(s0) | *((s0 + 33)) = v0;
0x00003804 b 0x3690 | goto label_2;
| label_4:
0x00003808 move s2, zero | s2 = 0;
0x0000380c b 0x3694 | goto label_3;
| label_8:
0x00003810 lw a0, -0x7fcc(gp) | a0 = *(gp);
0x00003814 lw t9, -0x7d6c(gp) | t9 = sym.imp.perror;
0x00003818 addiu a0, a0, -0x674 | a0 += -0x674;
0x0000381c jalr t9 | t9 ();
0x00003820 lw gp, 0x10(sp) | gp = *(var_10h);
0x00003824 lw t9, -0x7d8c(gp) | t9 = sym.imp.exit;
0x00003828 addiu a0, zero, 4 | a0 = 4;
0x0000382c jalr t9 | return t9 ();
| }
[*] Function strcpy used 2 times iostat