[*] Binary protection state of libuClibc++-0.2.4.so
Full RELRO No Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcat tear down of libuClibc++-0.2.4.so
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/1568982-13971496.squashfs_v4_le_extract/usr/lib/libuClibc++-0.2.4.so @ 0x10aa0 */
| #include <stdint.h>
|
; (fcn) method.std::basic_filebuf_wchar_t__std::char_traits_wchar_t___.overflow_unsigned_int_ () | void method_std::basic_filebuf_wchar_t_std::char_traits_wchar_t_overflow_unsigned_int_ () {
| /* std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::overflow(unsigned int) */
0x00010aa0 lui gp, 4 |
0x00010aa4 addiu gp, gp, -0x7a60 |
0x00010aa8 addu gp, gp, t9 | gp += t9;
0x00010aac addiu sp, sp, -0x48 |
0x00010ab0 lw v0, 0x24(a0) | v0 = *((a0 + 9));
0x00010ab4 sw gp, 0x10(sp) | *(var_10h) = gp;
0x00010ab8 sw ra, 0x44(sp) | *(var_44h) = ra;
0x00010abc sw s6, 0x40(sp) | *(var_40h) = s6;
0x00010ac0 sw s5, 0x3c(sp) | *(var_3ch) = s5;
0x00010ac4 sw s4, 0x38(sp) | *(var_38h) = s4;
0x00010ac8 sw s3, 0x34(sp) | *(var_34h) = s3;
0x00010acc sw s2, 0x30(sp) | *(var_30h) = s2;
0x00010ad0 sw s1, 0x2c(sp) | *(var_2ch) = s1;
0x00010ad4 sw s0, 0x28(sp) | *(var_28h) = s0;
0x00010ad8 move s0, a0 | s0 = a0;
| if (v0 == 0) {
0x00010adc bnez v0, 0x10b10 |
| label_0:
0x00010ae0 addiu s1, zero, -1 | s1 = -1;
| label_3:
0x00010ae4 lw ra, 0x44(sp) | ra = *(var_44h);
| label_1:
0x00010ae8 move v0, s1 | v0 = s1;
0x00010aec lw s6, 0x40(sp) | s6 = *(var_40h);
0x00010af0 lw s5, 0x3c(sp) | s5 = *(var_3ch);
0x00010af4 lw s4, 0x38(sp) | s4 = *(var_38h);
0x00010af8 lw s3, 0x34(sp) | s3 = *(var_34h);
0x00010afc lw s2, 0x30(sp) | s2 = *(var_30h);
0x00010b00 lw s1, 0x2c(sp) | s1 = *(var_2ch);
0x00010b04 lw s0, 0x28(sp) | s0 = *(var_28h);
0x00010b08 addiu sp, sp, 0x48 |
0x00010b0c jr ra | return v0;
| }
0x00010b10 lw v0, 0x14(a0) | v0 = *((a0 + 5));
0x00010b14 move s1, a1 | s1 = a1;
0x00010b18 sw zero, 0x20(sp) | *(var_20h) = 0;
0x00010b1c sw zero, 0x24(sp) | *(var_24h) = 0;
| if (v0 == 0) {
0x00010b20 beqz v0, 0x10bb4 | goto label_4;
| }
0x00010b24 move s2, zero | s2 = 0;
0x00010b28 addiu s5, sp, 0x20 | s5 = sp + 0x20;
0x00010b2c addiu s4, sp, 0x18 | s4 = sp + 0x18;
0x00010b30 addiu s6, zero, -1 | s6 = -1;
| do {
0x00010b34 lw v1, 0x14(s0) | v1 = *((s0 + 5));
0x00010b38 sll s3, s2, 2 | s3 = s2 << 2;
0x00010b3c addu v0, v1, s3 | v0 = v1 + s3;
0x00010b40 lw a0, 0x18(s0) | a0 = *((s0 + 6));
| if (v1 == 0) {
0x00010b44 beqz v1, 0x10b94 | goto label_5;
| }
0x00010b48 lw t9, -0x7ee0(gp) | t9 = *((gp - 8120));
| if (v0 == a0) {
0x00010b4c beq v0, a0, 0x10b94 | goto label_5;
| }
0x00010b50 lw a1, (v0) | a1 = *(v0);
0x00010b54 addiu a3, zero, 8 | a3 = 8;
0x00010b58 move a2, s5 | a2 = s5;
0x00010b5c move a0, s4 | a0 = s4;
0x00010b60 jalr t9 | t9 ();
0x00010b64 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == s6) {
0x00010b68 beq v0, s6, 0x10b94 | goto label_5;
| }
0x00010b6c lw t9, -0x7c4c(gp) | t9 = *((gp - 7955));
0x00010b70 lw a3, 0x24(s0) | a3 = *((s0 + 9));
0x00010b74 addiu a2, zero, 1 | a2 = 1;
0x00010b78 move a1, v0 | a1 = v0;
0x00010b7c move a0, s4 | a0 = s4;
0x00010b80 jalr t9 | t9 ();
0x00010b84 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == 0) {
0x00010b88 beqz v0, 0x10b94 | goto label_5;
| }
0x00010b8c addiu s2, s2, 1 | s2++;
0x00010b90 b 0x10b34 |
| } while (1);
| label_5:
0x00010b94 lw a2, 0x14(s0) | a2 = *((s0 + 5));
0x00010b98 lw v1, 0x18(s0) | v1 = *((s0 + 6));
0x00010b9c addu s3, a2, s3 | s3 = a2 + s3;
0x00010ba0 negu a0, s2 | __asm ("negu a0, s2");
| if (v1 != s3) {
0x00010ba4 bne v1, s3, 0x10c08 | goto label_6;
| }
0x00010ba8 sll a0, a0, 2 | a0 <<= 2;
0x00010bac addu v1, v1, a0 | v1 += a0;
0x00010bb0 sw v1, 0x18(s0) | *((s0 + 6)) = v1;
| label_4:
0x00010bb4 addiu s3, zero, -1 | s3 = -1;
0x00010bb8 lw t9, -0x7ee0(gp) | t9 = *((gp - 8120));
| if (s1 == s3) {
0x00010bbc beq s1, s3, 0x10c40 | goto label_7;
| }
0x00010bc0 addiu s2, sp, 0x18 | s2 = sp + 0x18;
0x00010bc4 addiu a3, zero, 8 | a3 = 8;
0x00010bc8 addiu a2, sp, 0x20 | a2 = sp + 0x20;
0x00010bcc move a1, s1 | a1 = s1;
0x00010bd0 move a0, s2 | a0 = s2;
0x00010bd4 jalr t9 | t9 ();
0x00010bd8 lw gp, 0x10(sp) | gp = *(var_10h);
| if (v0 == s3) {
0x00010bdc beq v0, s3, 0x10ae0 | goto label_0;
| }
0x00010be0 lw t9, -0x7c4c(gp) | t9 = *((gp - 7955));
0x00010be4 lw a3, 0x24(s0) | a3 = *((s0 + 9));
0x00010be8 addiu a2, zero, 1 | a2 = 1;
0x00010bec move a1, v0 | a1 = v0;
0x00010bf0 move a0, s2 | a0 = s2;
0x00010bf4 jalr t9 | t9 ();
0x00010bf8 lw ra, 0x44(sp) | ra = *(var_44h);
| if (v0 != 0) {
0x00010bfc bnez v0, 0x10ae8 | goto label_1;
| }
0x00010c00 addiu s1, zero, -1 | s1 = -1;
0x00010c04 b 0x10ae8 | goto label_1;
| label_6:
0x00010c08 subu v0, v1, a2 | __asm ("subu v0, v1, a2");
0x00010c0c sra v0, v0, 2 | v0 >>= 2;
0x00010c10 subu v0, v0, s2 | __asm ("subu v0, v0, s2");
0x00010c14 sll v0, v0, 2 | v0 <<= 2;
0x00010c18 sll a0, a0, 2 | a0 <<= 2;
0x00010c1c move a1, zero | a1 = 0;
| label_2:
0x00010c20 addu a3, a1, a0 | a3 = a1 + a0;
| if (a1 == v0) {
0x00010c24 beq a1, v0, 0x10ae0 | goto label_0;
| }
0x00010c28 addu a3, v1, a3 | a3 = v1 + a3;
0x00010c2c lw t0, (a3) | t0 = *(a3);
0x00010c30 addu a3, a2, a1 | a3 = a2 + a1;
0x00010c34 addiu a1, a1, 4 | a1 += 4;
0x00010c38 sw t0, (a3) | *(a3) = t0;
0x00010c3c b 0x10c20 | goto label_2;
| label_7:
0x00010c40 move s1, zero | s1 = 0;
0x00010c44 b 0x10ae4 | goto label_3;
| }
[*] Function strcat used 1 times libuClibc++-0.2.4.so