[*] Binary protection state of libgio-2.0.so.0.6800.4
Full RELRO No Canary found NX enabled DSO RPATH No RUNPATH No Symbols
[*] Function strcat tear down of libgio-2.0.so.0.6800.4
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x8c6d4).
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.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x8c72c */
| #include <stdint.h>
|
; (fcn) fcn.0008c72c () | void fcn_0008c72c (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| if (? > ?) {
0x0008c72c ldrle r3, [pc, 0xe8] | r3 = *((pc + 0xe8));
| }
0x0008c72e pushgt {r4, r5, r6, r7, r8, sb, sl, fp, lr} | __asm ("pushgt {r4, r5, r6, r7, r8, sb, sl, fp, lr}");
0x0008c732 sub sp, 0x14 |
0x0008c734 mov r6, r0 | r6 = r0;
0x0008c736 lsls r7, r1, 2 | r7 = r1 << 2;
0x0008c738 add r3, pc | r3 += pc;
0x0008c73a str r3, [sp, 0xc] | var_ch = r3;
0x0008c73c subs r3, r1, 1 | r3 = r1 - 1;
0x0008c73e str r3, [sp, 8] | var_8h = r3;
0x0008c740 mov r8, r1 | r8 = r1;
0x0008c742 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0008c744 ldr r4, [r3, r7] | r4 = *((r3 + r7));
| if (r4 != 0) {
0x0008c746 cbnz r4, 0x8c78a | goto label_0;
| }
0x0008c748 b 0x8c7e8 | goto label_2;
| do {
0x0008c74a ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0008c74c mov.w r1, -1 | r1 = -1;
0x0008c750 mov r0, r5 | r0 = r5;
| if (r3 != 0) {
0x0008c752 cbz r3, 0x8c780 |
0x0008c754 blx 0x29290 | g_string_insert ();
0x0008c758 mov.w r1, -1 | r1 = -1;
0x0008c75c mov sb, r0 | sb = r0;
0x0008c75e blx 0x2a6b8 | g_path_skip_root ();
0x0008c762 ldr r1, [r6, 0x10] | r1 = *((r6 + 0x10));
0x0008c764 mov sl, r0 | sl = r0;
0x0008c766 ldr r1, [r1, r7] | r1 = *((r1 + r7));
0x0008c768 blx 0x2b168 | r0 = fcn_0002b168 ();
0x0008c76c mov fp, r0 |
0x0008c76e mov r0, sb | r0 = sb;
0x0008c770 blx 0x286c0 | g_atomic_ref_count_inc ();
0x0008c774 mov r0, sl | r0 = sl;
0x0008c776 blx 0x286c0 | g_atomic_ref_count_inc ();
0x0008c77a cmp.w fp, 0 |
| if (fp == 0) {
0x0008c77e beq 0x8c7aa | goto label_3;
| }
| }
0x0008c780 mov r0, r4 | r0 = r4;
0x0008c782 blx 0x28d00 | fcn_00028d00 ();
0x0008c786 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0008c788 ldr r4, [r3, r7] | r4 = *((r3 + r7));
| label_0:
0x0008c78a movs r2, 0 | r2 = 0;
0x0008c78c mov r0, r4 | r0 = r4;
0x0008c78e mov r1, r2 | r1 = r2;
0x0008c790 bl 0x4af24 | r0 = g_file_enumerator_next_file ();
0x0008c794 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0008c796 cbz r0, 0x8c7c8 | goto label_4;
| }
0x0008c798 bl 0x4ee84 | g_file_info_get_name ();
0x0008c79c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0008c79e mov r5, r0 | r5 = r0;
0x0008c7a0 ldr r1, [r3, r7] | r1 = *((r3 + r7));
0x0008c7a2 blx 0x2b168 | r0 = fcn_0002b168 ();
0x0008c7a6 cmp r0, 0 |
0x0008c7a8 bne 0x8c74a |
| } while (r0 != 0);
| label_3:
0x0008c7aa ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0008c7ac mov r1, r5 | r1 = r5;
0x0008c7ae ldr.w r0, [r3, r8, lsl 2] | offset_0 = r8 << 2;
| r0 = *((r3 + offset_0));
0x0008c7b2 bl 0x43e9c | r0 = g_file_get_child ();
0x0008c7b6 mov r3, r0 | r3 = r0;
0x0008c7b8 mov r0, r4 | r0 = r4;
0x0008c7ba mov r4, r3 | r4 = r3;
0x0008c7bc blx 0x28d00 | fcn_00028d00 ();
0x0008c7be invalid |
| label_1:
0x0008c7c0 mov r0, r4 | r0 = r4;
0x0008c7c2 add sp, 0x14 |
0x0008c7c4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0008c7c8 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0008c7ca ldr r0, [r3, r7] | r0 = *((r3 + r7));
0x0008c7cc blx 0x28d00 | fcn_00028d00 ();
0x0008c7d0 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0008c7d2 str r4, [r3, r7] | *((r3 + r7)) = r4;
0x0008c7d4 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0008c7d6 ldr r0, [r3, r7] | r0 = *((r3 + r7));
0x0008c7d8 blx 0x28d00 | fcn_00028d00 ();
0x0008c7dc ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0008c7de str r4, [r3, r7] | *((r3 + r7)) = r4;
0x0008c7e0 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0008c7e2 ldr r4, [r3, r7] | r4 = *((r3 + r7));
0x0008c7e4 cmp r4, 0 |
| if (r4 != 0) {
0x0008c7e6 bne 0x8c78a | goto label_0;
| }
| label_2:
0x0008c7e8 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0008c7ec ble 0x8c7c0 | goto label_1;
| }
0x0008c7ee ldr r1, [sp, 8] | r1 = var_8h;
0x0008c7f0 mov r0, r6 | r0 = r6;
0x0008c7f2 bl 0x8c72c | r0 = fcn_0008c72c (r0, r1);
| if (r0 != 0) {
0x0008c7f6 cbz r0, 0x8c80c |
0x0008c7f8 ldr r2, [r6, 0x18] | r2 = *((r6 + 0x18));
0x0008c7fa mov r3, r4 | r3 = r4;
0x0008c7fc ldr r1, [sp, 0xc] | r1 = var_ch;
0x0008c7fe str r0, [r2, r7] | *((r2 + r7)) = r0;
0x0008c800 mov r2, r4 | r2 = r4;
0x0008c802 str r4, [sp] | *(sp) = r4;
0x0008c804 ldr r5, [r6, 0x14] | r5 = *((r6 + 0x14));
0x0008c806 bl 0x43f14 | g_file_enumerate_children ();
0x0008c80a str r0, [r5, r7] | *((r5 + r7)) = r0;
| }
0x0008c80c ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0008c80e ldr r3, [r3, r7] | r3 = *((r3 + r7));
0x0008c810 cmp r3, 0 |
| if (r3 == 0) {
0x0008c812 beq 0x8c7c0 | goto label_1;
| }
0x0008c814 mov r4, r3 | r4 = r3;
0x0008c816 b 0x8c78a | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0xc2f48 */
| #include <stdint.h>
|
; (fcn) fcn.000c2f48 () | void fcn_000c2f48 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
0x000c2f48 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000c2f4c mov r4, r0 | r4 = r0;
0x000c2f4e vpush {d8} | __asm ("vpush {d8}");
0x000c2f52 sub sp, 0x2c |
0x000c2f54 ldr r3, [r0] | r3 = *(r0);
0x000c2f56 ldr.w sb, [r0, 0x14] | sb = *((r0 + 0x14));
0x000c2f5a ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x000c2f5c bl 0x5961c | r0 = g_io_stream_get_output_stream ();
0x000c2f60 mov r5, r0 | r5 = r0;
0x000c2f62 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000c2f64 bl 0xbbdbc | r0 = g_dbus_message_get_unix_fd_list ();
0x000c2f68 mov r8, r0 | r8 = r0;
0x000c2f6a mov r0, r5 | r0 = r5;
0x000c2f6c bl 0x63994 | r0 = g_output_stream_has_pending ();
| if (r0 != 0) {
0x000c2f70 cbz r0, 0xc2f8e |
0x000c2f72 ldr r3, [pc, 0x280] |
0x000c2f74 movw r2, 0x3ea | r2 = (r2 & 0xFFFF0000) | (case.0x89708.0 & 0xFFFF);
0x000c2f78 ldr r4, [pc, 0x27c] |
0x000c2f7a ldr r1, [pc, 0x280] |
0x000c2f7c ldr r0, [pc, 0x280] |
0x000c2f7e add r3, pc | r3 = 0x186178;
0x000c2f80 add r4, pc | r4 = 0x18617c;
0x000c2f82 adds r3, 0x84 | r3 += 0x84;
0x000c2f84 add r1, pc | r1 = 0x186186;
0x000c2f86 str r4, [sp] | *(sp) = r4;
0x000c2f88 add r0, pc | r0 = 0x18618c;
0x000c2f8a blx 0x29610 | r0 = fcn_00029610 ();
| }
0x000c2f8e mov r6, r0 | r6 = r0;
0x000c2f90 ldrd r0, r7, [r4, 0xc] | __asm ("ldrd r0, r7, [r4, 0xc]");
0x000c2f94 cmp r7, r0 |
0x000c2f96 sbcs.w r3, r6, r6 | __asm ("sbcs.w r3, r6, r6");
0x000c2f9a bge 0xc303e |
| while (1) {
0x000c2f9c cmp r5, 0 |
| if (r5 != 0) {
0x000c2f9e beq 0xc3002 |
0x000c2fa0 bl 0x76bac | fcn_00076bac ();
0x000c2fa4 ldr r3, [r5] | r3 = *(r5);
0x000c2fa6 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000c2fa8 cbz r3, 0xc2fb0 |
0x000c2faa ldr r3, [r3] | r3 = *(r3);
0x000c2fac cmp r3, r0 |
| if (r3 == r0) {
0x000c2fae beq 0xc2fb8 | goto label_3;
| }
| }
0x000c2fb0 mov r0, r5 | r0 = r5;
0x000c2fb2 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x000c2fb6 cbz r0, 0xc3002 | goto label_4;
| }
| label_3:
0x000c2fb8 cmp r7, 0 |
| if (r7 != 0) {
0x000c2fba bne 0xc3016 | goto label_5;
| }
0x000c2fbc ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000c2fbe str r7, [sp, 0x18] | var_18h = r7;
0x000c2fc0 str r3, [sp, 0x24] | var_24h = r3;
0x000c2fc2 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000c2fc4 str r3, [sp, 0x20] | var_20h = r3;
0x000c2fc6 cmp.w r8, 0 |
| if (r8 == 0) {
0x000c2fca beq 0xc30b0 | goto label_6;
| }
0x000c2fcc mov r0, r8 | r0 = r8;
0x000c2fce bl 0x90b08 | r0 = g_unix_fd_list_get_length ();
0x000c2fd2 cmp r0, 0 |
| if (r0 <= 0) {
0x000c2fd4 ble.w 0xc3172 | goto label_7;
| }
0x000c2fd8 ldr r3, [r4] | r3 = *(r4);
0x000c2fda ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000c2fdc lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x000c2fde bpl.w 0xc3158 | goto label_8;
| }
0x000c2fe2 mov r0, r8 | r0 = r8;
0x000c2fe4 bl 0x90e7c | r0 = g_unix_fd_message_new_with_fd_list ();
0x000c2fe8 subs r6, r0, 0 | r6 = r0 - 0;
0x000c2fea mov r2, r0 | r2 = r0;
0x000c2fec it ne |
| if (r6 == r0) {
0x000c2fee movne r6, 1 | r6 = 1;
| }
0x000c2ff0 str r0, [sp, 0x18] | var_18h = r0;
| label_1:
0x000c2ff2 movs r3, 0 | r3 = 0;
0x000c2ff4 add r5, sp, 0x18 | r5 += var_18h;
0x000c2ff6 str r3, [sp, 0x1c] | var_1ch = r3;
0x000c2ff8 ldr r3, [r4] | r3 = *(r4);
0x000c2ffa ldr r0, [r3, 0x30] | r0 = *((r3 + 0x30));
0x000c2ffc cmp r2, 0 |
| if (r2 != 0) {
0x000c2ffe bne 0xc30ba | goto label_9;
| }
0x000c3000 b 0xc30b8 | goto label_10;
| }
| label_4:
0x000c3002 clz r3, r7 | r3 &= r7;
0x000c3006 cmp.w r8, 0 |
0x000c300a lsr.w r3, r3, 5 | r3 >>= 5;
0x000c300e it eq |
| if (r8 != 0) {
0x000c3010 moveq r3, 0 | r3 = 0;
| }
0x000c3012 cmp r3, 0 |
| if (r3 != 0) {
0x000c3014 bne 0xc3082 | goto label_11;
| }
| label_5:
0x000c3016 ldrd r1, r2, [r4, 8] | __asm ("ldrd r1, r2, [r4, 8]");
0x000c301a mov r0, r5 | r0 = r5;
0x000c301c str r4, [sp, 8] | var_8h = r4;
0x000c301e ldr r3, [r4] | r3 = *(r4);
0x000c3020 ldr r4, [pc, 0x1e0] |
0x000c3022 subs r2, r2, r7 | r2 -= r7;
0x000c3024 add r1, r7 | r1 += r7;
0x000c3026 add r4, pc | r4 = 0x18622e;
0x000c3028 str r4, [sp, 4] | var_4h = r4;
0x000c302a ldr r4, [r3, 0x1c] | r4 = *((r3 + 0x1c));
0x000c302c movs r3, 0 | r3 = 0;
0x000c302e str r4, [sp] | *(sp) = r4;
0x000c3030 bl 0x63a84 | g_output_stream_write_async ();
| label_0:
0x000c3034 add sp, 0x2c |
0x000c3036 vpop {d8} | __asm ("vpop {d8}");
0x000c303a pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x000c303e mov r1, r6 | r1 = r6;
0x000c3040 bl 0xe0564 | r0 = fcn_000e0564 (r0, r1, r2);
0x000c3044 vmov d8, r0, r1 | __asm ("vmov d8, r0, r1");
0x000c3048 mov r0, r7 | r0 = r7;
0x000c304a mov r1, r6 | r1 = r6;
0x000c304c bl 0xe0564 | fcn_000e0564 (r0, r1, r2);
0x000c3050 ldr r2, [pc, 0x1b4] |
0x000c3052 ldr r3, [pc, 0x1b8] |
0x000c3054 vmov d0, r0, r1 | __asm ("vmov d0, r0, r1");
0x000c3058 add r2, pc | r2 = 0x186264;
0x000c305a ldr r1, [pc, 0x1b4] |
0x000c305c str r2, [sp, 4] | var_4h = r2;
0x000c305e add r3, pc | r3 = 0x186270;
0x000c3060 ldr r2, [pc, 0x1b0] |
0x000c3062 adds r3, 0x84 | r3 += 0x84;
0x000c3064 ldr r0, [pc, 0x1b0] |
0x000c3066 add r1, pc | r1 = 0x18627c;
0x000c3068 vmov.f64 d1, d8 | __asm ("vmov.f64 d1, d8");
0x000c306c add r2, pc | r2 = 0x186284;
0x000c306e str r2, [sp] | *(sp) = r2;
0x000c3070 movs r2, 0x69 | r2 = 0x69;
0x000c3072 str r2, [sp, 8] | var_8h = r2;
0x000c3074 add r0, pc | r0 = 0x186290;
0x000c3076 movw r2, 0x3eb | r2 = (r2 & 0xFFFF0000) | (case.0x89708.0 & 0xFFFF);
0x000c307a blx 0x29fb4 | fcn_00029fb4 ();
0x000c307e ldr r7, [r4, 0x10] | r7 = *((r4 + 0x10));
0x000c3080 b 0xc2f9c |
| }
| label_11:
0x000c3082 bl 0x57bc8 | g_io_error_quark ();
0x000c3086 ldr r3, [r5] | r3 = *(r5);
0x000c3088 mov r4, r0 | r4 = r0;
0x000c308a ldr r0, [r3] | r0 = *(r3);
0x000c308c blx 0x2a40c | listxattr ();
0x000c3090 ldr r3, [pc, 0x188] |
0x000c3092 movs r2, 0 | r2 = 0;
0x000c3094 str r0, [sp] | *(sp) = r0;
0x000c3096 mov r1, r4 | r1 = r4;
0x000c3098 mov r0, sb | r0 = sb;
0x000c309a add r3, pc | r3 = 0x1862ba;
0x000c309c bl 0x7adb0 | g_task_return_new_error ();
0x000c30a0 mov r0, sb | r0 = sb;
0x000c30a2 add sp, 0x2c |
0x000c30a4 vpop {d8} | __asm ("vpop {d8}");
0x000c30a8 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000c30ac b.w 0x28cfc | void (*0x28cfc)() ();
| label_6:
0x000c30b0 ldr r3, [r4] | r3 = *(r4);
0x000c30b2 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x000c30b6 ldr r0, [r3, 0x30] | r0 = *((r3 + 0x30));
| label_10:
0x000c30b8 movs r5, 0 | r5 = 0;
| label_9:
0x000c30ba add r2, sp, 0x1c | r2 += var_1ch;
0x000c30bc movs r1, 0 | r1 = 0;
0x000c30be str r2, [sp, 0x10] | var_10h = r2;
0x000c30c0 add r2, sp, 0x20 | r2 += var_20h;
0x000c30c2 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000c30c4 str r5, [sp] | *(sp) = r5;
0x000c30c6 str r6, [sp, 4] | var_4h = r6;
0x000c30c8 str r3, [sp, 0xc] | var_ch = r3;
0x000c30ca movs r3, 1 | r3 = 1;
0x000c30cc str r1, [sp, 8] | var_8h = r1;
0x000c30ce bl 0x705e0 | g_socket_send_message ();
0x000c30d2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000c30d4 mov r5, r0 | r5 = r0;
| if (r3 != 0) {
0x000c30d6 cbz r3, 0xc30de |
0x000c30d8 mov r0, r3 | r0 = r3;
0x000c30da blx 0x28d00 | fcn_00028d00 ();
| }
0x000c30de adds r2, r5, 1 | r2 = r5 + 1;
| if (r2 == r5) {
0x000c30e0 beq 0xc318c | goto label_12;
| }
0x000c30e2 cmp r5, 0 |
| if (r5 <= 0) {
0x000c30e4 ble 0xc313c | goto label_13;
| }
0x000c30e6 ldr r0, [pc, 0x138] |
0x000c30e8 dmb ish | __asm ("dmb ish");
0x000c30ec add r0, pc | r0 = 0x186312;
0x000c30ee ldr r3, [r0, 0x10] | r3 = *(0x186322);
0x000c30f0 dmb ish | __asm ("dmb ish");
0x000c30f4 cmp r3, 0 |
0x000c30f6 beq 0xc317c |
| while (r0 == 0) {
| label_2:
0x000c30f8 ldr r3, [pc, 0x128] |
0x000c30fa add r3, pc |
0x000c30fc ldr r3, [r3, 0xc] | r3 = *(0x18632e);
0x000c30fe lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 < r3) {
0x000c3100 bpl 0xc310a |
0x000c3102 mov r1, r4 | r1 = r4;
0x000c3104 mov r0, r5 | r0 = r5;
0x000c3106 bl 0xc2b8c | fcn_000c2b8c (r0, r1);
| }
0x000c310a ldrd r3, r2, [r4, 0xc] | __asm ("ldrd r3, r2, [r4, 0xc]");
0x000c310e add r5, r2 | r5 += r2;
0x000c3110 cmp r5, r3 |
0x000c3112 str r5, [r4, 0x10] | *((r4 + 0x10)) = r5;
| if (r5 >= r3) {
0x000c3114 bls 0xc3132 |
0x000c3116 ldr r3, [pc, 0x110] |
0x000c3118 movw r2, 0x432 | r2 = (r2 & 0xFFFF0000) | (case.0x89708.0 & 0xFFFF);
0x000c311c ldr r4, [pc, 0x10c] |
0x000c311e ldr r1, [pc, 0x110] |
0x000c3120 ldr r0, [pc, 0x110] |
0x000c3122 add r3, pc | r3 = 0x186350;
0x000c3124 add r4, pc | r4 = 0x186354;
0x000c3126 adds r3, 0x84 | r3 += 0x84;
0x000c3128 add r1, pc | r1 = 0x18635e;
0x000c312a str r4, [sp] | *(sp) = r4;
0x000c312c add r0, pc | r0 = 0x186364;
0x000c312e blx 0x29610 | fcn_00029610 ();
| }
| if (r3 == 0x84) {
0x000c3132 beq 0xc31d2 | goto label_14;
| }
0x000c3134 mov r0, r4 | r0 = r4;
0x000c3136 bl 0xc2f48 | fcn_000c2f48 (r0);
0x000c313a b 0xc3034 | goto label_0;
| label_13:
0x000c313c ldr r3, [pc, 0xf8] |
0x000c313e movw r2, 0x42d | r2 = (r2 & 0xFFFF0000) | (case.0x89708.0 & 0xFFFF);
0x000c3142 ldr r4, [pc, 0xf8] |
0x000c3144 ldr r1, [pc, 0xf8] |
0x000c3146 ldr r0, [pc, 0xfc] |
0x000c3148 add r3, pc | r3 = 0x186384;
0x000c314a add r4, pc | r4 = 0x18638c;
0x000c314c adds r3, 0x84 | r3 += 0x84;
0x000c314e add r1, pc | r1 = 0x186392;
0x000c3150 str r4, [sp] | *(sp) = r4;
0x000c3152 add r0, pc | r0 = 0x18639c;
0x000c3154 blx 0x29610 | fcn_00029610 ();
| label_8:
0x000c3158 bl 0x57bc8 | g_io_error_quark ();
0x000c315c ldr r3, [pc, 0xe8] |
0x000c315e mov r1, r0 | r1 = r0;
0x000c3160 mov r2, r7 | r2 = r7;
0x000c3162 mov r0, sb | r0 = sb;
0x000c3164 add r3, pc | r3 = 0x1863b0;
0x000c3166 bl 0x7adb0 | g_task_return_new_error ();
0x000c316a mov r0, sb | r0 = sb;
0x000c316c blx 0x28d00 | fcn_00028d00 ();
0x000c3170 b 0xc3034 | goto label_0;
| label_7:
0x000c3172 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000c3174 subs r6, r2, 0 | r6 = r2 - 0;
0x000c3176 it ne |
| if (r6 == r2) {
0x000c3178 movne r6, 1 | r6 = 1;
| }
0x000c317a b 0xc2ff2 | goto label_1;
0x000c317c adds r0, 0x10 | r0 += 0x10;
0x000c317e blx 0x2aafc | r0 = g_error_free ();
0x000c3182 cmp r0, 0 |
0x000c3184 beq 0xc30f8 |
| }
0x000c3186 bl 0xc2dcc | fcn_000c2dcc ();
0x000c318a b 0xc30f8 | goto label_2;
| label_12:
0x000c318c ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x000c318e bl 0x57bc8 | g_io_error_quark ();
0x000c3192 movs r2, 0x1b | r2 = 0x1b;
0x000c3194 mov r1, r0 | r1 = r0;
0x000c3196 mov r0, r5 | r0 = r5;
0x000c3198 blx 0x2a09c | r0 = fcn_0002a09c ();
| if (r0 != 0) {
0x000c319c cbz r0, 0xc31e2 |
0x000c319e ldr r3, [r4] | r3 = *(r4);
0x000c31a0 movs r1, 0x1c | r1 = 0x1c;
0x000c31a2 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x000c31a4 ldr r0, [r3, 0x30] | r0 = *((r3 + 0x30));
0x000c31a6 bl 0x6ec60 | g_socket_create_source ();
0x000c31aa ldr r1, [pc, 0xa0] |
0x000c31ac mov r2, r4 | r2 = r4;
0x000c31ae movs r3, 0 | r3 = 0;
0x000c31b0 mov r4, r0 | r4 = r0;
0x000c31b2 add r1, pc | r1 = 0x186404;
0x000c31b4 blx 0x28ce4 | g_hash_table_lookup_extended ();
0x000c31b8 blx 0x2b30c | r0 = fcn_0002b30c ();
0x000c31bc mov r1, r0 | r1 = r0;
0x000c31be mov r0, r4 | r0 = r4;
0x000c31c0 blx 0x2ac2c | fcn_0002ac2c ();
0x000c31c4 mov r0, r4 | r0 = r4;
0x000c31c6 blx 0x2ab74 | g_variant_get_fixed_array ();
0x000c31ca ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000c31cc blx 0x2ad10 | fcn_0002ad10 ();
0x000c31d0 b 0xc3034 | goto label_0;
| label_14:
0x000c31d2 mov r0, sb | r0 = sb;
0x000c31d4 movs r1, 1 | r1 = 1;
0x000c31d6 bl 0x7ab4c | g_task_return_boolean ();
0x000c31da mov r0, sb | r0 = sb;
0x000c31dc blx 0x28d00 | fcn_00028d00 ();
0x000c31e0 b 0xc3034 | goto label_0;
| }
0x000c31e2 mov r0, sb | r0 = sb;
0x000c31e4 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000c31e6 bl 0x7ac7c | g_task_return_error ();
0x000c31ea mov r0, sb | r0 = sb;
0x000c31ec blx 0x28d00 | fcn_00028d00 ();
0x000c31f0 b 0xc3034 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x9b7e4 */
| #include <stdint.h>
|
; (fcn) sym.g_action_group_get_action_state_hint () | void g_action_group_get_action_state_hint (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0009b7e4 push.w {r4, r5, r6, r7, r8, lr} |
| if (r0 != 0) {
0x0009b7e8 cbz r0, 0x9b81c |
0x0009b7ea mov r4, r0 | r4 = r0;
0x0009b7ec mov r7, r1 | r7 = r1;
0x0009b7ee bl 0x9b3d4 | g_action_group_get_type ();
0x0009b7f2 ldr r6, [r4] | r6 = *(r4);
0x0009b7f4 mov r5, r0 | r5 = r0;
| if (r6 != 0) {
0x0009b7f6 cbz r6, 0x9b7fe |
0x0009b7f8 ldr r3, [r6] | r3 = *(r6);
0x0009b7fa cmp r3, r0 |
| if (r3 == r0) {
0x0009b7fc beq 0x9b808 | goto label_0;
| }
| }
0x0009b7fe mov r1, r5 | r1 = r5;
0x0009b800 mov r0, r4 | r0 = r4;
0x0009b802 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x0009b806 cbz r0, 0x9b81c | goto label_1;
| }
| label_0:
0x0009b808 mov r1, r5 | r1 = r5;
0x0009b80a mov r0, r6 | r0 = r6;
0x0009b80c blx 0x286d8 | g_variant_type_is_variant ();
0x0009b810 mov r1, r7 | r1 = r7;
0x0009b812 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0009b814 mov r0, r4 | r0 = r4;
0x0009b816 pop.w {r4, r5, r6, r7, r8, lr} |
0x0009b81a bx r3 | return uint32_t (*r3)() ();
| }
| label_1:
0x0009b81c ldr r1, [pc, 0x14] |
0x0009b81e ldr r2, [pc, 0x18] |
0x0009b820 ldr r0, [pc, 0x18] |
0x0009b822 add r1, pc | r1 = 0x13705a;
0x0009b824 add r2, pc | r2 = 0x137062;
0x0009b826 adds r1, 0x8c | r1 += 0x8c;
0x0009b828 add r0, pc |
0x0009b82a blx 0x29e2c | r0 = fcn_00029e2c ();
0x0009b82c add.w r0, r0, r0, lsl 8 | r0 = 0x137068;
0x0009b830 pop.w {r4, r5, r6, r7, r8, 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/libgio-2.0.so.0.6800.4 @ 0x9e01c */
| #include <stdint.h>
|
; (fcn) sym.g_action_parse_detailed_name () | void g_action_parse_detailed_name (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009e01c mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, case.0x89708.0");
0x0009e020 mov r4, r3 | r4 = r3;
0x0009e022 ldrb r3, [r0] | r3 = *(r0);
0x0009e024 sub sp, 0xc |
0x0009e026 mov r5, r0 | r5 = r0;
0x0009e028 tst.w r3, 0xdf |
| if ((r3 & 0xdf) == 0) {
0x0009e02c beq 0x9e084 | goto label_1;
| }
0x0009e02e mov r7, r1 | r7 = r1;
0x0009e030 ldr r1, [pc, 0xd0] |
0x0009e032 mov r8, r2 | r8 = r2;
0x0009e034 add r1, pc | r1 = 0x13c13c;
0x0009e036 blx 0x2ae90 | r0 = fcn_0002ae90 ();
0x0009e03a add.w sb, r5, r0 | sb = r5 + r0;
0x0009e03e mov r6, r0 | r6 = r0;
0x0009e040 mov r0, sb | r0 = sb;
0x0009e042 blx 0x29b5c | fcn_00029b5c ();
0x0009e046 ldrb r3, [r5, r6] | r3 = *((r5 + r6));
| if (r3 == 0) {
0x0009e048 cbz r3, 0x9e09e | goto label_2;
| }
0x0009e04a subs r3, 0x20 | r3 -= 0x20;
0x0009e04c uxtb r2, r3 | r2 = (int8_t) r3;
0x0009e04e cmp r2, 0x1a |
| if (r2 > 0x1a) {
0x0009e050 bhi 0x9e0a2 | goto label_0;
| }
0x0009e052 cmp r3, 0x1a |
| if (r3 > 0x1a) {
0x0009e054 bhi 0x9e0a2 | goto label_0;
| }
| /* switch table (27 cases) at 0x9e05a */
0x0009e056 tbb [pc, r3] | __asm ("tbb case.0x89708.0");
0x0009e076 subs r0, 1 | r0--;
0x0009e078 ldrb.w r3, [sb, r0] | r3 = *((sb + r0));
0x0009e07a adds r0, 0 | r0 += 0;
0x0009e07c add.w r2, sb, r0 | r2 = sb + r0;
0x0009e080 cmp r3, 0x29 |
| if (r3 == 0x29) {
0x0009e082 beq 0x9e0ec | goto label_3;
| }
| do {
| label_1:
0x0009e084 mov r0, r4 | r0 = r4;
| if (r4 != 0) {
0x0009e086 cbz r4, 0x9e098 |
0x0009e088 ldr r6, [r4] | r6 = *(r4);
| if (r6 == 0) {
0x0009e08a cbz r6, 0x9e0d0 | goto label_4;
| }
0x0009e08c ldr r1, [pc, 0x78] |
0x0009e08e mov r2, r5 | r2 = r5;
0x0009e090 add r1, pc | r1 = 0x13c19c;
0x0009e092 blx 0x2b06c | g_strlcpy ();
0x0009e096 movs r0, 0 | r0 = 0;
| }
0x0009e098 add sp, 0xc |
0x0009e09a pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_2:
0x0009e09e str.w r3, [r8] | __asm ("str.w r3, [r8]");
| label_0:
0x0009e0a2 mov r1, r6 | r1 = r6;
0x0009e0a4 mov r0, r5 | r0 = r5;
0x0009e0a6 blx 0x29460 | r0 = fcn_00029460 ();
0x0009e0aa mov r3, r0 | r3 = r0;
0x0009e0ac movs r0, 1 | r0 = 1;
0x0009e0ae str r3, [r7] | *(r7) = r3;
0x0009e0b0 add sp, 0xc |
0x0009e0b2 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0009e0b6 ldrb.w r3, [sb, 1] | r3 = *((sb + 1));
0x0009e0ba cmp r3, 0x3a |
0x0009e0bc bne 0x9e084 |
| } while (r3 != 0x3a);
0x0009e0be add.w r0, sb, 2 | r0 = sb + 2;
0x0009e0c2 blx 0x297e8 | g_value_copy ();
0x0009e0c6 blx 0x28a88 | fcn_00028a88 ();
0x0009e0ca str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x0009e0ce b 0x9e0a2 | goto label_0;
| label_4:
0x0009e0d0 blx 0x2b054 | g_queue_pop_head ();
0x0009e0d4 ldr r3, [pc, 0x34] |
0x0009e0d6 mov r1, r0 | r1 = r0;
0x0009e0d8 mov r2, r6 | r2 = r6;
0x0009e0da mov r0, r4 | r0 = r4;
0x0009e0dc str r5, [sp] | *(sp) = r5;
0x0009e0de add r3, pc | r3 = 0x13c1ee;
0x0009e0e0 blx 0x29f08 | g_bytes_get_type ();
0x0009e0e4 mov r0, r6 | r0 = r6;
0x0009e0e6 add sp, 0xc |
0x0009e0e8 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0009e0ea strh r0, [r6, 0x1e] | *((r6 + 0x1e)) = r0;
| label_3:
0x0009e0ec movs r3, 0 | r3 = 0;
0x0009e0ee add.w r1, sb, 1 | r1 = sb + 1;
0x0009e0f2 mov r0, r3 | r0 = r3;
0x0009e0f4 str r4, [sp] | *(sp) = r4;
0x0009e0f6 blx 0x2a1c0 | g_unix_fd_source_new ();
0x0009e0fa str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x0009e0fe cmp r0, 0 |
| if (r0 != 0) {
0x0009e100 bne 0x9e0a2 | goto label_0;
| }
0x0009e102 b 0x9e084 | 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/libgio-2.0.so.0.6800.4 @ 0x9a234 */
| #include <stdint.h>
|
; (fcn) sym.g_application_command_line_printerr () | void g_application_command_line_printerr (int16_t arg1) {
| int16_t var_4h;
| int16_t var_14h;
| int16_t var_18h;
| r0 = arg1;
0x0009a234 push {r1, r2, r3} |
0x0009a236 push {r4, r5, lr} |
0x0009a238 sub sp, 8 |
0x0009a23a ldr r5, [sp, 0x14] | r5 = var_14h;
| if (r0 != 0) {
0x0009a23c cbz r0, 0x9a280 |
0x0009a23e mov r4, r0 | r4 = r0;
0x0009a240 bl 0x99d78 | g_application_command_line_get_type ();
0x0009a244 ldr r3, [r4] | r3 = *(r4);
0x0009a246 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x0009a248 cbz r3, 0x9a250 |
0x0009a24a ldr r3, [r3] | r3 = *(r3);
0x0009a24c cmp r3, r0 |
| if (r3 == r0) {
0x0009a24e beq 0x9a258 | goto label_0;
| }
| }
0x0009a250 mov r0, r4 | r0 = r4;
0x0009a252 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x0009a256 cbz r0, 0x9a280 | goto label_1;
| }
| if (r5 == 0) {
| label_0:
0x0009a258 cbz r5, 0x9a29c | goto label_2;
| }
0x0009a25a add r1, sp, 0x18 | r1 += var_18h;
0x0009a25c mov r0, r5 | r0 = r5;
0x0009a25e str r1, [sp, 4] | var_4h = r1;
0x0009a260 blx 0x29ce0 | g_utf8_get_char ();
0x0009a262 ldc p8, c6, [lr, -0x8c]! | __asm ("ldc p8, c6, [lr, -0x8c]!");
0x0009a264 ldr r3, [r4] | r3 = *(r4);
0x0009a266 mov r1, r0 | r1 = r0;
0x0009a268 mov r5, r0 | r5 = r0;
0x0009a26a mov r0, r4 | r0 = r4;
0x0009a26c ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x0009a26e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0009a270 mov r0, r5 | r0 = r5;
0x0009a272 blx 0x286c0 | g_atomic_ref_count_inc ();
0x0009a276 add sp, 8 |
0x0009a278 pop.w {r4, r5, lr} |
0x0009a27c add sp, 0xc |
0x0009a27e bx lr | return;
| }
| label_1:
0x0009a280 ldr r1, [pc, 0x34] |
0x0009a282 ldr r2, [pc, 0x38] |
0x0009a284 ldr r0, [pc, 0x38] |
0x0009a286 add r1, pc | r1 = 0x134542;
0x0009a288 add r2, pc | r2 = 0x13454a;
0x0009a28a adds r1, 0xcc | r1 += 0xcc;
0x0009a28c add r0, pc | r0 = 0x134550;
0x0009a28e blx 0x29e2c | fcn_00029e2c ();
0x0009a292 add sp, 8 |
0x0009a294 pop.w {r4, r5, lr} |
0x0009a298 add sp, 0xc |
0x0009a29a bx lr | return;
| label_2:
0x0009a29c ldr r1, [pc, 0x24] |
0x0009a29e ldr r2, [pc, 0x28] |
0x0009a2a0 ldr r0, [pc, 0x28] |
0x0009a2a2 add r1, pc | r1 = 0x13456a;
0x0009a2a4 add r2, pc | r2 = 0x134572;
0x0009a2a6 adds r1, 0xcc | r1 += 0xcc;
0x0009a2a8 add r0, pc | r0 = 0x134578;
0x0009a2aa blx 0x29e2c | fcn_00029e2c ();
0x0009a2ae add sp, 8 |
0x0009a2b0 pop.w {r4, r5, lr} |
0x0009a2b4 add sp, 0xc |
0x0009a2b6 bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x379b8 */
| #include <stdint.h>
|
; (fcn) sym.g_buffered_input_stream_fill_async () | void g_buffered_input_stream_fill_async (int16_t arg_30h, int16_t arg_34h, uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000379b8 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x000379bc mov r6, r3 | r6 = r3;
0x000379be ldr.w r8, [pc, 0x120] | r8 = "Whether this is a site-local address";
0x000379c2 sub sp, 0x18 |
0x000379c4 movs r3, 0 | r3 = 0;
0x000379c6 str r3, [sp, 0x14] | var_14h = r3;
0x000379c8 add r8, pc | r8 += pc;
0x000379ca cmp r0, 0 |
| if (arg_30h != ) {
0x000379cc beq 0x37a36 |
0x000379ce mov r4, r0 | r4 = r0;
0x000379d0 mov r5, r1 | r5 = r1;
0x000379d2 mov r7, r2 | r7 = r2;
0x000379d4 bl 0x372d8 | g_buffered_input_stream_get_type ();
0x000379d8 ldr r3, [r4] | r3 = *(r4);
0x000379da mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000379dc cbz r3, 0x379e4 |
0x000379de ldr r3, [r3] | r3 = *(r3);
0x000379e0 cmp r3, r0 |
| if (r3 == r0) {
0x000379e2 beq 0x379ec | goto label_0;
| }
| }
0x000379e4 mov r0, r4 | r0 = r4;
0x000379e6 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x000379ea cbz r0, 0x37a36 | goto label_1;
| }
| label_0:
0x000379ec cmp r5, 0 |
| if (r5 == 0) {
0x000379ee beq 0x37a9e | goto label_2;
| }
0x000379f0 adds r3, r5, 1 | r3 = r5 + 1;
| if (r3 < r5) {
0x000379f2 blt 0x37a68 | goto label_3;
| }
0x000379f4 bl 0x56718 | r0 = g_input_stream_get_type ();
0x000379f8 mov r1, r0 | r1 = r0;
0x000379fa mov r0, r4 | r0 = r4;
0x000379fc blx 0x2a598 | g_slist_free_1 ();
0x00037a00 add r1, sp, 0x14 | r1 += var_14h;
0x00037a02 bl 0x56d04 | g_input_stream_set_pending ();
0x00037a04 invalid |
0x00037a08 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00037a0a mov r0, r4 | r0 = r4;
0x00037a0c ldr r2, [sp, 0x30] | r2 = *(arg_30h);
0x00037a0e ldr.w r8, [r4] | r8 = *(r4);
0x00037a12 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00037a14 blx 0x2970c | fcn_0002970c ();
0x00037a16 cdp p6, 7, c4, c10, c0, 1 | __asm ("cdp p6, 7, c4, c10, c0, 1");
0x00037a1a ldr r4, [pc, 0xc8] |
0x00037a1c ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x00037a1e mov r2, r7 | r2 = r7;
0x00037a20 mov r1, r5 | r1 = r5;
0x00037a22 add r4, pc | r4 = 0x6f50c;
0x00037a24 str r3, [sp, 4] | var_4h = r3;
0x00037a26 mov r3, r6 | r3 = r6;
0x00037a28 str r4, [sp] | *(sp) = r4;
0x00037a2a ldr.w r4, [r8, 0x8c] | r4 = *((r8 + 0x8c));
0x00037a2e blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x00037a30 add sp, 0x18 |
0x00037a32 pop.w {r4, r5, r6, r7, r8, pc} |
| }
| label_1:
0x00037a36 ldr r1, [pc, 0xb0] |
0x00037a38 ldr r2, [pc, 0xb0] |
0x00037a3a ldr r0, [pc, 0xb4] |
0x00037a3c add r1, pc | r1 = 0x6f52a;
0x00037a3e add r2, pc | r2 = 0x6f52e;
0x00037a40 adds r1, 0x88 | r1 += 0x88;
0x00037a42 add r0, pc | r0 = 0x6f538;
0x00037a44 blx 0x29e2c | fcn_00029e2c ();
0x00037a48 add sp, 0x18 |
0x00037a4a pop.w {r4, r5, r6, r7, r8, pc} |
0x00037a4e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00037a50 mov r0, r4 | r0 = r4;
0x00037a52 ldr r3, [pc, 0xa0] | r3 = *(0x37af6);
0x00037a54 ldr r2, [sp, 0x34] | r2 = *(arg_34h);
0x00037a56 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00037a5a str r1, [sp] | *(sp) = r1;
0x00037a5c ldr r1, [sp, 0x30] | r1 = *(arg_30h);
0x00037a5e bl 0x7ad20 | g_task_report_error ();
0x00037a62 add sp, 0x18 |
0x00037a64 pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x00037a68 bl 0x57bc8 | r0 = g_io_error_quark ();
0x00037a6c mov r5, r0 | r5 = r0;
0x00037a6e ldr r0, [pc, 0x88] |
0x00037a70 add r0, pc | r0 = 0x6f56e;
0x00037a72 blx 0x29604 | fcn_00029604 ();
0x00037a76 ldr r1, [pc, 0x84] |
0x00037a78 mov r2, r0 | r2 = r0;
0x00037a7a ldr r3, [pc, 0x78] | r3 = *(0x37af6);
0x00037a7c mov r0, r4 | r0 = r4;
0x00037a7e add r1, pc | r1 = 0x6f580;
0x00037a80 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00037a84 adds r1, 0x88 | r1 += 0x88;
0x00037a86 str r2, [sp, 8] | var_8h = r2;
0x00037a88 movs r2, 0xd | r2 = 0xd;
0x00037a8a str r2, [sp, 4] | var_4h = r2;
0x00037a8c str r1, [sp, 0xc] | var_ch = r1;
0x00037a8e ldr r2, [sp, 0x34] | r2 = *(arg_34h);
0x00037a90 ldr r1, [sp, 0x30] | r1 = *(arg_30h);
0x00037a92 str r5, [sp] | *(sp) = r5;
0x00037a94 bl 0x7ad78 | g_task_report_new_error ();
0x00037a98 add sp, 0x18 |
0x00037a9a pop.w {r4, r5, r6, r7, r8, pc} |
| label_2:
0x00037a9e ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [arg_30h]");
0x00037aa2 mov r1, r6 | r1 = r6;
0x00037aa4 mov r0, r4 | r0 = r4;
0x00037aa6 bl 0x79f10 | g_task_new ();
0x00037aaa ldr r3, [pc, 0x48] | r3 = *(0x37af6);
0x00037aac mov r4, r0 | r4 = r0;
0x00037aae ldr.w r1, [r8, r3] | r1 = *((r8 + r3));
0x00037ab2 bl 0x7a078 | g_task_set_source_tag ();
0x00037ab6 mov r0, r4 | r0 = r4;
0x00037ab8 bl 0x7a348 | r0 = g_task_get_name ();
0x00037abc cbz r0, 0x37ad2 |
| while (1) {
0x00037abe movs r1, 0 | r1 = 0;
0x00037ac0 mov r0, r4 | r0 = r4;
0x00037ac2 bl 0x7aa14 | g_task_return_int ();
0x00037ac6 mov r0, r4 | r0 = r4;
0x00037ac8 blx 0x28d00 | fcn_00028d00 ();
0x00037acc add sp, 0x18 |
0x00037ace pop.w {r4, r5, r6, r7, r8, pc} |
0x00037ad2 ldr r1, [pc, 0x2c] |
0x00037ad4 mov r0, r4 | r0 = r4;
0x00037ad6 add r1, pc | r1 = 0x6f5dc;
0x00037ad8 bl 0x7a0c0 | g_task_set_name ();
0x00037adc b 0x37abe |
| }
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x38b94 */
| #include <stdint.h>
|
; (fcn) sym.g_buffered_output_stream_set_buffer_size () | void g_buffered_output_stream_set_buffer_size (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00038b94 push {r3, r4, r5, r6, r7, lr} |
| if (r0 == 0) {
0x00038b96 cbz r0, 0x38c00 | goto label_0;
| }
0x00038b98 mov r5, r0 | r5 = r0;
0x00038b9a mov r7, r1 | r7 = r1;
0x00038b9c bl 0x3871c | g_buffered_output_stream_get_type ();
0x00038ba0 ldr r3, [r5] | r3 = *(r5);
0x00038ba2 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x00038ba4 cbz r3, 0x38bac |
0x00038ba6 ldr r3, [r3] | r3 = *(r3);
0x00038ba8 cmp r3, r0 |
| if (r3 == r0) {
0x00038baa beq 0x38bb4 | goto label_1;
| }
| }
0x00038bac mov r0, r5 | r0 = r5;
0x00038bae blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x00038bb2 cbz r0, 0x38c00 | goto label_0;
| }
| label_1:
0x00038bb4 ldr r4, [r5, 0x14] | r4 = *((r5 + 0x14));
0x00038bb6 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00038bb8 cmp r3, r7 |
| if (r3 == r7) {
0x00038bba beq 0x38c2a | goto label_2;
| }
0x00038bbc ldr r3, [r4] | r3 = *(r4);
| if (r3 == 0) {
0x00038bbe cbz r3, 0x38c16 | goto label_3;
| }
0x00038bc0 ldrd r2, r3, [r4, 8] | __asm ("ldrd r2, r3, [r4, 8]");
0x00038bc4 cmp r2, 1 |
0x00038bc6 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 >= 1) {
0x00038bca blt 0x38bd2 |
0x00038bcc cmp r7, r2 |
0x00038bce it lo |
| if (r7 < r2) {
0x00038bd0 movlo r7, r2 | r7 = r2;
| goto label_4;
| }
| }
| label_4:
0x00038bd2 mov r0, r7 | r0 = r7;
0x00038bd4 blx 0x29284 | g_spawn_async_with_pipes ();
0x00038bd8 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00038bda mov r6, r0 | r6 = r0;
0x00038bdc ldr r1, [r4] | r1 = *(r4);
0x00038bde blx 0x29cf0 | fcn_00029cf0 ();
0x00038be2 ldr r0, [r4] | r0 = *(r4);
0x00038be4 blx 0x286c0 | g_atomic_ref_count_inc ();
0x00038be8 strd r6, r7, [r4] | __asm ("strd r6, r7, [r4]");
| do {
0x00038bec movs r1, 0x50 | r1 = 0x50;
0x00038bee mov r0, r5 | r0 = r5;
0x00038bf0 blx 0x2a598 | g_slist_free_1 ();
0x00038bf4 ldr r1, [pc, 0x34] |
0x00038bf6 pop.w {r3, r4, r5, r6, r7, lr} |
0x00038bfa add r1, pc | r1 = 0x7182a;
0x00038bfc b.w 0x293ec | void (*0x293ec)() ();
| label_0:
0x00038c00 ldr r1, [pc, 0x2c] |
0x00038c02 ldr r2, [pc, 0x30] |
0x00038c04 ldr r0, [pc, 0x30] |
0x00038c06 add r1, pc | r1 = 0x7183a;
0x00038c08 pop.w {r3, r4, r5, r6, r7, lr} |
0x00038c0c add r2, pc | r2 = 0x71846;
0x00038c0e adds r1, 0x8c | r1 += 0x8c;
0x00038c10 add r0, pc | r0 = 0x7184c;
0x00038c12 b.w 0x29e28 | void (*0x29e28)() ();
| label_3:
0x00038c16 mov r0, r7 | r0 = r7;
0x00038c18 blx 0x29284 | g_spawn_async_with_pipes ();
0x00038c1c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00038c20 strd r0, r7, [r4] | __asm ("strd r0, r7, [r4]");
0x00038c24 vstr d16, [r4, 8] | __asm ("vstr d16, [r4, 8]");
0x00038c28 b 0x38bec |
| } while (1);
| label_2:
0x00038c2a pop {r3, r4, r5, r6, r7, 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/libgio-2.0.so.0.6800.4 @ 0xc9738 */
| #include <stdint.h>
|
; (fcn) sym.g_dbus_interface_skeleton_get_connection () | void g_dbus_interface_skeleton_get_connection (int16_t arg1) {
| r0 = arg1;
0x000c9738 push {r4, lr} |
| if (r0 != 0) {
0x000c973a cbz r0, 0xc9770 |
0x000c973c mov r4, r0 | r4 = r0;
0x000c973e bl 0xc8efc | g_dbus_interface_skeleton_get_type ();
0x000c9742 ldr r3, [r4] | r3 = *(r4);
0x000c9744 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000c9746 cbz r3, 0xc974e |
0x000c9748 ldr r3, [r3] | r3 = *(r3);
0x000c974a cmp r3, r0 |
| if (r3 == r0) {
0x000c974c beq 0xc9756 | goto label_0;
| }
| }
0x000c974e mov r0, r4 | r0 = r4;
0x000c9750 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x000c9754 cbz r0, 0xc9770 | goto label_1;
| }
| label_0:
0x000c9756 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c9758 blx 0x2aa04 | fcn_0002aa04 ();
0x000c975c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c975e ldr r4, [r0, 0x10] | r4 = *((r0 + 0x10));
| if (r4 != 0) {
0x000c9760 cbz r4, 0xc9768 |
0x000c9762 ldr r4, [r4] | r4 = *(r4);
| if (r4 == 0) {
0x000c9764 cbz r4, 0xc9768 | goto label_2;
| }
0x000c9766 ldr r4, [r4] | r4 = *(r4);
| }
| label_2:
0x000c9768 blx 0x29ad0 | strtoul (r0, r1, r2);
0x000c976c mov r0, r4 | r0 = r4;
0x000c976e pop {r4, pc} |
| }
| label_1:
0x000c9770 ldr r1, [pc, 0x18] |
0x000c9772 movs r4, 0 | r4 = 0;
0x000c9774 ldr r2, [pc, 0x18] |
0x000c9776 ldr r0, [pc, 0x1c] |
0x000c9778 add r1, pc | r1 = 0x192f08;
0x000c977a add r2, pc | r2 = 0x192f0e;
0x000c977c add.w r1, r1, 0x124 | r1 += case.0x89708.0;
0x000c9780 add r0, pc | r0 = 0x192f1a;
0x000c9782 blx 0x29e2c | fcn_00029e2c ();
0x000c9786 mov r0, r4 | r0 = r4;
0x000c9788 pop {r4, 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/libgio-2.0.so.0.6800.4 @ 0xc9798 */
| #include <stdint.h>
|
; (fcn) sym.g_dbus_interface_skeleton_get_connections () | void g_dbus_interface_skeleton_get_connections (int16_t arg1) {
| r0 = arg1;
0x000c9798 teqlt r8, 112, 10 | __asm ("teqlt r8, 112, 10");
0x000c979c mov r6, r0 | r6 = r0;
0x000c979e bl 0xc8efc | g_dbus_interface_skeleton_get_type ();
0x000c97a2 ldr r3, [r6] | r3 = *(r6);
0x000c97a4 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000c97a6 cbz r3, 0xc97ae |
0x000c97a8 ldr r3, [r3] | r3 = *(r3);
0x000c97aa cmp r3, r0 |
| if (r3 == r0) {
0x000c97ac beq 0xc97b6 | goto label_0;
| }
| }
0x000c97ae mov r0, r6 | r0 = r6;
0x000c97b0 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x000c97b4 cbz r0, 0xc97ec | goto label_1;
| }
| label_0:
0x000c97b6 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000c97b8 blx 0x2aa04 | fcn_0002aa04 ();
0x000c97bc ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000c97be ldr r4, [r0, 0x10] | r4 = *((r0 + 0x10));
| if (r4 == 0) {
0x000c97c0 cbz r4, 0xc9804 | goto label_2;
| }
0x000c97c2 movs r5, 0 | r5 = 0;
| do {
0x000c97c4 ldr r3, [r4] | r3 = *(r4);
0x000c97c6 ldr r0, [r3] | r0 = *(r3);
0x000c97c8 blx 0x2970c | r0 = fcn_0002970c ();
0x000c97cc mov r1, r0 | r1 = r0;
0x000c97ce mov r0, r5 | r0 = r5;
0x000c97d0 blx 0x2a9c0 | fcn_0002a9c0 ();
0x000c97d4 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x000c97d6 mov r5, r0 | r5 = r0;
0x000c97d8 cmp r4, 0 |
0x000c97da bne 0xc97c4 |
| } while (r4 != 0);
0x000c97dc ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
| do {
0x000c97de blx 0x29ad0 | strtoul (r0, r1, r2);
0x000c97e2 mov r0, r5 | r0 = r5;
0x000c97e4 pop.w {r4, r5, r6, lr} |
0x000c97e8 b.w 0x2a734 | void (*0x2a734)() ();
| label_1:
0x000c97ec ldr r1, [pc, 0x18] |
0x000c97ee ldr r2, [pc, 0x1c] |
0x000c97f0 ldr r0, [pc, 0x1c] |
0x000c97f2 add r1, pc | r1 = 0x192ffe;
0x000c97f4 add r2, pc | r2 = 0x193006;
0x000c97f6 add.w r1, r1, 0x150 | r1 += case.0x89708.0;
0x000c97fa add r0, pc | r0 = 0x19300e;
0x000c97fc blx 0x29e2c | fcn_00029e2c ();
0x000c9800 movs r0, 0 | r0 = 0;
0x000c9802 pop {r4, r5, r6, pc} |
| label_2:
0x000c9804 mov r5, r4 | r5 = r4;
0x000c9806 b 0xc97de |
| } 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/libgio-2.0.so.0.6800.4 @ 0x49a20 */
| #include <stdint.h>
|
; (fcn) sym.g_file_attribute_info_list_dup () | void g_file_attribute_info_list_dup (uint32_t arg1) {
| r0 = arg1;
0x00049a20 push.w {r4, r5, r6, r7, r8, lr} |
0x00049a24 mov r5, r0 | r5 = r0;
0x00049a26 cmp r0, 0 |
| if (r0 == 0) {
0x00049a28 beq 0x49a9a | goto label_0;
| }
0x00049a2a movs r0, 0x10 | r0 = 0x10;
0x00049a2c blx 0x2a8fc | r0 = fcn_0002a8fc ();
0x00049a30 mov r6, r0 | r6 = r0;
0x00049a32 movs r0, 1 | r0 = 1;
0x00049a34 movs r2, 0xc | r2 = 0xc;
0x00049a36 movs r1, 0 | r1 = 0;
0x00049a38 str r0, [r6, 0xc] | *((r6 + 0xc)) = r0;
0x00049a3a blx 0x28f64 | fcn_00028f64 ();
0x00049a3e ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00049a40 str r0, [r6, 8] | *((r6 + 8)) = r0;
0x00049a42 blx 0x29f2c | g_string_prepend_c ();
0x00049a46 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00049a48 ldr.w r8, [r3] | r8 = *(r3);
0x00049a4c str.w r8, [r6] | __asm ("str.w r8, [r6]");
0x00049a50 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00049a52 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00049a54 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00049a56 cmp r3, 0 |
0x00049a58 itt gt |
| if (r3 <= 0) {
0x00049a5a movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x00049a5c movgt r7, r4 | r7 = r4;
| }
| if (r3 > 0) {
0x00049a5e bgt 0x49a66 | goto label_1;
| }
0x00049a60 b 0x49a94 | goto label_2;
| do {
0x00049a62 ldr.w r8, [r6] | r8 = *(r6);
| label_1:
0x00049a66 ldr r3, [r5] | r3 = *(r5);
0x00049a68 adds r7, 1 | r7++;
0x00049a6a ldr r0, [r3, r4] | r0 = *((r3 + r4));
0x00049a6c blx 0x28dc4 | fcn_00028dc4 ();
0x00049a70 str.w r0, [r8, r4] | __asm ("str.w r0, [r8, r4]");
0x00049a74 ldr r2, [r5] | r2 = *(r5);
0x00049a76 ldr r3, [r6] | r3 = *(r6);
0x00049a78 add r2, r4 | r2 += r4;
0x00049a7a ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00049a7c add r3, r4 | r3 += r4;
0x00049a7e str r2, [r3, 4] | *((r3 + 4)) = r2;
0x00049a80 ldr r2, [r5] | r2 = *(r5);
0x00049a82 ldr r3, [r6] | r3 = *(r6);
0x00049a84 add r2, r4 | r2 += r4;
0x00049a86 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00049a88 add r3, r4 | r3 += r4;
0x00049a8a adds r4, 0xc | r4 += 0xc;
0x00049a8c str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00049a8e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00049a90 cmp r3, r7 |
0x00049a92 bgt 0x49a62 |
| } while (r3 > r7);
| label_2:
0x00049a94 mov r0, r6 | r0 = r6;
0x00049a96 pop.w {r4, r5, r6, r7, r8, pc} |
| label_0:
0x00049a9a ldr r2, [pc, 0x18] |
0x00049a9c mov r6, r5 | r6 = r5;
0x00049a9e ldr r1, [pc, 0x18] |
0x00049aa0 ldr r0, [pc, 0x18] |
0x00049aa2 add r2, pc | r2 = 0x9355c;
0x00049aa4 add r1, pc | r1 = 0x93562;
0x00049aa6 add r0, pc | r0 = 0x93566;
0x00049aa8 blx 0x29e2c | fcn_00029e2c ();
0x00049aac mov r0, r6 | r0 = r6;
0x00049aae pop.w {r4, r5, r6, r7, r8, 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/libgio-2.0.so.0.6800.4 @ 0x5e4c4 */
| #include <stdint.h>
|
; (fcn) sym.g_memory_output_stream_steal_as_bytes () | void g_memory_output_stream_steal_as_bytes (int16_t arg1) {
| r0 = arg1;
0x0005e4c4 movwlt fp, 0x8538 | __asm ("movwlt fp, case.0x89708.0");
0x0005e4c8 mov r5, r0 | r5 = r0;
0x0005e4ca bl 0x5df58 | g_memory_output_stream_get_type ();
0x0005e4ce ldr r3, [r5] | r3 = *(r5);
0x0005e4d0 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x0005e4d2 cbz r3, 0x5e4da |
0x0005e4d4 ldr r3, [r3] | r3 = *(r3);
0x0005e4d6 cmp r3, r0 |
| if (r3 == r0) {
0x0005e4d8 beq 0x5e4e2 | goto label_0;
| }
| }
0x0005e4da mov r0, r5 | r0 = r5;
0x0005e4dc blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 != 0) {
0x0005e4e0 cbz r0, 0x5e50c |
| label_0:
0x0005e4e2 bl 0x62cec | r0 = g_output_stream_get_type ();
0x0005e4e6 mov r1, r0 | r1 = r0;
0x0005e4e8 mov r0, r5 | r0 = r5;
0x0005e4ea blx 0x2a598 | g_slist_free_1 ();
0x0005e4ee bl 0x638fc | r0 = g_output_stream_is_closed ();
0x0005e4f2 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0005e4f4 cbz r0, 0x5e522 | goto label_1;
| }
0x0005e4f6 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x0005e4f8 ldr r3, [r1] | r3 = *(r1);
0x0005e4fa ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x0005e4fc ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0005e4fe mov r0, r3 | r0 = r3;
0x0005e500 blx 0x29180 | fcn_00029180 ();
0x0005e504 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005e506 movs r2, 0 | r2 = 0;
0x0005e508 str r2, [r3] | *(r3) = r2;
0x0005e50a pop {r3, r4, r5, pc} |
| }
0x0005e50c ldr r1, [pc, 0x28] |
0x0005e50e ldr r2, [pc, 0x2c] |
0x0005e510 ldr r0, [pc, 0x2c] |
0x0005e512 add r1, pc | r1 = 0xbca4e;
0x0005e514 add r2, pc | r2 = 0xbca56;
0x0005e516 adds r1, 0xb0 | r1 += 0xb0;
0x0005e518 add r0, pc | r0 = 0xbca5c;
0x0005e51a blx 0x29e2c | fcn_00029e2c ();
0x0005e51e movs r0, 0 | r0 = 0;
0x0005e520 pop {r3, r4, r5, pc} |
| label_1:
0x0005e522 ldr r1, [pc, 0x20] |
0x0005e524 ldr r2, [pc, 0x20] |
0x0005e526 ldr r0, [pc, 0x24] |
0x0005e528 add r1, pc | r1 = 0xbca72;
0x0005e52a add r2, pc | r2 = 0xbca76;
0x0005e52c adds r1, 0xb0 | r1 += 0xb0;
0x0005e52e add r0, pc | r0 = 0xbca80;
0x0005e530 blx 0x29e2c | fcn_00029e2c ();
0x0005e534 mov r0, r4 | r0 = r4;
0x0005e536 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/libgio-2.0.so.0.6800.4 @ 0xa28e4 */
| #include <stdint.h>
|
; (fcn) sym.g_notification_add_button_with_target_value () | void g_notification_add_button_with_target_value (uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| do {
0x00029540 invalid | void (*0x29544)() ();
0x000a28e4 push.w {r4, r5, r6, r7, r8, lr} |
0x000a28e8 sub sp, 8 |
0x000a28ea cmp r0, 0 |
| if (r0 == 0) {
0x000a28ec beq 0xa2984 | goto label_0;
| }
0x000a28ee mov r5, r0 | r5 = r0;
0x000a28f0 mov r7, r1 | r7 = r1;
0x000a28f2 mov r8, r3 | r8 = r3;
0x000a28f4 mov r6, r2 | r6 = r2;
0x000a28f6 bl 0xa24f0 | g_notification_get_type ();
0x000a28fa ldr r3, [r5] | r3 = *(r5);
0x000a28fc mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000a28fe cbz r3, 0xa2906 |
0x000a2900 ldr r3, [r3] | r3 = *(r3);
0x000a2902 cmp r3, r0 |
| if (r3 == r0) {
0x000a2904 beq 0xa2910 | goto label_1;
| }
| }
0x000a2906 mov r0, r5 | r0 = r5;
0x000a2908 blx 0x2a23c | r0 = fcn_0002a23c ();
0x000a290c cmp r0, 0 |
| if (r0 == 0) {
0x000a290e beq 0xa2984 | goto label_0;
| }
| label_1:
0x000a2910 cmp r7, 0 |
| if (r7 == 0) {
0x000a2912 beq 0xa299e | goto label_2;
| }
| if (r6 == 0) {
0x000a2914 cbz r6, 0xa296a | goto label_3;
| }
0x000a2916 mov r0, r6 | r0 = r6;
0x000a2918 bl 0x9dfb8 | r0 = g_action_name_is_valid ();
| if (r0 == 0) {
0x000a291c cbz r0, 0xa296a | goto label_3;
| }
0x000a291e ldr r1, [pc, 0xb4] |
0x000a2920 mov r0, r6 | r0 = r6;
0x000a2922 add r1, pc | r1 = 0x1452fc;
0x000a2924 blx 0x2a3c4 | r0 = lseek64 ();
0x000a2928 cmp r0, 0 |
| if (r0 == 0) {
0x000a292a beq 0xa29b8 | goto label_4;
| }
0x000a292c movs r0, 0xc | r0 = 0xc;
0x000a292e blx 0x2a0a8 | fcn_0002a0a8 ();
0x000a2932 movs r3, 0 | r3 = 0;
0x000a2934 mov r4, r0 | r4 = r0;
0x000a2936 mov r0, r7 | r0 = r7;
0x000a2938 str r3, [r4] | *(r4) = r3;
0x000a293a str r3, [r4, 4] | *((r4 + 4)) = r3;
0x000a293c str r3, [r4, 8] | *((r4 + 8)) = r3;
0x000a293e blx 0x28dc4 | r0 = fcn_00028dc4 ();
0x000a2942 mov r3, r0 | r3 = r0;
0x000a2944 mov r0, r6 | r0 = r6;
0x000a2946 str r3, [r4] | *(r4) = r3;
0x000a2948 blx 0x28dc4 | fcn_00028dc4 ();
0x000a294c str r0, [r4, 4] | *((r4 + 4)) = r0;
0x000a294e cmp.w r8, 0 |
| if (r8 != 0) {
0x000a2952 beq 0xa295c |
0x000a2954 mov r0, r8 | r0 = r8;
0x000a2956 blx 0x28a88 | fcn_00028a88 ();
0x000a295a str r0, [r4, 8] | *((r4 + 8)) = r0;
| }
0x000a295c ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x000a295e mov r1, r4 | r1 = r4;
0x000a2960 add sp, 8 |
0x000a2962 pop.w {r4, r5, r6, r7, r8, lr} |
0x000a2964 rors r0, r6 | __asm ("rors r0, r6");
0x000a2966 b.w 0x29540 |
| } while (1);
| label_3:
0x000a296a ldr r1, [pc, 0x6c] |
0x000a296c ldr r2, [pc, 0x6c] |
0x000a296e ldr r0, [pc, 0x70] |
0x000a2970 add r1, pc | r1 = 0x14534e;
0x000a2972 add r2, pc | r2 = 0x145352;
0x000a2974 add.w r1, r1, 0x100 | r1 += case.0x89708.0;
0x000a2976 strb r0, [r0, 6] | *((r0 + 6)) = r0;
0x000a2978 add r0, pc | r0 = 0x14535e;
0x000a297a add sp, 8 |
0x000a297c pop.w {r4, r5, r6, r7, r8, lr} |
0x000a2980 b.w 0x29e28 | void (*0x29e28)() ();
0x000a2982 rev16 r2, r2 | __asm ("rev16 r2, r2");
| label_0:
0x000a2984 ldr r1, [pc, 0x5c] |
0x000a2986 ldr r2, [pc, 0x60] |
0x000a2988 ldr r0, [pc, 0x60] |
0x000a298a add r1, pc | r1 = 0x145372;
0x000a298c add r2, pc | r2 = 0x14537a;
0x000a298e add.w r1, r1, 0x100 | r1 += case.0x89708.0;
0x000a2992 add r0, pc | r0 = 0x145382;
0x000a2994 add sp, 8 |
0x000a2996 pop.w {r4, r5, r6, r7, r8, lr} |
0x000a299a b.w 0x29e28 | void (*0x29e28)() ();
| label_2:
0x000a299e ldr r1, [pc, 0x50] |
0x000a29a0 ldr r2, [pc, 0x50] |
0x000a29a2 ldr r0, [pc, 0x54] |
0x000a29a4 add r1, pc | r1 = 0x14539a;
0x000a29a6 add r2, pc | r2 = 0x14539e;
0x000a29a8 add.w r1, r1, 0x100 | r1 += case.0x89708.0;
0x000a29ac add r0, pc | r0 = 0x1453aa;
0x000a29ae add sp, 8 |
0x000a29b0 pop.w {r4, r5, r6, r7, r8, lr} |
0x000a29b4 b.w 0x29e28 | void (*0x29e28)() ();
| label_4:
0x000a29b8 ldr r3, [pc, 0x40] |
0x000a29ba movs r1, 0x10 | r1 = 0x10;
0x000a29bc ldr r2, [pc, 0x40] |
0x000a29be ldr r0, [pc, 0x44] |
0x000a29c0 add r3, pc | r3 = 0x1453c0;
0x000a29c2 str r6, [sp] | *(sp) = r6;
0x000a29c4 add.w r3, r3, 0x100 | r3 += case.0x89708.0;
0x000a29c8 add r2, pc | r2 = 0x1453cc;
0x000a29ca add r0, pc | r0 = 0x1453d4;
0x000a29cc blx 0x2b14c | fcn_0002b14c ();
0x000a29ce subs.w r7, lr, ip, asr 26 | r7 = lr - (ip >> 26);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x66b84 */
| #include <stdint.h>
|
; (fcn) sym.g_proxy_connect_async () | void g_proxy_connect_async (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00066b84 svcmi 0xf0e92d | __asm ("svcmi case.0x89708.0");
0x00066b88 sub sp, 4 |
0x00066b8a ldrd sb, sl, [sp, 0x28] | __asm ("ldrd sb, sl, [arg_28h]");
| if (r0 != 0) {
0x00066b8e cbz r0, 0x66bda |
0x00066b90 mov r4, r0 | r4 = r0;
0x00066b92 mov r6, r1 | r6 = r1;
0x00066b94 mov r7, r2 | r7 = r2;
0x00066b96 mov r8, r3 | r8 = r3;
0x00066b98 bl 0x66a7c | g_proxy_get_type ();
0x00066b9c ldr.w fp, [r4] | fp = *(r4);
0x00066ba0 mov r5, r0 | r5 = r0;
0x00066ba2 cmp.w fp, 0 |
| if (fp != 0) {
0x00066ba6 beq 0x66bb0 |
0x00066ba8 ldr.w r3, [fp] | r3 = *(fp);
0x00066bac cmp r3, r0 |
| if (r3 == r0) {
0x00066bae beq 0x66bba | goto label_0;
| }
| }
0x00066bb0 mov r1, r5 | r1 = r5;
0x00066bb2 mov r0, r4 | r0 = r4;
0x00066bb4 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x00066bb8 cbz r0, 0x66bda | goto label_1;
| }
| label_0:
0x00066bba mov r1, r5 | r1 = r5;
0x00066bbc mov r0, fp | r0 = fp;
0x00066bbe blx 0x286d8 | g_variant_type_is_variant ();
0x00066bc2 strd sb, sl, [sp, 0x28] | __asm ("strd sb, sl, [sp, 0x28]");
0x00066bc6 mov r3, r8 | r3 = r8;
0x00066bc8 ldr r5, [r0, 0xc] | r5 = *((r0 + 0xc));
0x00066bca mov r2, r7 | r2 = r7;
0x00066bcc mov r1, r6 | r1 = r6;
0x00066bce mov r0, r4 | r0 = r4;
0x00066bd0 mov ip, r5 |
0x00066bd2 add sp, 4 |
0x00066bd4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00066bd8 bx ip | return void (*ip)() ();
| }
| label_1:
0x00066bda ldr r1, [pc, 0x18] |
0x00066bdc ldr r2, [pc, 0x18] |
0x00066bde ldr r0, [pc, 0x1c] |
0x00066be0 add r1, pc | r1 = 0xcd7da;
0x00066be2 add r2, pc | r2 = 0xcd7de;
0x00066be4 adds r1, 0x10 | r1 += 0x10;
0x00066be6 add r0, pc | r0 = 0xcd7e8;
0x00066be8 add sp, 4 |
0x00066bea pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00066bee b.w 0x29e28 | return void (*0x29e28)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x68878 */
| #include <stdint.h>
|
; (fcn) sym.g_resolver_lookup_by_address () | void g_resolver_lookup_by_address (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00068878 push.w {r4, r5, r6, r7, r8, lr} |
| if (r0 != 0) {
0x0006887c cbz r0, 0x688d6 |
0x0006887e mov r4, r0 | r4 = r0;
0x00068880 mov r5, r1 | r5 = r1;
0x00068882 mov r7, r3 | r7 = r3;
0x00068884 mov r6, r2 | r6 = r2;
0x00068886 bl 0x6848c | g_resolver_get_type ();
0x0006888a ldr r3, [r4] | r3 = *(r4);
0x0006888c mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x0006888e cbz r3, 0x68896 |
0x00068890 ldr r3, [r3] | r3 = *(r3);
0x00068892 cmp r3, r0 |
| if (r3 == r0) {
0x00068894 beq 0x6889e | goto label_0;
| }
| }
0x00068896 mov r0, r4 | r0 = r4;
0x00068898 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x0006889c cbz r0, 0x688d6 | goto label_1;
| }
| if (r5 == 0) {
| label_0:
0x0006889e cbz r5, 0x688ee | goto label_2;
| }
0x000688a0 bl 0x54548 | g_inet_address_get_type ();
0x000688a4 ldr r3, [r5] | r3 = *(r5);
0x000688a6 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000688a8 cbz r3, 0x688b0 |
0x000688aa ldr r3, [r3] | r3 = *(r3);
0x000688ac cmp r3, r0 |
| if (r3 == r0) {
0x000688ae beq 0x688b8 | goto label_3;
| }
| }
0x000688b0 mov r0, r5 | r0 = r5;
0x000688b2 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x000688b6 cbz r0, 0x688ee | goto label_2;
| }
| label_3:
0x000688b8 mov r0, r4 | r0 = r4;
0x000688ba bl 0x68380 | fcn_00068380 (r0);
0x000688be ldr.w ip, [r4] | ip = *(r4);
0x000688c2 mov r0, r4 | r0 = r4;
0x000688c4 mov r3, r7 | r3 = r7;
0x000688c6 mov r2, r6 | r2 = r6;
0x000688c8 mov r1, r5 | r1 = r5;
0x000688ca ldr.w r4, [ip, 0x54] | r4 = *((ip + 0x54));
0x000688ce mov ip, r4 |
0x000688d0 pop.w {r4, r5, r6, r7, r8, lr} |
0x000688d4 bx ip | return void (*ip)() ();
| }
| label_1:
0x000688d6 ldr r1, [pc, 0x30] |
0x000688d8 ldr r2, [pc, 0x30] |
0x000688da ldr r0, [pc, 0x34] |
0x000688dc add r1, pc | r1 = 0xd11ea;
0x000688de add r2, pc | r2 = 0xd11ee;
0x000688e0 adds r1, 0x50 | r1 += 0x50;
0x000688e2 add r0, pc | r0 = 0xd11f8;
0x000688e4 blx 0x29e2c | fcn_00029e2c ();
0x000688e8 movs r0, 0 | r0 = 0;
0x000688ea pop.w {r4, r5, r6, r7, r8, pc} |
| label_2:
0x000688ee ldr r1, [pc, 0x24] |
0x000688f0 ldr r2, [pc, 0x24] |
0x000688f2 ldr r0, [pc, 0x28] |
0x000688f4 add r1, pc | r1 = 0xd120e;
0x000688f6 add r2, pc | r2 = 0xd1212;
0x000688f8 adds r1, 0x50 | r1 += 0x50;
0x000688fa add r0, pc | r0 = 0xd121c;
0x000688fc blx 0x29e2c | fcn_00029e2c ();
0x00068900 movs r0, 0 | r0 = 0;
0x00068902 pop.w {r4, r5, r6, r7, r8, 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/libgio-2.0.so.0.6800.4 @ 0x68920 */
| #include <stdint.h>
|
; (fcn) sym.g_resolver_lookup_by_address_async () | void g_resolver_lookup_by_address_async (int16_t arg_18h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00068920 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00068924 ldr.w r8, [sp, 0x18] | r8 = *(arg_18h);
| if (r0 != 0) {
0x00068928 cbz r0, 0x68982 |
0x0006892a mov r4, r0 | r4 = r0;
0x0006892c mov r5, r1 | r5 = r1;
0x0006892e mov r7, r3 | r7 = r3;
0x00068930 mov r6, r2 | r6 = r2;
0x00068932 bl 0x6848c | g_resolver_get_type ();
0x00068936 ldr r3, [r4] | r3 = *(r4);
0x00068938 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x0006893a cbz r3, 0x68942 |
0x0006893c ldr r3, [r3] | r3 = *(r3);
0x0006893e cmp r3, r0 |
| if (r3 == r0) {
0x00068940 beq 0x6894a | goto label_0;
| }
| }
0x00068942 mov r0, r4 | r0 = r4;
0x00068944 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x00068948 cbz r0, 0x68982 | goto label_1;
| }
| if (r5 == 0) {
| label_0:
0x0006894a cbz r5, 0x68998 | goto label_2;
| }
0x0006894c bl 0x54548 | g_inet_address_get_type ();
0x00068950 ldr r3, [r5] | r3 = *(r5);
0x00068952 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x00068954 cbz r3, 0x6895c |
0x00068956 ldr r3, [r3] | r3 = *(r3);
0x00068958 cmp r3, r0 |
| if (r3 == r0) {
0x0006895a beq 0x68964 | goto label_3;
| }
| }
0x0006895c mov r0, r5 | r0 = r5;
0x0006895e blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x00068962 cbz r0, 0x68998 | goto label_2;
| }
| label_3:
0x00068964 mov r0, r4 | r0 = r4;
0x00068966 bl 0x68380 | fcn_00068380 (r0);
0x0006896a str.w r8, [sp, 0x18] | __asm ("str.w r8, [arg_18h]");
0x0006896e mov r1, r5 | r1 = r5;
0x00068970 ldr r5, [r4] | r5 = *(r4);
0x00068972 mov r0, r4 | r0 = r4;
0x00068974 mov r3, r7 | r3 = r7;
0x00068976 mov r2, r6 | r2 = r6;
0x00068978 ldr r4, [r5, 0x58] | r4 = *((r5 + 0x58));
0x0006897a mov ip, r4 |
0x0006897c pop.w {r4, r5, r6, r7, r8, lr} |
0x00068980 bx ip | return void (*ip)() ();
| }
| label_1:
0x00068982 ldr r1, [pc, 0x2c] |
0x00068984 ldr r2, [pc, 0x2c] |
0x00068986 ldr r0, [pc, 0x30] |
0x00068988 add r1, pc | r1 = 0xd133e;
0x0006898a pop.w {r4, r5, r6, r7, r8, lr} |
0x0006898e add r2, pc | r2 = 0xd1346;
0x00068990 adds r1, 0x70 | r1 += 0x70;
0x00068992 add r0, pc | r0 = 0xd1350;
0x00068994 b.w 0x29e28 | void (*0x29e28)() ();
| label_2:
0x00068998 ldr r1, [pc, 0x20] |
0x0006899a ldr r2, [pc, 0x24] |
0x0006899c ldr r0, [pc, 0x24] |
0x0006899e add r1, pc | r1 = 0xd135e;
0x000689a0 pop.w {r4, r5, r6, r7, r8, lr} |
0x000689a4 add r2, pc | r2 = 0xd136a;
0x000689a6 adds r1, 0x70 | r1 += 0x70;
0x000689a8 add r0, pc | r0 = 0xd1370;
0x000689aa b.w 0x29e28 | return void (*0x29e28)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x689c8 */
| #include <stdint.h>
|
; (fcn) sym.g_resolver_lookup_by_address_finish () | void g_resolver_lookup_by_address_finish (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000689c8 push {r4, r5, r6, lr} |
| if (r0 != 0) {
0x000689ca cbz r0, 0x68a04 |
0x000689cc mov r4, r0 | r4 = r0;
0x000689ce mov r5, r1 | r5 = r1;
0x000689d0 mov r6, r2 | r6 = r2;
0x000689d2 bl 0x6848c | g_resolver_get_type ();
0x000689d6 ldr r3, [r4] | r3 = *(r4);
0x000689d8 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000689da cbz r3, 0x689e2 |
0x000689dc ldr r3, [r3] | r3 = *(r3);
0x000689de cmp r3, r0 |
| if (r3 == r0) {
0x000689e0 beq 0x689ea | goto label_0;
| }
| }
0x000689e2 mov r0, r4 | r0 = r4;
0x000689e4 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x000689e8 cbz r0, 0x68a04 | goto label_1;
| }
| label_0:
0x000689ea mov r1, r6 | r1 = r6;
0x000689ec mov r0, r5 | r0 = r5;
0x000689ee bl 0x36ee4 | r0 = g_async_result_legacy_propagate_error ();
| if (r0 != 0) {
0x000689f2 cbnz r0, 0x68a16 | goto label_2;
| }
0x000689f4 ldr r3, [r4] | r3 = *(r4);
0x000689f6 mov r2, r6 | r2 = r6;
0x000689f8 mov r1, r5 | r1 = r5;
0x000689fa mov r0, r4 | r0 = r4;
0x000689fc pop.w {r4, r5, r6, lr} |
0x00068a00 ldr r3, [r3, 0x5c] | r3 = *((r3 + 0x5c));
0x00068a02 bx r3 | return uint32_t (*r3)() ();
| }
| label_1:
0x00068a04 ldr r1, [pc, 0x14] |
0x00068a06 ldr r2, [pc, 0x18] |
0x00068a08 ldr r0, [pc, 0x18] |
0x00068a0a add r1, pc | r1 = 0xd142a;
0x00068a0c add r2, pc | r2 = 0xd1432;
0x00068a0e adds r1, 0x94 | r1 += 0x94;
0x00068a10 add r0, pc | r0 = 0xd1438;
0x00068a12 blx 0x29e2c | fcn_00029e2c ();
| label_2:
0x00068a16 movs r0, 0 | r0 = 0;
0x00068a18 pop {r4, r5, r6, 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/libgio-2.0.so.0.6800.4 @ 0xa5d20 */
| #include <stdint.h>
|
; (fcn) sym.g_settings_backend_keys_changed () | void g_settings_backend_keys_changed (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a5d20 invalid |
0x000a5d24 sub sp, 0xc |
0x000a5d26 mov r5, r1 | r5 = r1;
0x000a5d28 mov r6, r2 | r6 = r2;
0x000a5d2a mov r7, r3 | r7 = r3;
0x000a5d2c bl 0xa5bb8 | g_settings_backend_get_type ();
0x000a5d2e invalid |
0x000a5d32 ldr r3, [r4] | r3 = *(r4);
0x000a5d34 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x000a5d36 cbz r3, 0xa5d3e |
0x000a5d38 ldr r3, [r3] | r3 = *(r3);
0x000a5d3a cmp r3, r0 |
| if (r3 == r0) {
0x000a5d3c beq 0xa5d5e | goto label_0;
| }
| }
0x000a5d3e mov r0, r4 | r0 = r4;
0x000a5d40 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x000a5d44 cbnz r0, 0xa5d5e |
0x000a5d46 ldr r1, [pc, 0x64] |
0x000a5d48 ldr r2, [pc, 0x64] |
0x000a5d4a ldr r0, [pc, 0x68] |
0x000a5d4c add r1, pc | r1 = 0x14bafe;
0x000a5d4e add r2, pc | r2 = 0x14bb02;
0x000a5d50 adds r1, 0x74 | r1 += 0x74;
0x000a5d52 add r0, pc | r0 = 0x14bb0c;
0x000a5d54 add sp, 0xc |
0x000a5d56 pop.w {r4, r5, r6, r7, lr} |
0x000a5d5a b.w 0x29e28 | void (*0x29e28)() ();
| }
| label_0:
0x000a5d5e mov r0, r5 | r0 = r5;
0x000a5d60 bl 0xa5af8 | r0 = fcn_000a5af8 (r0);
| if (r0 != 0) {
0x000a5d64 cbz r0, 0xa5d7a |
| if (r6 == 0) {
0x000a5d66 cbz r6, 0xa5d92 | goto label_1;
| }
0x000a5d68 mov r3, r7 | r3 = r7;
0x000a5d6a mov r2, r5 | r2 = r5;
0x000a5d6c movs r1, 8 | r1 = 8;
0x000a5d6e mov r0, r4 | r0 = r4;
0x000a5d70 str r6, [sp] | *(sp) = r6;
0x000a5d72 bl 0xa57c8 | fcn_000a57c8 (r0, r1, r2, r3, r4);
0x000a5d76 add sp, 0xc |
0x000a5d78 pop {r4, r5, r6, r7, pc} |
| }
0x000a5d7a ldr r1, [pc, 0x3c] |
0x000a5d7c ldr r2, [pc, 0x3c] |
0x000a5d7e ldr r0, [pc, 0x40] |
0x000a5d80 add r1, pc | r1 = 0x14bb3e;
0x000a5d82 add r2, pc | r2 = 0x14bb42;
0x000a5d84 adds r1, 0x74 | r1 += 0x74;
0x000a5d86 add r0, pc | r0 = 0x14bb4c;
0x000a5d88 add sp, 0xc |
0x000a5d8a pop.w {r4, r5, r6, r7, lr} |
0x000a5d8e b.w 0x29e28 | void (*0x29e28)() ();
| label_1:
0x000a5d92 ldr r1, [pc, 0x30] |
0x000a5d94 ldr r2, [pc, 0x30] |
0x000a5d96 ldr r0, [pc, 0x34] |
0x000a5d98 add r1, pc | r1 = 0x14bb62;
0x000a5d9a add r2, pc | r2 = 0x14bb66;
0x000a5d9c adds r1, 0x74 | r1 += 0x74;
0x000a5d9e add r0, pc | r0 = 0x14bb70;
0x000a5da0 add sp, 0xc |
0x000a5da2 pop.w {r4, r5, r6, r7, lr} |
0x000a5da6 b.w 0x29e28 | return void (*0x29e28)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x79754 */
| #include <stdint.h>
|
; (fcn) sym.g_subprocess_communicate_utf8_finish () | void g_subprocess_communicate_utf8_finish (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_0h_2;
| int32_t var_0h_3;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00079754 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00079758 mov r7, r3 | r7 = r3;
0x0007975a sub sp, 8 |
0x0007975c movs r3, 0 | r3 = 0;
0x0007975e ldr.w sb, [sp, 0x28] | sb = *(arg_28h);
0x00079762 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
| if (r0 != 0) {
0x00079766 cbz r0, 0x79786 |
0x00079768 mov r5, r0 | r5 = r0;
0x0007976a mov r4, r1 | r4 = r1;
0x0007976c mov r8, r2 | r8 = r2;
0x0007976e bl 0x784ec | g_subprocess_get_type ();
0x00079772 ldr r3, [r5] | r3 = *(r5);
0x00079774 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x00079776 cbz r3, 0x7977e |
0x00079778 ldr r3, [r3] | r3 = *(r3);
0x0007977a cmp r3, r0 |
| if (r3 == r0) {
0x0007977c beq 0x797a4 | goto label_0;
| }
| }
0x0007977e mov r0, r5 | r0 = r5;
0x00079780 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 != 0) {
0x00079784 cbnz r0, 0x797a4 | goto label_0;
| }
| }
0x00079786 ldr r1, [pc, 0x10c] |
0x00079788 movs r5, 0 | r5 = 0;
0x0007978a ldr r2, [pc, 0x10c] |
0x0007978c ldr r0, [pc, 0x10c] |
0x0007978e add r1, pc | r1 = 0xf3028;
0x00079790 add r2, pc | r2 = 0xf302e;
0x00079792 add.w r1, r1, 0x2e8 | r1 += case.0x89708.0;
0x00079796 add r0, pc | r0 = 0xf3036;
0x00079798 blx 0x29e2c | fcn_00029e2c ();
0x0007979c mov r0, r5 | r0 = r5;
0x0007979e add sp, 8 |
0x000797a0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x000797a4 mov r1, r5 | r1 = r5;
0x000797a6 mov r0, r4 | r0 = r4;
0x000797a8 bl 0x7b170 | r0 = g_task_is_valid ();
0x000797ac mov r5, r0 | r5 = r0;
0x000797ae cmp r0, 0 |
| if (r0 != 0) {
0x000797b0 beq 0x79854 |
0x000797b2 cmp.w sb, 0 |
| if (sb != 0) {
0x000797b6 beq 0x797dc |
0x000797b8 ldr.w r3, [sb] | r3 = *(sb);
| if (r3 == 0) {
0x000797bc cbz r3, 0x797dc | goto label_1;
| }
0x000797be ldr r1, [pc, 0xe0] |
0x000797c0 movs r5, 0 | r5 = 0;
0x000797c2 ldr r2, [pc, 0xe0] |
0x000797c4 ldr r0, [pc, 0xe0] |
0x000797c6 add r1, pc | r1 = 0xf306c;
0x000797c8 add r2, pc | r2 = 0xf3072;
0x000797ca add.w r1, r1, 0x2e8 | r1 += case.0x89708.0;
0x000797ce add r0, pc | r0 = 0xf307a;
0x000797d0 blx 0x29e2c | fcn_00029e2c ();
0x000797d4 mov r0, r5 | r0 = r5;
0x000797d6 add sp, 8 |
0x000797d8 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
| label_1:
0x000797dc mov r0, r4 | r0 = r4;
0x000797de blx 0x2970c | fcn_0002970c ();
0x000797e2 mov r0, r4 | r0 = r4;
0x000797e4 bl 0x7a158 | g_task_get_task_data ();
0x000797e8 mov r1, sb | r1 = sb;
0x000797ea mov r5, r0 | r5 = r0;
0x000797ec mov r0, r4 | r0 = r4;
0x000797ee bl 0x7abc8 | g_task_propagate_boolean ();
0x000797f0 vld3.16 {d20[0], d21[0], d22[0]}, [fp], r6 | __asm ("vld3.16 {d20[0], d21[0], d22[0]}, [fp], r6");
0x000797f4 cmp r0, 0 |
| if (r0 == 0) {
0x000797f6 beq 0x79870 | goto label_2;
| }
0x000797f8 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| if (r2 != 0) {
0x000797fa cbz r2, 0x7980e |
0x000797fc ldr r0, [pc, 0xac] |
0x000797fe mov r3, sb | r3 = sb;
0x00079800 mov r1, sp | r1 = sp;
0x00079802 add r0, pc | r0 = 0xf30b2;
0x00079804 bl 0x78494 | r0 = fcn_00078494 (r0, r1, r2, r3);
0x00079808 mov sl, r0 | sl = r0;
0x0007980a cmp r0, 0 |
| if (r0 == 0) {
0x0007980c beq 0x7988e | goto label_3;
| }
| }
0x0007980e ldr.w sl, [r5, 0x18] | sl = *((r5 + 0x18));
0x00079812 cmp.w sl, 0 |
| if (sl != 0) {
0x00079816 beq 0x7982c |
0x00079818 ldr r0, [pc, 0x94] |
0x0007981a mov r2, sl | r2 = sl;
0x0007981c mov r3, sb | r3 = sb;
0x0007981e add r1, sp, 4 | r1 += var_4h;
0x00079820 add r0, pc | r0 = 0xf30d4;
0x00079822 bl 0x78494 | fcn_00078494 (r0, r1, r2, r3);
0x00079826 ldr.w sl, [sp, 4] | sl = var_4h;
| if (r0 == 0) {
0x0007982a cbz r0, 0x7988e | goto label_3;
| }
| }
0x0007982c mov r0, r4 | r0 = r4;
0x0007982e blx 0x28d00 | fcn_00028d00 ();
0x00079830 orn r1, r8, r8, ror 30 | r1 = r8 | r8;
| r1 = ~r1;
0x00079834 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x00079836 beq 0x79842 |
0x00079838 ldr r3, [sp] | r3 = *(sp);
0x0007983a movs r2, 0 | r2 = 0;
0x0007983c str r2, [sp] | *(sp) = r2;
0x0007983e str.w r3, [r8] | __asm ("str.w r3, [r8]");
| }
0x00079842 ldr r6, [sp] | r6 = *(sp);
0x00079844 movs r5, 1 | r5 = 1;
| if (r7 == 0) {
0x00079846 cbz r7, 0x7987a | goto label_4;
| }
0x00079848 str.w sl, [r7] | __asm ("str.w sl, [r7]");
0x0007984c movs r5, 1 | r5 = 1;
0x0007984e mov.w sl, 0 | sl = 0;
0x00079852 b 0x7987a | goto label_4;
| }
0x00079854 ldr r1, [pc, 0x5c] |
0x00079856 ldr r2, [pc, 0x60] |
0x00079858 ldr r0, [pc, 0x60] |
0x0007985a add r1, pc | r1 = 0xf3112;
0x0007985c add r2, pc | r2 = 0xf311a;
0x0007985e add.w r1, r1, 0x2e8 | r1 += case.0x89708.0;
0x00079862 add r0, pc | r0 = 0xf3122;
0x00079864 blx 0x29e2c | fcn_00029e2c ();
0x00079868 mov r0, r5 | r0 = r5;
0x0007986a add sp, 8 |
0x0007986c pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x00079870 mov sl, r0 | sl = r0;
| do {
0x00079872 mov r0, r4 | r0 = r4;
0x00079874 movs r5, 0 | r5 = 0;
0x00079876 blx 0x28d00 | fcn_00028d00 ();
| label_4:
0x0007987a mov r0, sl | r0 = sl;
0x0007987c blx 0x286c0 | g_atomic_ref_count_inc ();
0x00079880 mov r0, r6 | r0 = r6;
0x00079882 blx 0x286c0 | g_atomic_ref_count_inc ();
0x00079886 mov r0, r5 | r0 = r5;
0x00079888 add sp, 8 |
0x0007988a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x0007988e ldr r6, [sp] | r6 = *(sp);
0x00079890 b 0x79872 |
| } 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/libgio-2.0.so.0.6800.4 @ 0x7bab8 */
| #include <stdint.h>
|
; (fcn) sym.g_tcp_wrapper_connection_get_base_io_stream () | void g_tcp_wrapper_connection_get_base_io_stream (int16_t arg1) {
| r0 = arg1;
0x0007bab8 push {r4, lr} |
| if (r0 != 0) {
0x0007baba cbz r0, 0x7badc |
0x0007babc mov r4, r0 | r4 = r0;
0x0007babe bl 0x7b818 | g_tcp_wrapper_connection_get_type ();
0x0007bac2 ldr r3, [r4] | r3 = *(r4);
0x0007bac4 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x0007bac6 cbz r3, 0x7bace |
0x0007bac8 ldr r3, [r3] | r3 = *(r3);
0x0007baca cmp r3, r0 |
| if (r3 == r0) {
0x0007bacc beq 0x7bad6 | goto label_0;
| }
| }
0x0007bace mov r0, r4 | r0 = r4;
0x0007bad0 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x0007bad4 cbz r0, 0x7badc | goto label_1;
| }
| label_0:
0x0007bad6 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0007bad8 ldr r0, [r3] | r0 = *(r3);
0x0007bada pop {r4, pc} |
| }
| label_1:
0x0007badc ldr r1, [pc, 0x14] |
0x0007bade ldr r2, [pc, 0x18] |
0x0007bae0 ldr r0, [pc, 0x18] |
0x0007bae2 add r1, pc | r1 = 0xf75da;
0x0007bae4 add r2, pc | r2 = 0xf75e2;
0x0007bae6 adds r1, 0x20 | r1 += 0x20;
0x0007bae8 add r0, pc | r0 = 0xf75e8;
0x0007baea blx 0x29e2c | fcn_00029e2c ();
0x0007baee movs r0, 0 | r0 = 0;
0x0007baf0 pop {r4, 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/libgio-2.0.so.0.6800.4 @ 0x90dec */
| #include <stdint.h>
|
; (fcn) sym.g_unix_fd_message_get_fd_list () | void g_unix_fd_message_get_fd_list (int16_t arg1) {
| r0 = arg1;
0x00090dec ldmdavs r8, {r0, r1, r8, fp, sp, lr} | __asm ("ldmdavs r8, {r0, r1, r8, fp, sp, lr}");
0x00090df0 bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgio-2.0.so.0.6800.4 @ 0x95378 */
| #include <stdint.h>
|
; (fcn) sym.g_unix_output_stream_get_fd () | void g_unix_output_stream_get_fd (int16_t arg1) {
| r0 = arg1;
0x00095378 push {r4, lr} |
| if (r0 != 0) {
0x0009537a cbz r0, 0x9539c |
0x0009537c mov r4, r0 | r4 = r0;
0x0009537e bl 0x94d90 | g_unix_output_stream_get_type ();
0x00095382 ldr r3, [r4] | r3 = *(r4);
0x00095384 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x00095386 cbz r3, 0x9538e |
0x00095388 ldr r3, [r3] | r3 = *(r3);
0x0009538a cmp r3, r0 |
| if (r3 == r0) {
0x0009538c beq 0x95396 | goto label_0;
| }
| }
0x0009538e mov r0, r4 | r0 = r4;
0x00095390 blx 0x2a23c | r0 = fcn_0002a23c ();
| if (r0 == 0) {
0x00095394 cbz r0, 0x9539c | goto label_1;
| }
| label_0:
0x00095396 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00095398 ldr r0, [r3] | r0 = *(r3);
0x0009539a pop {r4, pc} |
| }
| label_1:
0x0009539c ldr r2, [pc, 0x14] |
0x0009539e ldr r1, [pc, 0x18] |
0x000953a0 ldr r0, [pc, 0x18] |
0x000953a2 add r2, pc | r2 = 0x12a75a;
0x000953a4 add r1, pc | r1 = 0x12a762;
0x000953a6 add r0, pc | r0 = 0x12a766;
0x000953a8 blx 0x29e2c | fcn_00029e2c ();
0x000953ac mov.w r0, -1 | r0 = -1;
0x000953b0 pop {r4, pc} |
| }
[*] Function strcat used 1 times libgio-2.0.so.0.6800.4