[*] Binary protection state of libstdc++.so.6.0.29
Full RELRO No Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of libstdc++.so.6.0.29
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xe5414 */
| #include <stdint.h>
|
; (fcn) fcn.000e5414 () | void fcn_000e5414 (uint32_t arg1, int16_t arg2, uint32_t arg3) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000e5414 invalid |
0x000e5418 ldrd r0, r4, [r0] | __asm ("ldrd r0, r4, [r0]");
0x000e541c sub sp, 8 |
0x000e541e sub.w r4, r4, -1 | r4 -= -1;
0x000e5422 clz r4, r4 | r4 &= r4;
0x000e5426 lsrs r4, r4, 5 | r4 >>= 5;
0x000e5428 cmp r0, 0 |
0x000e542a ite eq |
| if (r0 != 0) {
0x000e542c moveq r6, 0 | r6 = 0;
| }
| if (r0 == 0) {
0x000e542e andne r6, r4, 1 | r6 = r4 & 1;
| }
0x000e5432 cbnz r6, 0xe545a |
| while (1) {
0x000e5434 ldrd r3, r0, [r1] | __asm ("ldrd r3, r0, [r1]");
0x000e5438 sub.w r0, r0, -1 | r0 -= -1;
0x000e543c clz r0, r0 | r0 &= r0;
0x000e5440 lsrs r0, r0, 5 | r0 >>= 5;
0x000e5442 cmp r3, 0 |
0x000e5444 ite eq |
| if (r3 != 0) {
0x000e5446 moveq r5, 0 | r5 = 0;
| }
| if (r3 == 0) {
0x000e5448 andne r5, r0, 1 | r5 = r0 & 1;
| }
| if (r5 != 0) {
0x000e544c cbnz r5, 0xe5472 | goto label_2;
| }
| label_0:
0x000e544e subs r0, r4, r0 | r0 = r4 - r0;
0x000e5450 clz r0, r0 | r0 &= r0;
0x000e5454 lsrs r0, r0, 5 | r0 >>= 5;
0x000e5456 add sp, 8 |
0x000e5458 pop {r4, r5, r6, pc} |
0x000e545a ldrd r3, r2, [r0, 8] | __asm ("ldrd r3, r2, [r0, 8]");
0x000e545e cmp r3, r2 |
| if (r3 >= r2) {
0x000e5460 bhs 0xe548a | goto label_3;
| }
0x000e5462 ldr r0, [r3] | r0 = *(r3);
| label_1:
0x000e5464 adds r0, 1 | r0++;
0x000e5466 ittet eq |
| if (r0 != 1) {
0x000e5468 moveq r3, 0 | r3 = 0;
| }
| if (r0 != 1) {
0x000e546a moveq r4, r6 | r4 = r6;
| }
| if (r0 == 1) {
0x000e546c movne r4, 0 | r4 = 0;
| }
| if (r0 != 1) {
0x000e546e streq r3, [r5] | *(r5) = r3;
| }
0x000e5470 b 0xe5434 |
| }
| label_2:
0x000e5472 ldrd r2, r0, [r3, 8] | __asm ("ldrd r2, r0, [r3, 8]");
0x000e5476 cmp r2, r0 |
| if (r2 >= r0) {
0x000e5478 bhs 0xe5496 | goto label_4;
| }
0x000e547a ldr r0, [r2] | r0 = *(r2);
| do {
0x000e547c adds r0, 1 | r0++;
0x000e547e ittet eq |
| if (r0 != 1) {
0x000e5480 moveq r3, 0 | r3 = 0;
| }
| if (r0 != 1) {
0x000e5482 moveq r0, r5 | r0 = r5;
| }
| if (r0 == 1) {
0x000e5484 movne r0, 0 | r0 = 0;
| }
| if (r0 != 1) {
0x000e5486 streq r3, [r1] | *(r1) = r3;
| }
0x000e5488 b 0xe544e | goto label_0;
| label_3:
0x000e548a ldr r3, [r0] | r3 = *(r0);
0x000e548c str r1, [sp, 4] | var_4h = r1;
0x000e548e ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000e5490 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x000e5492 ldr r1, [sp, 4] | r1 = var_4h;
0x000e5494 b 0xe5464 | goto label_1;
| label_4:
0x000e5496 ldr r2, [r3] | r2 = *(r3);
0x000e5498 mov r0, r3 | r0 = r3;
0x000e549a str r1, [sp, 4] | var_4h = r1;
0x000e549c ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000e549e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000e54a0 ldr r1, [sp, 4] | r1 = var_4h;
0x000e54a2 b 0xe547c |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xec374 */
| #include <stdint.h>
|
; (fcn) method.std::__cxx11::basic_string_wchar_t__std::char_traits_wchar_t___std::allocator_wchar_t___._M_mutate_unsigned_int__unsigned_int__wchar_t_const__unsigned_int_ () | void method_std::_cxx11::basic_string_wchar_t_std::char_traits_wchar_t_std::allocator_wchar_t_M_mutate_unsigned_int_unsigned_int_wchar_t_const_unsigned_int_ (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_mutate(unsigned int, unsigned int, wchar_t const*, unsigned int) */
0x000ec374 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ec378 sub sp, 0xc |
0x000ec37a ldr.w fp, [sp, 0x30] | fp = *(arg_30h);
0x000ec37e mov sl, r3 | sl = r3;
0x000ec380 mov sb, r0 | sb = r0;
0x000ec382 mov r5, r1 | r5 = r1;
0x000ec384 ldr r7, [r0, 4] | r7 = *((r0 + 4));
0x000ec386 adds r6, r1, r2 | r6 = r1 + r2;
0x000ec388 sub.w r3, fp, r2 | r3 = fp - r2;
0x000ec38c add r1, sp, 4 | r1 += var_4h;
0x000ec38e mov r4, r0 | r4 = r0;
0x000ec390 add r3, r7 | r3 += r7;
0x000ec392 subs r7, r7, r6 | r7 -= r6;
0x000ec394 str r3, [sp, 4] | var_4h = r3;
0x000ec396 ldr r3, [sb], 8 | r3 = *(sb);
| sb += 8;
0x000ec39a cmp sb, r3 |
0x000ec39c ite ne |
| if (sb == r3) {
0x000ec39e ldrne r2, [r0, 8] | r2 = *((r0 + 8));
| }
| if (sb != r3) {
0x000ec3a0 moveq r2, 3 | r2 = 3;
| }
0x000ec3a2 blx 0x77d68 | r0 = fcn_00077d68 ();
0x000ec3a6 mov r8, r0 | r8 = r0;
| if (r5 == 0) {
0x000ec3a8 cbz r5, 0xec3b6 | goto label_2;
| }
0x000ec3aa cmp r5, 1 |
0x000ec3ac ldr r1, [r4] | r1 = *(r4);
| if (r5 == 1) {
0x000ec3ae beq 0xec406 | goto label_3;
| }
0x000ec3b0 mov r2, r5 | r2 = r5;
0x000ec3b2 blx 0x78d44 | fcn_00078d44 ();
| do {
| label_2:
0x000ec3b6 cmp.w sl, 0 |
0x000ec3ba it ne |
| if (sl != 0) {
0x000ec3bc cmpne fp, 0 | __asm ("cmpne fp, 0");
| }
| if (sl != 0) {
0x000ec3c0 beq 0xec3d4 |
0x000ec3c2 cmp.w fp, 1 |
0x000ec3c6 add.w r0, r8, r5, lsl 2 | r0 = r8 + (r5 << 2);
| if (fp == 1) {
0x000ec3ca beq 0xec416 | goto label_4;
| }
0x000ec3cc mov r1, sl | r1 = sl;
0x000ec3ce mov r2, fp | r2 = fp;
0x000ec3d0 blx 0x78d44 | fcn_00078d44 ();
| }
| label_1:
0x000ec3d4 ldr r0, [r4] | r0 = *(r4);
| if (r7 != 0) {
0x000ec3d6 cbz r7, 0xec3f0 |
0x000ec3d8 cmp r7, 1 |
0x000ec3da add r5, fp | r5 += fp;
0x000ec3dc add.w r1, r0, r6, lsl 2 | r1 = r0 + (r6 << 2);
0x000ec3e0 add.w r3, r8, r5, lsl 2 | r3 = r8 + (r5 << 2);
| if (r7 == 1) {
0x000ec3e4 beq 0xec40c | goto label_5;
| }
0x000ec3e6 mov r2, r7 | r2 = r7;
0x000ec3e8 mov r0, r3 | r0 = r3;
0x000ec3ea blx 0x78d44 | fcn_00078d44 ();
0x000ec3ee ldr r0, [r4] | r0 = *(r4);
| }
| label_0:
0x000ec3f0 cmp sb, r0 |
| if (sb != r0) {
0x000ec3f2 beq 0xec3f8 |
0x000ec3f4 blx 0x789a8 | fcn_000789a8 ();
| }
0x000ec3f8 ldr r3, [sp, 4] | r3 = var_4h;
0x000ec3fa str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x000ec3fe str r3, [r4, 8] | *((r4 + 8)) = r3;
0x000ec400 add sp, 0xc |
0x000ec402 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x000ec406 ldr r3, [r1] | r3 = *(r1);
0x000ec408 str r3, [r0] | *(r0) = r3;
0x000ec40a b 0xec3b6 |
| } while (1);
| label_5:
0x000ec40c ldr.w r3, [r0, r6, lsl 2] | offset_0 = r6 << 2;
| r3 = *((r0 + offset_0));
0x000ec410 str.w r3, [r8, r5, lsl 2] | __asm ("str.w r3, [r8, r5, lsl 2]");
0x000ec414 b 0xec3f0 | goto label_0;
| label_4:
0x000ec416 ldr.w r3, [sl] | r3 = *(sl);
0x000ec41a str.w r3, [r8, r5, lsl 2] | __asm ("str.w r3, [r8, r5, lsl 2]");
0x000ec41e b 0xec3d4 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xf6bd0 */
| #include <stdint.h>
|
; (fcn) method.std::filesystem.create_symlink_std::filesystem::__cxx11::path_const__std::filesystem::__cxx11::path_const__std::error_code_ () | void method_std::filesystem_create_symlink_std::filesystem::_cxx11::path_const_std::filesystem::_cxx11::path_const_std::error_code_ (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| /* std::filesystem::create_symlink(std::filesystem::__cxx11::path const&, std::filesystem::__cxx11::path const&, std::error_code&) */
0x000f6bd0 push {r3, r4, r5, lr} |
0x000f6bd2 mov r5, r2 | r5 = r2;
0x000f6bd4 ldr r1, [r1] | r1 = *(r1);
0x000f6bd6 ldr r0, [r0] | r0 = *(r0);
0x000f6bd8 blx 0x79214 | r0 = fcn_00079214 ();
| if (r0 != 0) {
0x000f6bdc cbz r0, 0xf6bee |
0x000f6bde blx 0x7b0b0 | r0 = fcn_0007b0b0 ();
0x000f6be2 ldr r4, [r0] | r4 = *(r0);
0x000f6be4 blx 0x7a898 | r0 = fcn_0007a898 ();
0x000f6be8 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x000f6bec pop {r3, r4, r5, pc} |
| }
0x000f6bee mov r4, r0 | r4 = r0;
0x000f6bf0 blx 0x7a5b0 | r0 = fcn_0007a5b0 ();
0x000f6bf4 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x000f6bf8 pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xf6d20 */
| #include <stdint.h>
|
; (fcn) method.std::filesystem.current_path_std::filesystem::__cxx11::path_const__std::error_code_ () | void method_std::filesystem_current_path_std::filesystem::_cxx11::path_const_std::error_code_ (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| /* std::filesystem::current_path(std::filesystem::__cxx11::path const&, std::error_code&) */
0x000f6d20 invalid |
0x000f6d24 ldr r0, [r0] | r0 = *(r0);
0x000f6d26 blx 0x7a144 | r0 = lstat64 ();
| if (r0 != 0) {
0x000f6d2a cbz r0, 0xf6d3c |
0x000f6d2c blx 0x7b0b0 | r0 = fcn_0007b0b0 ();
0x000f6d30 ldr r4, [r0] | r4 = *(r0);
0x000f6d32 blx 0x7a898 | r0 = fcn_0007a898 ();
0x000f6d36 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x000f6d3a pop {r3, r4, r5, pc} |
| }
0x000f6d3c mov r4, r0 | r4 = r0;
0x000f6d3e blx 0x7a5b0 | r0 = fcn_0007a5b0 ();
0x000f6d42 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x000f6d46 pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xf75c4 */
| #include <stdint.h>
|
; (fcn) method.std::filesystem.resize_file_std::filesystem::__cxx11::path_const__unsigned_long_long__std::error_code_ () | void method_std::filesystem_resize_file_std::filesystem::_cxx11::path_const_unsigned_long_long_std::error_code_ (int16_t arg1, uint32_t arg4) {
| int16_t var_10h_2;
| r0 = arg1;
| r3 = arg4;
| if (? >= ?) {
| /* std::filesystem::resize_file(std::filesystem::__cxx11::path const&, unsigned long long, std::error_code&) */
0x000f75c4 ldrlt r2, [r8, -0xb00]! | r2 = *((r8 -= 0xb00));
| }
0x000f75c8 ldr r5, [sp, 0x10] | r5 = var_10h_2;
| if (? < ?) {
0x000f75ca bge 0xf75d8 |
0x000f75cc movs r4, 0x16 | r4 = 0x16;
0x000f75ce blx 0x7a898 | r0 = fcn_0007a898 ();
0x000f75d2 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x000f75d6 pop {r3, r4, r5, pc} |
| }
0x000f75d8 ldr r0, [r0] | r0 = *(r0);
0x000f75da blx 0x7b270 | r0 = fcn_0007b270 ();
0x000f75de mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x000f75e0 cbz r0, 0xf75f2 |
0x000f75e2 blx 0x7b0b0 | r0 = fcn_0007b0b0 ();
0x000f75e6 ldr r4, [r0] | r4 = *(r0);
0x000f75e8 blx 0x7a898 | r0 = fcn_0007a898 ();
0x000f75ec strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x000f75f0 pop {r3, r4, r5, pc} |
| }
0x000f75f2 blx 0x7a5b0 | r0 = fcn_0007a5b0 ();
0x000f75f6 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x000f75fa pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0x104fe8 */
| #include <stdint.h>
|
; (fcn) method.std::filesystem.resize_file_std::filesystem::path_const__unsigned_long_long__std::error_code_ () | void method_std::filesystem_resize_file_std::filesystem::path_const_unsigned_long_long_std::error_code_ (int16_t arg_10h, int16_t arg1, uint32_t arg4) {
| r0 = arg1;
| r3 = arg4;
| if (? >= ?) {
| /* std::filesystem::resize_file(std::filesystem::path const&, unsigned long long, std::error_code&) */
0x00104fe8 ldrlt r2, [r8, -0xb00]! | r2 = *((r8 -= 0xb00));
| }
0x00104fec ldr r5, [sp, 0x10] | r5 = *(arg_10h);
| if (? < ?) {
0x00104fee bge 0x104ffc |
0x00104ff0 movs r4, 0x16 | r4 = 0x16;
0x00104ff2 blx 0x7a898 | r0 = fcn_0007a898 ();
0x00104ff6 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x00104ffa pop {r3, r4, r5, pc} |
| }
0x00104ffc ldr r0, [r0] | r0 = *(r0);
0x00104ffe blx 0x7b270 | r0 = fcn_0007b270 ();
0x00105002 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00105004 cbz r0, 0x105016 |
0x00105006 blx 0x7b0b0 | r0 = fcn_0007b0b0 ();
0x0010500a ldr r4, [r0] | r4 = *(r0);
0x0010500c blx 0x7a898 | r0 = fcn_0007a898 ();
0x00105010 strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x00105014 pop {r3, r4, r5, pc} |
| }
0x00105016 blx 0x7a5b0 | r0 = fcn_0007a5b0 ();
0x0010501a strd r4, r0, [r5] | __asm ("strd r4, r0, [r5]");
0x0010501e pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xfc994 */
| #include <stdint.h>
|
; (fcn) method.std::filesystem::__cxx11::path.has_relative_path___const () | void method_std::filesystem::_cxx11::path_has_relative_path_const (int16_t arg1) {
| r0 = arg1;
| /* std::filesystem::__cxx11::path::has_relative_path() const */
0x000fc994 stmibvs r3, {r3, r4, r5, r8, sl, ip, sp, pc} | __asm ("stmibvs r3, {r3, r4, r5, r8, sl, ip, sp, pc}");
0x000fc998 and r2, r3, 3 | r2 = r3 & 3;
0x000fc99c cmp r2, 3 |
0x000fc99e beq 0xfc9ae |
| while (r2 == 0) {
0x000fc9a0 bics r3, r3, 3 | __asm ("bics r3, r3, 3");
| if (r2 != 3) {
0x000fc9a4 beq 0xfc9aa |
0x000fc9a6 ldr r3, [r3] | r3 = *(r3);
| if (r3 != 0) {
0x000fc9a8 cbnz r3, 0xfc9b8 | goto label_1;
| }
| }
| label_0:
0x000fc9aa movs r0, 0 | r0 = 0;
0x000fc9ac pop {r3, r4, r5, pc} |
0x000fc9ae ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000fc9b0 cmp r2, 0 |
0x000fc9b2 beq 0xfc9a0 |
| }
0x000fc9b4 movs r0, 1 | r0 = 1;
0x000fc9b6 pop {r3, r4, r5, pc} |
| label_1:
0x000fc9b8 add.w r4, r0, 0x18 | r4 = r0 + 0x18;
0x000fc9bc mov r0, r4 | r0 = r4;
0x000fc9be blx 0x79388 | fcn_00079388 ();
0x000fc9c2 ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x000fc9c4 mov r5, r0 | r5 = r0;
0x000fc9c6 mov r0, r4 | r0 = r4;
0x000fc9c8 and r3, r3, 3 | r3 &= 3;
0x000fc9cc cmp r3, 1 |
0x000fc9ce it eq |
| if (r3 != 1) {
0x000fc9d0 addeq r5, 0x20 | r5 += 0x20;
| }
0x000fc9d2 blx 0x7a438 | r0 = fcn_0007a438 ();
0x000fc9d6 cmp r5, r0 |
| if (r5 != r0) {
0x000fc9d8 beq 0xfc9e6 |
0x000fc9da ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000fc9dc and r3, r3, 3 | r3 &= 3;
0x000fc9e0 cmp r3, 2 |
0x000fc9e2 it eq |
| if (r3 == 2) {
0x000fc9e4 addeq r5, 0x20 | r5 += 0x20;
| goto label_2;
| }
| }
| label_2:
0x000fc9e6 mov r0, r4 | r0 = r4;
0x000fc9e8 blx 0x7a438 | r0 = fcn_0007a438 ();
0x000fc9ec cmp r5, r0 |
| if (r5 == r0) {
0x000fc9ee beq 0xfc9aa | goto label_0;
| }
0x000fc9f0 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x000fc9f2 subs r0, 0 |
0x000fc9f4 it ne |
| if (r0 == 0) {
0x000fc9f6 movne r0, 1 | r0 = 1;
| }
0x000fc9f8 pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xfc2c8 */
| #include <stdint.h>
|
; (fcn) method.std::filesystem::__cxx11::path.has_root_name___const () | void method_std::filesystem::_cxx11::path_has_root_name_const (int16_t arg1) {
| r0 = arg1;
| /* std::filesystem::__cxx11::path::has_root_name() const */
0x000fc2c8 ldr r2, [r0, 0x18] | r2 = *((r0 + 0x18));
0x000fc2ca push {r3, lr} |
0x000fc2cc and r3, r2, 3 | r3 = r2 & 3;
0x000fc2d0 cmp r3, 1 |
| if (r3 != 1) {
0x000fc2d2 beq 0xfc2de |
0x000fc2d4 bics r3, r2, 3 | __asm ("bics r3, r2, 3");
| if (r3 == 1) {
0x000fc2d8 beq 0xfc2de | goto label_0;
| }
0x000fc2da ldr r3, [r3] | r3 = *(r3);
| if (r3 != 0) {
0x000fc2dc cbnz r3, 0xfc2e2 | goto label_1;
| }
| }
| label_0:
0x000fc2de mov r0, r3 | r0 = r3;
0x000fc2e0 pop {r3, pc} |
| label_1:
0x000fc2e2 adds r0, 0x18 | r0 += 0x18;
0x000fc2e4 blx 0x79388 | fcn_00079388 ();
0x000fc2e8 ldr r0, [r0, 0x18] | r0 = *((r0 + 0x18));
0x000fc2ea and r0, r0, 3 | r0 &= 3;
0x000fc2ee sub.w r0, r0, 1 | r0--;
0x000fc2f2 clz r0, r0 | r0 &= r0;
0x000fc2f6 lsrs r0, r0, 5 | r0 >>= 5;
0x000fc2f8 pop {r3, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xfe3c4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) method.std::filesystem::__cxx11::path.operator_std::filesystem::__cxx11::path_const_ () | void method_std::filesystem::_cxx11::path_operator_std::filesystem::_cxx11::path_const_ (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_58h;
| int16_t var_5ch;
| int32_t var_18h_2;
| int32_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| /* std::filesystem::__cxx11::path::operator+=(std::filesystem::__cxx11::path const&) */
0x000fe3c4 push {r1, r3, r6, fp, sp, lr} |
0x000fe3c8 ldr r7, [pc, 0x3c0] | r7 = *(0xfe78c);
0x000fe3ca mov r7, r0 | r7 = r0;
0x000fe3cc sub sp, 0x64 |
0x000fe3ce cmp r2, 0 |
| if (r2 == 0) {
0x000fe3d0 beq.w 0xfe554 | goto label_18;
| }
0x000fe3d4 ldr.w fp, [r0, 4] | fp = *((r0 + 4));
0x000fe3d8 cmp.w fp, 0 |
| if (fp == 0) {
0x000fe3dc beq.w 0xfe69a | goto label_19;
| }
0x000fe3e0 ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x000fe3e2 mov sl, r1 | sl = r1;
0x000fe3e4 and r1, r3, 3 | r1 = r3 & 3;
0x000fe3e8 bics r3, r3, 3 | __asm ("bics r3, r3, 3");
0x000fe3ec it ne |
| if (fp == 0) {
0x000fe3ee ldrne r3, [r3] | r3 = *(r3);
| }
0x000fe3f0 str r1, [sp, 4] | var_4h = r1;
0x000fe3f2 add.w r1, fp, r2 | r1 = fp + r2;
0x000fe3f6 str r3, [sp, 0x14] | var_14h = r3;
0x000fe3f8 blx 0x79cc8 | fcn_00079cc8 ();
0x000fe3fc movs r3, 0 | r3 = 0;
0x000fe3fe add r0, sp, 0x38 | r0 += var_38h;
0x000fe400 str r3, [sp, 0x24] | var_24h = r3;
0x000fe402 strb.w r3, [sp, 0x28] | var_28h = r3;
0x000fe406 add r3, sp, 0x28 | r3 += var_28h;
0x000fe408 str r3, [sp, 8] | var_8h = r3;
0x000fe40a str r3, [sp, 0x20] | var_20h = r3;
0x000fe40c str r0, [sp, 0xc] | var_ch = r0;
0x000fe40e blx 0x7aa50 | fcn_0007aa50 ();
0x000fe412 ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x000fe416 mov.w r3, -1 | r3 = -1;
0x000fe41a str r3, [sp, 0x3c] | var_3ch = r3;
0x000fe41c ands r4, r2, 3 | r4 = r2 & 3;
| if (r4 != r2) {
0x000fe420 bne.w 0xfe560 | goto label_20;
| }
0x000fe424 mov r5, r2 | r5 = r2;
0x000fe426 ldr r3, [r5], 8 | r3 = *(r5);
| r5 += 8;
0x000fe42a add.w sb, r2, r3, lsl 5 | sb = r2 + (r3 << 5);
0x000fe42e add.w sb, sb, 8 | sb += 8;
| label_1:
0x000fe432 ldr r3, [r5, 0x18] | r3 = var_38h;
0x000fe434 and r1, r3, 3 | r1 = r3 & 3;
0x000fe438 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000fe43a cmp r1, 3 |
0x000fe43c and r6, r3, 3 | r6 = r3 & 3;
| if (r1 == 3) {
0x000fe440 beq.w 0xfe608 | goto label_21;
| }
0x000fe444 ldrd r1, r0, [r7] | __asm ("ldrd r1, r0, [r7]");
0x000fe448 add r1, r0 | r1 += r0;
0x000fe44a ldrb r1, [r1, -0x1] | r1 = *((r1 - 0x1));
0x000fe44e cmp r1, 0x2f |
| if (r1 == 0x2f) {
0x000fe450 beq.w 0xfe6c2 | goto label_22;
| }
0x000fe454 movs r6, 0 | r6 = 0;
0x000fe456 mov.w r1, -1 | r1 = -1;
0x000fe45a mov r8, r6 | r8 = r6;
0x000fe45c str r1, [sp, 0x10] | var_10h = r1;
| label_12:
0x000fe45e lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
0x000fe460 itt ne |
| if (r1 != r3) {
0x000fe462 bicne r3, r3, 3 | __asm ("bicne r3, r3, 3");
| }
| if (r1 != r3) {
0x000fe466 movs r1, 1 | r1 = 1;
| }
| if (r1 == 1) {
0x000fe468 bne 0xfe474 |
| label_2:
0x000fe46a bics r3, r3, 3 | __asm ("bics r3, r3, 3");
0x000fe46e ite ne |
| if (r1 == 1) {
0x000fe470 ldrne r1, [r3] | r1 = *(r3);
| }
| if (r1 == 1) {
0x000fe472 moveq r1, r3 | r1 = r3;
| goto label_6;
| }
| }
| label_6:
0x000fe474 cmp r4, 0 |
| if (r4 != 0) {
0x000fe476 bne 0xfe55c | goto label_23;
| }
0x000fe478 bics r2, r2, 3 | __asm ("bics r2, r2, 3");
| if (r4 != 0) {
0x000fe47c bne.w 0xfe602 | goto label_24;
| }
| label_0:
0x000fe480 str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x000fe482 add.w r3, r7, 0x18 | r3 = r7 + 0x18;
0x000fe486 movs r2, 0 | r2 = 0;
0x000fe488 mov r0, r3 | r0 = r3;
0x000fe48a str r3, [sp, 0x18] | var_18h = r3;
0x000fe48c bl 0xfcec0 | fcn_000fcec0 (r0, r1);
0x000fe490 ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x000fe492 ldr r0, [sp, 4] | r0 = var_4h;
0x000fe494 ldr r3, [r2] | r3 = *(r2);
0x000fe496 lsls r3, r3, 5 | r3 <<= 5;
0x000fe498 add.w r1, r3, 8 | r1 = r3 + 8;
0x000fe49c adds r4, r2, r1 | r4 = r2 + r1;
0x000fe49e cmp r0, 0 |
| if (r0 != 0) {
0x000fe4a0 bne.w 0xfe636 | goto label_25;
| }
0x000fe4a4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000fe4a6 cmp sb, r5 |
0x000fe4a8 clz r1, r1 | r1 &= r1;
0x000fe4ac lsr.w r1, r1, 5 | r1 >>= 5;
0x000fe4b0 it eq |
| if (sb != r5) {
0x000fe4b2 moveq r1, 0 | r1 = 0;
| }
0x000fe4b4 cmp r1, 0 |
| if (r1 != 0) {
0x000fe4b6 bne.w 0xfe6de | goto label_26;
| }
| label_3:
0x000fe4ba cmp sb, r5 |
| if (sb == r5) {
0x000fe4bc beq 0xfe520 | goto label_5;
| }
| label_8:
0x000fe4be ldr r3, [r5, 0x18] | r3 = var_58h;
0x000fe4c0 and r3, r3, 3 | r3 &= 3;
0x000fe4c4 cmp r3, 1 |
| if (r3 == 1) {
0x000fe4c6 beq.w 0xfe73e | goto label_27;
| }
| label_10:
0x000fe4ca cmp r5, sb |
| if (r5 == sb) {
0x000fe4cc beq 0xfe520 | goto label_5;
| }
0x000fe4ce ldr r3, [r5, 0x18] | r3 = var_18h_2;
0x000fe4d0 and r3, r3, 3 | r3 &= 3;
0x000fe4d4 cmp r3, 2 |
| if (r3 == 2) {
0x000fe4d6 beq.w 0xfe6a6 | goto label_28;
| }
| do {
| label_4:
0x000fe4da ldrd r1, r2, [r5] | __asm ("ldrd r1, r2, [r5]");
0x000fe4de adds r4, 0x20 | r4 += 0x20;
0x000fe4e0 ldr r6, [r5, 0x1c] | r6 = *((r5 + 0x1c));
0x000fe4e2 sub.w r8, r4, 0x20 | r8 = r4 - 0x20;
0x000fe4e6 sub.w r3, r4, 0x18 | r3 = r4 - 0x18;
0x000fe4ea mov r0, r8 | r0 = r8;
0x000fe4ec add r2, r1 | r2 += r1;
0x000fe4ee str r3, [r4, -0x20] | *((r4 - 0x20)) = r3;
0x000fe4f2 add r6, fp | r6 += fp;
0x000fe4f4 bl 0xfc01c | fcn_000fc01c (r0, r1, r2, r3);
0x000fe4f8 sub.w r0, r4, 8 | r0 = r4 - 8;
0x000fe4fc blx 0x7aa50 | fcn_0007aa50 ();
0x000fe500 ldr r3, [r4, -0x8] | r3 = *((r4 - 0x8));
0x000fe504 adds r5, 0x20 | r5 += 0x20;
0x000fe506 str r6, [r4, -0x4] | *((r4 - 0x4)) = r6;
0x000fe50a cmp sb, r5 |
0x000fe50c orr r3, r3, 3 | r3 |= 3;
0x000fe510 str r3, [r4, -0x8] | *((r4 - 0x8)) = r3;
0x000fe514 ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x000fe516 ldr r3, [r2] | r3 = *(r2);
0x000fe518 add.w r3, r3, 1 | r3++;
0x000fe51c str r3, [r2] | *(r2) = r3;
0x000fe51e bne 0xfe4da |
| } while (sb != r5);
| label_5:
0x000fe520 ldrd r1, r2, [sl] | __asm ("ldrd r1, r2, [sl]");
0x000fe524 mov r0, r7 | r0 = r7;
0x000fe526 blx 0x78af0 | fcn_00078af0 ();
0x000fe52a ldrd r3, r5, [r7] | __asm ("ldrd r3, r5, [r7]");
0x000fe52e add r3, r5 | r3 += r5;
0x000fe530 ldrb r3, [r3, -0x1] | r3 = *((r3 - 0x1));
0x000fe534 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x000fe536 beq.w 0xfe712 | goto label_29;
| }
| label_9:
0x000fe53a ldr r1, [sp, 0x38] | r1 = var_38h;
| if (r1 != 0) {
0x000fe53c cbz r1, 0xfe544 |
0x000fe53e ldr r0, [sp, 0xc] | r0 = var_ch;
0x000fe540 blx 0x793e4 | fcn_000793e4 ();
| }
0x000fe544 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000fe546 ldr r3, [sp, 8] | r3 = var_8h;
0x000fe548 cmp r0, r3 |
| if (r0 != r3) {
0x000fe54a beq 0xfe554 |
0x000fe54c ldr r1, [sp, 0x28] | r1 = var_28h;
0x000fe54e adds r1, 1 | r1++;
0x000fe550 blx 0x7ae30 | fcn_0007ae30 ();
| }
| label_18:
0x000fe554 mov r0, r7 | r0 = r7;
0x000fe556 add sp, 0x64 |
0x000fe558 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_23:
0x000fe55c adds r1, 1 | r1++;
0x000fe55e b 0xfe480 | goto label_0;
| label_20:
0x000fe560 ldrd r1, r2, [sl] | __asm ("ldrd r1, r2, [sl]");
0x000fe564 add.w sb, sp, 0x40 | sb += var_40h;
0x000fe568 add r5, sp, 0x48 | r5 += var_48h;
0x000fe56a mov r0, sb | r0 = sb;
0x000fe56c str r5, [sp, 0x40] | var_40h = r5;
0x000fe56e add r2, r1 | r2 += r1;
0x000fe570 bl 0xfc01c | fcn_000fc01c (r0, r1, r2, r3);
0x000fe574 add r6, sp, 0x58 | r6 += var_58h;
0x000fe576 mov r0, r6 | r0 = r6;
0x000fe578 blx 0x7aa50 | fcn_0007aa50 ();
0x000fe57c ldr r3, [sp, 0x58] | r3 = var_58h;
0x000fe57e movs r2, 0 | r2 = 0;
0x000fe580 str r2, [sp, 0x5c] | var_5ch = r2;
0x000fe582 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000fe584 bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x000fe588 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000fe58a orrs r3, r4 | r3 |= r4;
0x000fe58c str r3, [sp, 0x58] | var_58h = r3;
0x000fe58e ldr r3, [sp, 0x40] | r3 = var_40h;
0x000fe590 cmp r3, r5 |
| if (r3 == r5) {
0x000fe592 beq.w 0xfe7b0 | goto label_30;
| }
0x000fe596 ldr r4, [sp, 8] | r4 = var_8h;
0x000fe598 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000fe59a strd r3, r2, [sp, 0x20] | __asm ("strd r3, r2, [var_24h]");
0x000fe59e cmp r0, r4 |
0x000fe5a0 it eq |
| if (r0 != r4) {
0x000fe5a2 streq r1, [sp, 0x28] | var_28h = r1;
| }
| if (r0 == r4) {
0x000fe5a4 beq.w 0xfe7ca | goto label_31;
| }
0x000fe5a8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000fe5aa str r1, [sp, 0x28] | var_28h = r1;
0x000fe5ac cmp r0, 0 |
| if (r0 == 0) {
0x000fe5ae beq.w 0xfe7ca | goto label_31;
| }
0x000fe5b2 str r3, [sp, 0x48] | var_48h = r3;
0x000fe5b4 str r0, [sp, 0x40] | var_40h = r0;
| label_13:
0x000fe5b6 movs r3, 0 | r3 = 0;
0x000fe5b8 str r3, [sp, 0x44] | var_44h = r3;
0x000fe5ba strb r3, [r0] | *(r0) = r3;
0x000fe5bc ldr r1, [sp, 0x38] | r1 = var_38h;
0x000fe5be ldr r2, [sp, 0x58] | r2 = var_58h;
0x000fe5c0 str r3, [sp, 0x58] | var_58h = r3;
0x000fe5c2 str r2, [sp, 0x38] | var_38h = r2;
| if (r1 != 0) {
0x000fe5c4 cbz r1, 0xfe5cc |
0x000fe5c6 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000fe5c8 blx 0x793e4 | fcn_000793e4 ();
| }
0x000fe5cc ldr r2, [sp, 0x40] | r2 = var_40h;
0x000fe5ce movs r3, 0 | r3 = 0;
0x000fe5d0 str r3, [sp, 0x44] | var_44h = r3;
0x000fe5d2 mov r0, sb | r0 = sb;
0x000fe5d4 strb r3, [r2] | *(r2) = r3;
0x000fe5d6 blx 0x7b200 | fcn_0007b200 ();
0x000fe5da ldrd r1, r3, [sp, 0x58] | __asm ("ldrd r1, r3, [var_58h]");
0x000fe5de str r3, [sp, 0x3c] | var_3ch = r3;
| if (r1 != 0) {
0x000fe5e0 cbz r1, 0xfe5e8 |
0x000fe5e2 mov r0, r6 | r0 = r6;
0x000fe5e4 blx 0x793e4 | fcn_000793e4 ();
| }
0x000fe5e8 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000fe5ea cmp r0, r5 |
| if (r0 != r5) {
0x000fe5ec beq 0xfe5f6 |
0x000fe5ee ldr r1, [sp, 0x48] | r1 = var_48h;
0x000fe5f0 adds r1, 1 | r1++;
0x000fe5f2 blx 0x7ae30 | fcn_0007ae30 ();
| }
0x000fe5f6 ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x000fe5fa add r5, sp, 0x20 | r5 += var_20h;
0x000fe5fc and r4, r2, 3 | r4 = r2 & 3;
0x000fe600 b 0xfe432 | goto label_1;
| label_24:
0x000fe602 ldr r2, [r2] | r2 = *(r2);
0x000fe604 add r1, r2 | r1 += r2;
0x000fe606 b 0xfe480 | goto label_0;
| label_21:
0x000fe608 cmp r6, 3 |
| if (r6 == 3) {
0x000fe60a beq.w 0xfe776 | goto label_32;
| }
0x000fe60e cmp r6, 0 |
| if (r6 != 0) {
0x000fe610 bne 0xfe6b0 | goto label_33;
| }
0x000fe612 ldr r1, [r3] | r1 = *(r3);
0x000fe614 add.w r1, r3, r1, lsl 5 | r1 = r3 + (r1 << 5);
0x000fe618 sub.w r0, r1, 0x18 | r0 = r1 - 0x18;
0x000fe61c ldr r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x000fe61e and r1, r1, 3 | r1 &= 3;
0x000fe622 cmp r1, 3 |
0x000fe624 itt ne |
| if (r1 == 3) {
0x000fe626 movne r1, -1 | r1 = -1;
| }
| if (r1 != 3) {
0x000fe62a str r1, [sp, 0x10] | var_10h = r1;
| }
| if (r1 == 3) {
0x000fe62c beq.w 0xfe78e | goto label_34;
| }
| label_7:
0x000fe630 movs r6, 0 | r6 = 0;
0x000fe632 mov r8, r6 | r8 = r6;
0x000fe634 b 0xfe46a | goto label_2;
| label_25:
0x000fe636 add.w r3, r4, 8 | r3 = r4 + 8;
0x000fe63a mov r0, r4 | r0 = r4;
0x000fe63c str r3, [r2, r1] | *((r2 + r1)) = r3;
0x000fe63e movs r2, 0 | r2 = 0;
0x000fe640 add.w r3, r4, 0x20 | r3 = r4 + 0x20;
0x000fe644 mov r1, r2 | r1 = r2;
0x000fe646 str r3, [sp, 0x1c] | var_1ch = r3;
0x000fe648 bl 0xfc01c | fcn_000fc01c (r0, r1, r2, r3);
0x000fe64c add.w r0, r4, 0x18 | r0 = r4 + 0x18;
0x000fe650 blx 0x7aa50 | fcn_0007aa50 ();
0x000fe654 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000fe656 mov r0, r4 | r0 = r4;
0x000fe658 ldr r2, [sp, 4] | r2 = var_4h;
0x000fe65a bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x000fe65e orrs r3, r2 | r3 |= r2;
0x000fe660 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000fe662 movs r3, 0 | r3 = 0;
0x000fe664 ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x000fe666 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x000fe668 ldr r3, [r2] | r3 = *(r2);
0x000fe66a adds r3, 1 | r3++;
0x000fe66c str r3, [r2] | *(r2) = r3;
0x000fe66e ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x000fe670 add r1, r8 | r1 += r8;
0x000fe672 blx 0x79cc8 | fcn_00079cc8 ();
0x000fe676 mov r1, r7 | r1 = r7;
0x000fe678 mov r0, r4 | r0 = r4;
0x000fe67a blx 0x7aef0 | fcn_0007aef0 ();
0x000fe67e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000fe680 mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x000fe684 subs r3, r3, r2 | r3 -= r2;
0x000fe686 cmp r3, r8 |
| if (r3 <= r8) {
0x000fe688 blo.w 0xfe80c | goto label_35;
| }
0x000fe68c mov r2, r8 | r2 = r8;
0x000fe68e mov r1, r6 | r1 = r6;
0x000fe690 mov r0, r4 | r0 = r4;
0x000fe692 blx 0x78af0 | fcn_00078af0 ();
0x000fe696 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x000fe698 b 0xfe4ba | goto label_3;
| label_19:
0x000fe69a blx 0x7969c | fcn_0007969c ();
0x000fe69e mov r0, r7 | r0 = r7;
0x000fe6a0 add sp, 0x64 |
0x000fe6a2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x000fe6a6 adds r5, 0x20 | r5 += 0x20;
0x000fe6a8 cmp sb, r5 |
| if (sb != r5) {
0x000fe6aa bne.w 0xfe4da | goto label_4;
| }
0x000fe6ae b 0xfe520 | goto label_5;
| do {
| label_33:
0x000fe6b0 movs r6, 0 | r6 = 0;
0x000fe6b2 mov r8, r6 | r8 = r6;
| label_11:
0x000fe6b4 mov.w r1, -1 | r1 = -1;
0x000fe6b8 bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x000fe6bc str r1, [sp, 0x10] | var_10h = r1;
0x000fe6be movs r1, 1 | r1 = 1;
0x000fe6c0 b 0xfe474 | goto label_6;
| label_22:
0x000fe6c2 cmp r6, 0 |
0x000fe6c4 bne 0xfe6b0 |
| } while (r6 != 0);
0x000fe6c6 ldr r1, [r3] | r1 = *(r3);
0x000fe6c8 add.w r1, r3, r1, lsl 5 | r1 = r3 + (r1 << 5);
0x000fe6cc ldr r1, [r1] | r1 = *(r1);
0x000fe6ce and r1, r1, 3 | r1 &= 3;
0x000fe6d2 subs r1, 3 | r1 -= 3;
0x000fe6d4 it ne |
| if (r1 == 3) {
0x000fe6d6 movne r1, -1 | r1 = -1;
| }
0x000fe6da str r1, [sp, 0x10] | var_10h = r1;
0x000fe6dc b 0xfe630 | goto label_7;
| label_26:
0x000fe6de sub.w r6, r3, 0x18 | r6 = r3 - 0x18;
0x000fe6e2 adds r4, r2, r6 | r4 = r2 + r6;
0x000fe6e4 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
| if (r1 != 0) {
0x000fe6e6 cbz r1, 0xfe6f4 |
0x000fe6e8 add.w r0, r4, 0x18 | r0 = r4 + 0x18;
0x000fe6ec str r2, [sp, 0x1c] | var_1ch = r2;
0x000fe6ee blx 0x793e4 | fcn_000793e4 ();
0x000fe6f2 ldr r2, [sp, 0x1c] | r2 = var_1ch;
| }
0x000fe6f4 ldr r0, [r2, r6] | r0 = *((r2 + r6));
0x000fe6f6 add.w r3, r4, 8 | r3 = r4 + 8;
0x000fe6fa cmp r0, r3 |
| if (r0 != r3) {
0x000fe6fc beq 0xfe70a |
0x000fe6fe ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000fe700 str r2, [sp, 0x1c] | var_1ch = r2;
0x000fe702 adds r1, 1 | r1++;
0x000fe704 blx 0x7ae30 | fcn_0007ae30 ();
0x000fe708 ldr r2, [sp, 0x1c] | r2 = var_1ch;
| }
0x000fe70a ldr r3, [r2] | r3 = *(r2);
0x000fe70c subs r3, 1 | r3--;
0x000fe70e str r3, [r2] | *(r2) = r3;
0x000fe710 b 0xfe4be | goto label_8;
| label_29:
0x000fe712 add.w r3, r4, 8 | r3 = r4 + 8;
0x000fe716 movs r2, 0 | r2 = 0;
0x000fe718 mov r1, r2 | r1 = r2;
0x000fe71a mov r0, r4 | r0 = r4;
0x000fe71c str r3, [r4] | *(r4) = r3;
0x000fe71e bl 0xfc01c | fcn_000fc01c (r0, r1, r2, r3);
0x000fe722 add.w r0, r4, 0x18 | r0 = r4 + 0x18;
0x000fe726 blx 0x7aa50 | fcn_0007aa50 ();
0x000fe72a ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000fe72c str r5, [r4, 0x1c] | *((r4 + 0x1c)) = r5;
0x000fe72e orr r3, r3, 3 | r3 |= 3;
0x000fe732 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000fe734 ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x000fe736 ldr r3, [r2] | r3 = *(r2);
0x000fe738 adds r3, 1 | r3++;
0x000fe73a str r3, [r2] | *(r2) = r3;
0x000fe73c b 0xfe53a | goto label_9;
| label_27:
0x000fe73e ldrd r1, r2, [r5] | __asm ("ldrd r1, r2, [r5]");
0x000fe742 add.w r3, r4, 8 | r3 = r4 + 8;
0x000fe746 mov r0, r4 | r0 = r4;
0x000fe748 str r3, [r4] | *(r4) = r3;
0x000fe74a add.w r6, r4, 0x20 | r6 = r4 + 0x20;
0x000fe74e add r2, r1 | r2 += r1;
0x000fe750 bl 0xfc01c | fcn_000fc01c (r0, r1, r2, r3);
0x000fe754 add.w r0, r4, 0x18 | r0 = r4 + 0x18;
0x000fe758 blx 0x7aa50 | fcn_0007aa50 ();
0x000fe75c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000fe75e adds r5, 0x20 | r5 += 0x20;
0x000fe760 str.w fp, [r4, 0x1c] | __asm ("str.w fp, [r4, 0x1c]");
0x000fe764 orr r3, r3, 3 | r3 |= 3;
0x000fe768 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000fe76a mov r4, r6 | r4 = r6;
0x000fe76c ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x000fe76e ldr r3, [r2] | r3 = *(r2);
0x000fe770 adds r3, 1 | r3++;
0x000fe772 str r3, [r2] | *(r2) = r3;
0x000fe774 b 0xfe4ca | goto label_10;
| label_32:
0x000fe776 cmp r4, 3 |
0x000fe778 itt ne |
| if (r4 != 3) {
0x000fe77a ldrdne r6, r8, [r5] | __asm ("ldrdne r6, r8, [r5]");
| }
| if (r4 == 3) {
0x000fe77e adds r5, 0x20 | r5 += 0x20;
| goto label_36;
| }
| if (r5 != 0x20) {
| label_36:
0x000fe780 bne 0xfe6b4 | goto label_11;
| }
0x000fe782 ldrd r1, r2, [sl] | __asm ("ldrd r1, r2, [sl]");
0x000fe786 mov r0, r7 | r0 = r7;
0x000fe788 blx 0x78af0 | fcn_00078af0 ();
0x000fe78c b 0xfe53a | goto label_9;
| label_34:
0x000fe78e cmp r4, 3 |
0x000fe790 ldr r3, [r0, 4] | r3 = *((r0 + 4));
| if (r4 == 3) {
0x000fe792 beq 0xfe7de | goto label_37;
| }
0x000fe794 ldrd r1, r2, [r5] | __asm ("ldrd r1, r2, [r5]");
0x000fe798 str r3, [sp, 0x10] | var_10h = r3;
0x000fe79a blx 0x78af0 | fcn_00078af0 ();
0x000fe79e ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x000fe7a2 ldrd r6, r8, [r5] | __asm ("ldrd r6, r8, [r5]");
0x000fe7a6 adds r5, 0x20 | r5 += 0x20;
0x000fe7a8 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000fe7aa and r4, r2, 3 | r4 = r2 & 3;
0x000fe7ae b 0xfe45e | goto label_12;
| if (r2 == 0) {
| label_30:
0x000fe7b0 cbz r2, 0xfe7c0 | goto label_38;
| }
0x000fe7b2 cmp r2, 1 |
| if (r2 == 1) {
0x000fe7b4 beq 0xfe7d2 | goto label_39;
| }
0x000fe7b6 mov r1, r5 | r1 = r5;
0x000fe7b8 blx 0x79638 | fcn_00079638 ();
0x000fe7bc ldr r2, [sp, 0x44] | r2 = var_44h;
0x000fe7be ldr r0, [sp, 0x20] | r0 = var_20h;
| do {
| label_38:
0x000fe7c0 movs r3, 0 | r3 = 0;
0x000fe7c2 str r2, [sp, 0x24] | var_24h = r2;
0x000fe7c4 strb r3, [r0, r2] | *((r0 + r2)) = r3;
0x000fe7c6 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000fe7c8 b 0xfe5b6 | goto label_13;
| label_31:
0x000fe7ca str r5, [sp, 0x40] | var_40h = r5;
0x000fe7cc add r5, sp, 0x48 | r5 += var_48h;
0x000fe7ce mov r0, r5 | r0 = r5;
0x000fe7d0 b 0xfe5b6 | goto label_13;
| label_39:
0x000fe7d2 ldrb.w r3, [sp, 0x48] | r3 = var_48h;
0x000fe7d6 strb r3, [r0] | *(r0) = r3;
0x000fe7d8 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000fe7da ldr r0, [sp, 0x20] | r0 = var_20h;
0x000fe7dc b 0xfe7c0 |
| } while (1);
| label_37:
0x000fe7de ldrd r5, r4, [sl] | __asm ("ldrd r5, r4, [sl]");
0x000fe7e2 mvn r2, 0xc0000000 | r2 = ~0xc0000000;
0x000fe7e6 subs r3, r2, r3 | r3 = r2 - r3;
0x000fe7e8 cmp r4, r3 |
| if (r4 <= r3) {
0x000fe7ea bhi 0xfe81c |
0x000fe7ec mov r2, r4 | r2 = r4;
0x000fe7ee mov r1, r5 | r1 = r5;
0x000fe7f0 blx 0x78af0 | fcn_00078af0 ();
0x000fe7f4 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x000fe7f6 mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x000fe7fa subs r3, r3, r2 | r3 -= r2;
0x000fe7fc cmp r4, r3 |
| if (r4 <= r3) {
0x000fe7fe bhi 0xfe814 |
0x000fe800 mov r2, r4 | r2 = r4;
0x000fe802 mov r1, r5 | r1 = r5;
0x000fe804 mov r0, r7 | r0 = r7;
0x000fe806 blx 0x78af0 | fcn_00078af0 ();
0x000fe80a b 0xfe53a | goto label_9;
| label_35:
0x000fe80c ldr r0, [pc, 0x128] |
0x000fe80e add r0, pc | r0 = 0x1fd14a;
0x000fe810 blx 0x7888c | fcn_0007888c ();
| }
0x000fe814 ldr r0, [pc, 0x124] |
0x000fe816 add r0, pc | r0 = 0x1fd156;
0x000fe818 blx 0x7888c | fcn_0007888c ();
| }
0x000fe81c ldr r0, [pc, 0x120] |
0x000fe81e add r0, pc | r0 = 0x1fd162;
0x000fe820 blx 0x7888c | r0 = fcn_0007888c ();
| do {
0x000fe824 mov r3, r0 | r3 = r0;
0x000fe826 mov r0, r4 | r0 = r4;
0x000fe828 mov r4, r3 | r4 = r3;
0x000fe82a blx 0x7a618 | aeabi_idiv ();
0x000fe82e mov r0, r4 | r0 = r4;
0x000fe830 blx 0x780c4 | fcn_000780c4 ();
0x000fe834 movs r2, 0 | r2 = 0;
0x000fe836 mov r1, fp | r1 = fp;
0x000fe838 mov r0, r7 | r0 = r7;
0x000fe83a blx 0x792f0 | fcn_000792f0 ();
0x000fe83e ldr r3, [sp, 4] | r3 = var_4h;
| if (r3 == 0) {
0x000fe840 cbz r3, 0xfe882 | goto label_40;
| }
0x000fe842 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000fe844 bl 0xfc284 | fcn_000fc284 (r0);
| label_15:
0x000fe848 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
| label_14:
0x000fe84a ldr r2, [sp, 4] | r2 = var_4h;
0x000fe84c bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x000fe850 orrs r3, r2 | r3 |= r2;
0x000fe852 str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x000fe854 blx 0x7ae54 | fcn_0007ae54 ();
0x000fe858 b 0xfe824 |
| } while (1);
| label_40:
0x000fe882 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000fe884 bics r2, r3, 3 | __asm ("bics r2, r3, 3");
0x000fe888 mov r0, r3 | r0 = r3;
| if (r3 == r2) {
0x000fe88a beq 0xfe8e2 | goto label_41;
| }
0x000fe88c ldr r1, [r2] | r1 = *(r2);
0x000fe88e ldr r4, [sp, 0x14] | r4 = var_14h;
0x000fe890 cmp r4, r1 |
0x000fe892 it lt |
| if (r4 >= r1) {
0x000fe894 addlt r2, 8 | r2 += 8;
| }
| if (r4 < r1) {
0x000fe896 blt 0xfe8ea | goto label_42;
| }
0x000fe898 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000fe89a adds r1, 1 | r1++;
| if (r1 == 1) {
0x000fe89c beq 0xfe84a | goto label_14;
| }
| label_16:
0x000fe89e ldr r2, [r2] | r2 = *(r2);
| label_17:
0x000fe8a0 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000fe8a2 ldr r3, [r0] | r3 = *(r0);
0x000fe8a4 cmp r1, r2 |
| if (r1 == r2) {
0x000fe8a6 beq 0xfe910 | goto label_43;
| }
0x000fe8a8 lsls r3, r3, 5 | r3 <<= 5;
0x000fe8aa movs r2, 0 | r2 = 0;
0x000fe8ac mov r1, r2 | r1 = r2;
0x000fe8ae adds r3, 8 | r3 += 8;
0x000fe8b0 adds r4, r0, r3 | r4 = r0 + r3;
0x000fe8b2 add.w r5, r4, 8 | r5 = r4 + 8;
0x000fe8b6 str r5, [r0, r3] | *((r0 + r3)) = r5;
0x000fe8b8 mov r0, r4 | r0 = r4;
0x000fe8ba bl 0xfc01c | fcn_000fc01c (r0, r1, r2, r3);
0x000fe8bc umull pc, r1, pc, r4 | pc:r1 = pc * r4;
0x000fe8c0 movs r0, r3 | r0 = r3;
0x000fe8c2 blx 0x7aa50 | fcn_0007aa50 ();
0x000fe8c6 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000fe8c8 str.w fp, [r4, 0x1c] | __asm ("str.w fp, [r4, 0x1c]");
0x000fe8cc orr r3, r3, 3 | r3 |= 3;
0x000fe8d0 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000fe8d2 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000fe8d4 ldr r2, [r3] | r2 = *(r3);
0x000fe8d6 adds r2, 1 | r2++;
0x000fe8d8 str r2, [r3] | *(r3) = r2;
0x000fe8da b 0xfe84a | goto label_14;
| label_41:
0x000fe8e2 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000fe8e4 cmp r2, 0 |
| if (r2 >= 0) {
0x000fe8e6 bge 0xfe906 | goto label_44;
| }
0x000fe8e8 ldr r2, [sp, 4] | r2 = var_4h;
| label_42:
0x000fe8ea ldr r1, [sp, 0x14] | r1 = var_14h;
0x000fe8ec mov r0, r3 | r0 = r3;
0x000fe8ee add.w r1, r2, r1, lsl 5 | r1 = r2 + (r1 << 5);
0x000fe8f2 bl 0xfc188 | fcn_000fc188 (r0, r1);
0x000fe8f6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000fe8f8 adds r3, 1 | r3++;
| if (r3 == 1) {
0x000fe8fa beq 0xfe848 | goto label_15;
| }
0x000fe8fc ldr r0, [r7, 0x18] | r0 = *((r7 + 0x18));
0x000fe8fe bics r2, r0, 3 | __asm ("bics r2, r0, 3");
| if (r3 != 1) {
0x000fe902 bne 0xfe89e | goto label_16;
| }
0x000fe904 b 0xfe8a0 | goto label_17;
| label_44:
0x000fe906 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000fe908 adds r2, 1 | r2++;
| if (r2 == 1) {
0x000fe90a beq 0xfe84a | goto label_14;
| }
0x000fe90c ldr r2, [sp, 4] | r2 = var_4h;
0x000fe90e b 0xfe8a0 | goto label_17;
| label_43:
0x000fe910 add.w r3, r0, r3, lsl 5 | r3 = r0 + (r3 << 5);
0x000fe914 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000fe916 movs r2, 0 | r2 = 0;
0x000fe918 sub.w r4, r3, 0x18 | r4 = r3 - 0x18;
0x000fe91c mov r0, r4 | r0 = r4;
0x000fe91e blx 0x792f0 | fcn_000792f0 ();
0x000fe922 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000fe924 cmp r3, 0 |
| if (r3 != 0) {
0x000fe926 bne 0xfe848 | goto label_15;
| }
0x000fe928 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000fe92a str.w fp, [r4, 0x1c] | __asm ("str.w fp, [r4, 0x1c]");
0x000fe92e b 0xfe84a | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xff22c */
| #include <stdint.h>
|
; (fcn) method.std::filesystem::__cxx11::path.parent_path___const () | void method_std::filesystem::_cxx11::path_parent_path_const (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| /* std::filesystem::__cxx11::path::parent_path() const */
0x000ff22c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ff230 movs r3, 0 | r3 = 0;
0x000ff232 add.w r6, r0, 8 | r6 = r0 + 8;
0x000ff236 add.w r7, r0, 0x18 | r7 = r0 + 0x18;
0x000ff23a sub sp, 0x3c |
0x000ff23c mov r5, r1 | r5 = r1;
0x000ff23e strd r6, r3, [r0] | __asm ("strd r6, r3, [r0]");
0x000ff242 mov r4, r0 | r4 = r0;
0x000ff244 strb r3, [r0, 8] | *((r0 + 8)) = r3;
0x000ff246 mov r0, r7 | r0 = r7;
0x000ff248 blx 0x7aa50 | fcn_0007aa50 ();
0x000ff24c mov r0, r5 | r0 = r5;
0x000ff24e blx 0x78e48 | r0 = log (r0);
| if (r0 == 0) {
0x000ff252 cbz r0, 0xff26a | goto label_2;
| }
0x000ff254 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000ff256 bics r3, r3, 3 | __asm ("bics r3, r3, 3");
| if (r0 == 0) {
0x000ff25a beq 0xff262 | goto label_0;
| }
0x000ff25c ldr r3, [r3] | r3 = *(r3);
0x000ff25e cmp r3, 1 |
0x000ff260 bgt 0xff27a |
| while (r0 == r5) {
| label_0:
0x000ff262 mov r0, r4 | r0 = r4;
0x000ff264 add sp, 0x3c |
0x000ff266 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x000ff26a mov r1, r5 | r1 = r5;
0x000ff26c mov r0, r4 | r0 = r4;
0x000ff26e blx 0x7969c | fcn_0007969c ();
0x000ff272 mov r0, r4 | r0 = r4;
0x000ff274 add sp, 0x3c |
0x000ff276 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000ff27a add.w r0, r5, 0x18 | r0 = r5 + 0x18;
0x000ff27e add.w fp, sp, 4 |
0x000ff282 blx 0x7a438 | fcn_0007a438 ();
0x000ff286 ldr r3, [r0, -0x24] | r3 = *((r0 - 0x24));
0x000ff28a ldr r0, [r0, -0x3c] | r0 = *((r0 - 0x3c));
0x000ff28e ldrd r1, r2, [r5] | __asm ("ldrd r1, r2, [r5]");
0x000ff292 add r5, sp, 0xc | r5 += var_ch;
0x000ff294 str r5, [sp, 4] | var_4h = r5;
0x000ff296 add r3, r0 | r3 += r0;
0x000ff298 mov r0, fp | r0 = fp;
0x000ff29a cmp r3, r2 |
0x000ff29c ite ls |
| if (r3 > r2) {
0x000ff29e addls r2, r1, r3 | r2 = r1 + r3;
| }
| if (r3 <= r2) {
0x000ff2a0 addhi r2, r1, r2 | r2 = r1 + r2;
| }
0x000ff2a2 bl 0xfc01c | fcn_000fc01c (r0, r1, r2, r3);
0x000ff2a6 ldr r3, [sp, 4] | r3 = var_4h;
0x000ff2a8 add.w r8, sp, 0x24 | r8 += var_24h;
0x000ff2ac str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x000ff2b0 add.w sl, sp, 0x34 | sl += var_34h;
0x000ff2b4 str r5, [sp, 4] | var_4h = r5;
0x000ff2b6 cmp r3, r5 |
0x000ff2b8 iteet eq |
| if (r3 != r5) {
0x000ff2ba ldmeq r5, {r0, r1, r2, r3} | r0 = *(r5);
| r1 = *((r5 + 4));
| r2 = *((r5 + 8));
| r3 = *((r5 + 12));
| }
| if (r3 == r5) {
0x000ff2be strne r3, [sp, 0x1c] | var_1ch = r3;
| }
| if (r3 != r5) {
0x000ff2c0 ldreq r3, [sp, 0xc] | r3 = var_ch;
| }
| if (r3 == r5) {
0x000ff2c2 stm.w r8, {r0, r1, r2, r3} | *(r8) = r0;
| *((r8 + 4)) = r1;
| *((r8 + 8)) = r2;
| *((r8 + 12)) = r3;
| }
0x000ff2c6 mov r0, sl | r0 = sl;
0x000ff2c8 it ne |
| if (r3 == r5) {
0x000ff2ca strne r3, [sp, 0x24] | var_24h = r3;
| }
0x000ff2cc ldr r3, [sp, 8] | r3 = var_8h;
0x000ff2ce str r3, [sp, 0x20] | var_20h = r3;
0x000ff2d0 movs r3, 0 | r3 = 0;
0x000ff2d2 str r3, [sp, 8] | var_8h = r3;
0x000ff2d4 strb.w r3, [sp, 0xc] | var_ch = r3;
0x000ff2d8 blx 0x7aa50 | fcn_0007aa50 ();
0x000ff2dc add.w sb, sp, 0x1c | sb += var_1ch;
0x000ff2e0 mov r0, sb | r0 = sb;
0x000ff2e2 blx 0x7b200 | fcn_0007b200 ();
0x000ff2e6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000ff2e8 ldr r0, [r4] | r0 = *(r4);
0x000ff2ea ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ff2ec cmp r3, r8 |
| if (r3 == r8) {
0x000ff2ee beq 0xff356 | goto label_3;
| }
0x000ff2f0 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000ff2f2 cmp r6, r0 |
0x000ff2f4 strd r3, r2, [r4] | __asm ("strd r3, r2, [r4]");
0x000ff2f8 it eq |
| if (r6 != r0) {
0x000ff2fa streq r1, [r4, 8] | *((r4 + 8)) = r1;
| }
| if (r6 == r0) {
0x000ff2fc beq 0xff370 | goto label_4;
| }
0x000ff2fe ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000ff300 str r1, [r4, 8] | *((r4 + 8)) = r1;
0x000ff302 cmp r0, 0 |
| if (r0 == 0) {
0x000ff304 beq 0xff370 | goto label_4;
| }
0x000ff306 str r3, [sp, 0x24] | var_24h = r3;
0x000ff308 str r0, [sp, 0x1c] | var_1ch = r0;
| label_1:
0x000ff30a movs r3, 0 | r3 = 0;
0x000ff30c str r3, [sp, 0x20] | var_20h = r3;
0x000ff30e strb r3, [r0] | *(r0) = r3;
0x000ff310 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x000ff312 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000ff314 str r3, [sp, 0x34] | var_34h = r3;
0x000ff316 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
| if (r1 != 0) {
0x000ff318 cbz r1, 0xff320 |
0x000ff31a mov r0, r7 | r0 = r7;
0x000ff31c blx 0x793e4 | fcn_000793e4 ();
| }
0x000ff320 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ff322 movs r3, 0 | r3 = 0;
0x000ff324 str r3, [sp, 0x20] | var_20h = r3;
0x000ff326 mov r0, sb | r0 = sb;
0x000ff328 strb r3, [r2] | *(r2) = r3;
0x000ff32a blx 0x7b200 | fcn_0007b200 ();
0x000ff32e ldr r1, [sp, 0x34] | r1 = var_34h;
| if (r1 != 0) {
0x000ff330 cbz r1, 0xff338 |
0x000ff332 mov r0, sl | r0 = sl;
0x000ff334 blx 0x793e4 | fcn_000793e4 ();
| }
0x000ff338 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000ff33a cmp r0, r8 |
| if (r0 != r8) {
0x000ff33c beq 0xff346 |
0x000ff33e ldr r1, [sp, 0x24] | r1 = var_24h;
0x000ff340 adds r1, 1 | r1++;
0x000ff342 blx 0x7ae30 | fcn_0007ae30 ();
| }
0x000ff346 ldr r0, [sp, 4] | r0 = var_4h;
0x000ff348 cmp r0, r5 |
0x000ff34a beq 0xff262 |
| }
0x000ff34c ldr r1, [sp, 0xc] | r1 = var_ch;
0x000ff34e adds r1, 1 | r1++;
0x000ff350 blx 0x7ae30 | fcn_0007ae30 ();
0x000ff354 b 0xff262 | goto label_0;
| if (r2 == 0) {
| label_3:
0x000ff356 cbz r2, 0xff366 | goto label_5;
| }
0x000ff358 cmp r2, 1 |
| if (r2 == 1) {
0x000ff35a beq 0xff37c | goto label_6;
| }
0x000ff35c mov r1, r8 | r1 = r8;
0x000ff35e blx 0x79638 | fcn_00079638 ();
0x000ff362 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ff364 ldr r0, [r4] | r0 = *(r4);
| do {
| label_5:
0x000ff366 movs r3, 0 | r3 = 0;
0x000ff368 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x000ff36a strb r3, [r0, r2] | *((r0 + r2)) = r3;
0x000ff36c ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000ff36e b 0xff30a | goto label_1;
| label_4:
0x000ff370 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x000ff374 add.w r8, sp, 0x24 | r8 += var_24h;
0x000ff378 mov r0, r8 | r0 = r8;
0x000ff37a b 0xff30a | goto label_1;
| label_6:
0x000ff37c ldrb.w r3, [sp, 0x24] | r3 = var_24h;
0x000ff380 strb r3, [r0] | *(r0) = r3;
0x000ff382 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ff384 ldr r0, [r4] | r0 = *(r4);
0x000ff386 b 0xff366 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0x10b10c */
| #include <stdint.h>
|
; (fcn) method.std::filesystem::path::_List.end___const () | uint32_t method_std::filesystem::path::_List_end_const (int16_t arg1) {
| r0 = arg1;
| /* std::filesystem::path::_List::end() const */
0x0010b10c ldr r0, [r0] | r0 = *(r0);
0x0010b10e bics r0, r0, 3 | __asm ("bics r0, r0, 3");
0x0010b112 itttt ne |
| if (? == ?) {
0x0010b114 ldrne r3, [r0] | r3 = *(r0);
| }
| if (? == ?) {
0x0010b116 addne r3, r3, r3, lsl 1 | r3 += (r3 << 1);
| }
| if (? == ?) {
0x0010b11a addne r0, r0, r3, lsl 2 | r0 += (r3 << 2);
| }
| if (? != ?) {
0x0010b11e adds r0, 8 | r0 += 8;
| }
0x0010b120 bx lr | return r0;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xadf14).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libstdc++.so.6.0.29 @ 0xb47e8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
[*] Function strcpy used 1 times libstdc++.so.6.0.29