[*] Binary protection state of gdbus
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function printf tear down of gdbus
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/bin/gdbus @ 0x14ee8 */
| #include <stdint.h>
|
; (fcn) fcn.00014ee8 () | void fcn_00014ee8 (int32_t arg_10h, int32_t arg_38h, int32_t arg_3ch, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x00014ee8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00014eec ldr r8, [r2, 4] | r8 = *((r2 + 4));
0x00014ef0 sub sp, sp, 0x14 |
0x00014ef4 ldr r6, [sp, 0x38] | r6 = *(arg_38h);
0x00014ef8 ldr r7, [sp, 0x3c] | r7 = *(arg_3ch);
0x00014efc cmp r8, 0 |
0x00014f00 mov sb, r1 | sb = r1;
0x00014f04 mov r4, r2 | r4 = r2;
0x00014f08 mov r5, r3 | r5 = r3;
| if (r8 != 0) {
0x00014f0c moveq r8, r6 | r8 = r6;
| }
0x00014f10 mov sl, 0 | sl = 0;
0x00014f14 str r0, [sp, 0xc] | var_ch = r0;
| do {
0x00014f18 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00014f1c cmp r3, 0 |
| if (r3 != 0) {
0x00014f20 beq 0x14f34 |
0x00014f24 ldr r0, [r3, sl] | r0 = *((r3 + sl));
0x00014f28 add sl, sl, 4 | sl += 4;
0x00014f2c cmp r0, 0 |
| if (r0 != 0) {
0x00014f30 bne 0x14fa4 | goto label_3;
| }
| }
0x00014f34 cmp r8, 0 |
0x00014f38 ldr r3, [pc, 0x1c0] | r3 = *(0x150fc);
0x00014f3c ldr r2, [pc, 0x1c0] | r2 = "(not set)";
| if (r8 == 0) {
0x00014f40 movne r3, r8 | r3 = r8;
| }
0x00014f44 mov r1, r5 | r1 = r5;
0x00014f48 ldr r0, [pc, 0x1b8] | r0 = *(0x15104);
0x00014f4c bl 0x11e4c | g_print ();
0x00014f50 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00014f54 cmp r3, 0 |
| if (r3 == 0) {
0x00014f58 bne 0x14f68 |
0x00014f5c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00014f60 cmp r3, 0 |
| if (r3 == 0) {
0x00014f64 beq 0x150f0 | goto label_4;
| }
| }
0x00014f68 ldr r0, [pc, 0x19c] | r0 = "%*snode %s";
0x00014f6c bl 0x11e4c | g_print ();
0x00014f70 ldr fp, [pc, 0x198] | fp = *(0x00015110);
0x00014f74 mov r8, 0 | r8 = 0;
0x00014f78 add sl, r5, 2 | sl = r5 + 2;
| label_0:
0x00014f7c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00014f80 cmp r2, 0 |
| if (r2 != 0) {
0x00014f84 beq 0x14f94 |
0x00014f88 ldr r2, [r2, r8] | r2 = *((r2 + r8));
0x00014f8c cmp r2, 0 |
| if (r2 != 0) {
0x00014f90 bne 0x14fb4 | goto label_5;
| }
| }
0x00014f94 mov r8, r2 | r8 = r2;
0x00014f98 ldr fp, [pc, 0x174] | fp = "_s__s";
0x00014f9c ldr sl, [pc, 0x174] | sl = "__s";
0x00014fa0 b 0x15060 | goto label_6;
| label_3:
0x00014fa4 mov r2, 0 | r2 = 0;
0x00014fa8 mov r1, r5 | r1 = r5;
0x00014fac bl 0x140e8 | fcn_000140e8 (r0, r1);
0x00014fb0 b 0x14f18 |
| } while (1);
| label_5:
0x00014fb4 ldr r3, [fp, 0x10] | r3 = *(arg_10h);
0x00014fb8 cmp r3, 0 |
| if (r3 != 0) {
0x00014fbc beq 0x14fd8 |
0x00014fc0 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00014fc4 cmp r3, 0 |
| if (r3 == 0) {
0x00014fc8 beq 0x14fec | goto label_7;
| }
0x00014fcc ldr r3, [r3] | r3 = *(r3);
0x00014fd0 cmp r3, 0 |
| if (r3 == 0) {
0x00014fd4 beq 0x14fec | goto label_7;
| }
| }
0x00014fd8 str r6, [sp] | *(sp) = r6;
0x00014fdc mov r3, sl | r3 = sl;
0x00014fe0 mov r1, sb | r1 = sb;
0x00014fe4 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00014fe8 bl 0x1485c | fcn_0001485c (r0, r1, r2, r3, r4);
| label_7:
0x00014fec add r8, r8, 4 | r8 += 4;
0x00014ff0 b 0x14f7c | goto label_0;
| do {
0x00014ff4 cmp r7, 0 |
| if (r7 == 0) {
0x00014ff8 beq 0x150d4 | goto label_8;
| }
0x00014ffc ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00015000 bl 0x11ed0 | r0 = g_variant_is_object_path ();
0x00015004 cmp r0, 0 |
| if (r0 == 0) {
0x00015008 beq 0x15090 | goto label_9;
| }
0x0001500c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00015010 ldr r3, [r3, r8] | r3 = *((r3 + r8));
0x00015014 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00015018 bl 0x1211c | g_strdup ();
0x0001501c mov r1, r6 | r1 = r6;
0x00015020 mov sb, r0 | sb = r0;
0x00015024 bl 0x120d4 | r0 = g_str_has_prefix ();
0x00015028 cmp r0, 0 |
| if (r0 != 0) {
0x0001502c beq 0x15044 |
| label_1:
0x00015030 add r2, r5, 2 | r2 = r5 + 2;
0x00015034 mov r1, sb | r1 = sb;
0x00015038 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0001503c bl 0x1512c | fcn_0001512c (r0, r1);
0x00015040 b 0x15054 |
| } else {
0x00015044 mov r2, r6 | r2 = r6;
0x00015048 mov r1, sb | r1 = sb;
0x0001504c ldr r0, [pc, 0xc8] | r0 = "__s";
0x00015050 bl 0x11e4c | g_print ();
| }
0x00015054 mov r0, sb | r0 = sb;
0x00015058 bl 0x11dc8 | g_free ();
| label_2:
0x0001505c add r8, r8, 4 | r8 += 4;
| label_6:
0x00015060 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00015064 cmp r3, 0 |
| if (r3 == 0) {
0x00015068 beq 0x15078 | goto label_10;
| }
0x0001506c ldr r2, [r3, r8] | r2 = *((r3 + r8));
0x00015070 cmp r2, 0 |
0x00015074 bne 0x14ff4 |
| } while (r2 != 0);
| label_10:
0x00015078 ldr r2, [pc, 0x84] | r2 = "(not set)";
0x0001507c ldr r0, [pc, 0x9c] | r0 = "Skipping_path__s_that_is_not_enclosed_by_parent__s";
0x00015080 mov r1, r5 | r1 = r5;
0x00015084 add sp, sp, 0x14 |
0x00015088 pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001508c b 0x11e4c | void (*0x11e4c)() ();
| label_9:
0x00015090 ldr r1, [pc, 0x8c] | r1 = "%*s};\n";
0x00015094 mov r0, r6 | r0 = r6;
0x00015098 bl 0x11f3c | g_strcmp0 ();
0x0001509c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000150a0 ldr r3, [r3, r8] | r3 = *((r3 + r8));
0x000150a4 cmp r0, 0 |
| if (r0 != 0) {
0x000150a8 bne 0x150c0 | goto label_11;
| }
0x000150ac ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000150b0 mov r0, sl | r0 = sl;
0x000150b4 bl 0x11f60 | r0 = g_strdup_printf ()
| do {
0x000150b8 mov sb, r0 | sb = r0;
0x000150bc b 0x15030 | goto label_1;
| label_11:
0x000150c0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000150c4 mov r1, r6 | r1 = r6;
0x000150c8 mov r0, fp | r0 = fp;
0x000150cc bl 0x11f60 | g_strdup_printf ()
0x000150d0 b 0x150b8 |
| } while (1);
| label_8:
0x000150d4 str r7, [sp, 4] | var_4h = r7;
0x000150d8 str r7, [sp] | *(sp) = r7;
0x000150dc add r3, r5, 2 | r3 = r5 + 2;
0x000150e0 mov r1, r7 | r1 = r7;
0x000150e4 mov r0, r7 | r0 = r7;
0x000150e8 bl 0x14ee8 | fcn_00014ee8 (r0, r1, r2, r3, r4);
0x000150ec b 0x1505c | goto label_2;
| label_4:
0x000150f0 ldr r0, [pc, 0x30] | r0 = *(0x15124);
0x000150f4 add sp, sp, 0x14 |
0x000150f8 pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000150fc b 0x11e4c | return void (*0x11e4c)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/bin/gdbus @ 0x153cc */
| #include <stdint.h>
|
; (fcn) fcn.000153cc () | void fcn_000153cc (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x000153cc push {r0, r1, r4, r5, r6, lr} |
0x000153d0 ldr r3, [r1] | r3 = *(r1);
0x000153d4 mov r6, r0 | r6 = r0;
0x000153d8 mov r4, r1 | r4 = r1;
0x000153dc ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x000153e0 mov r1, r2 | r1 = r2;
0x000153e4 mov r5, r2 | r5 = r2;
0x000153e8 bl 0x11f3c | r0 = g_strcmp0 ();
0x000153ec cmp r0, 0 |
| if (r0 == 0) {
0x000153f0 bne 0x15440 |
0x000153f4 mov r2, r4 | r2 = r4;
0x000153f8 mov r1, r6 | r1 = r6;
0x000153fc mov r0, 1 | r0 = 1;
0x00015400 bl 0x15358 | fcn_00015358 (r0, r1);
0x00015404 ldr r3, [r4] | r3 = *(r4);
0x00015408 ldr r0, [r3] | r0 = *(r3);
0x0001540c bl 0x1217c | g_path_get_basename ();
0x00015410 ldr r3, [r4] | r3 = *(r4);
0x00015414 mov r2, r5 | r2 = r5;
0x00015418 ldr r1, [r3] | r1 = *(r3);
0x0001541c mov r6, r0 | r6 = r0;
0x00015420 ldr r0, [pc, 0x34] | r0 = *(0x15458);
0x00015424 bl 0x11f60 | g_strdup_printf ()
0x00015428 ldr r3, [r4] | r3 = *(r4);
0x0001542c str r0, [r3] | *(r3) = r0;
0x00015430 mov r0, r6 | r0 = r6;
0x00015434 add sp, sp, 8 |
0x00015438 pop {r4, r5, r6, lr} |
0x0001543c b 0x11dc8 | void (*0x11dc8)() ();
| }
0x00015440 ldr r3, [pc, 0x18] | r3 = "%s %s";
0x00015444 mov r2, 0x80 | r2 = 0x80;
0x00015448 str r3, [sp] | *(sp) = r3;
0x0001544c ldr r1, [pc, 0x10] | r1 = "g_strcmp0 ((*argv)[1], command) == 0";
0x00015450 ldr r3, [pc, 0x10] | r3 = "gdbus_tool.c";
0x00015454 ldr r0, [pc, 0x10] | r0 = "modify_argv0_for_command";
0x00015458 bl 0x11ee8 | g_assertion_message_expr ();
| if (r0 != 0) {
0x0001545c andeq r5, r1, sb, ror pc | r5 = r1 & (sb >>> pc);
| }
| if (r0 != 0) {
0x00015460 andeq r5, r1, pc, ror pc | r5 = r1 & (pc >>> pc);
| }
| if (r0 != 0) {
0x00015464 andeq r5, r1, r2, ror 29 | r5 = r1 & (r2 >>> 29);
| }
0x00015468 strdeq r5, r6, [r1], -sp | __asm ("strdeq r5, r6, [r1], -sp");
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x0001546c andeq r5, r1, pc, ror 29 | return r5 = r1 & (pc >>> 29);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/bin/gdbus @ 0x15470 */
| #include <stdint.h>
|
; (fcn) fcn.00015470 () | void fcn_00015470 (char * * arg1, int32_t arg2) {
| int32_t var_0h_2;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| r0 = arg1;
| r1 = arg2;
0x00015470 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00015474 mov r8, r0 | r8 = r0;
0x00015478 sub sp, sp, 0x34 |
0x0001547c mov r0, r1 | r0 = r1;
0x00015480 mov r6, r1 | r6 = r1;
0x00015484 mov r7, r2 | r7 = r2;
0x00015488 bl 0x11fd8 | r0 = g_dbus_is_name ();
0x0001548c cmp r0, 0 |
| if (r0 != 0) {
0x00015490 bne 0x154a8 | goto label_3;
| }
0x00015494 mov r1, r6 | r1 = r6;
0x00015498 ldr r0, [pc, 0x164] | r0 = *(0x15600);
0x0001549c bl 0x11e70 | g_printerr ();
| do {
| label_1:
0x000154a0 add sp, sp, 0x34 |
0x000154a4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x000154a8 mov r4, 0 | r4 = 0;
0x000154ac add r5, sp, 0x30 | r5 += var_30h;
0x000154b0 ldr r0, [pc, 0x150] | r0 = "Error:__s_is_not_a_valid_name";
0x000154b4 str r4, [r5, -8]! | *((r5 -= 8)) = r4;
0x000154b8 bl 0x11d68 | g_variant_type_checked_ ();
0x000154bc ldr r3, [pc, 0x148] | r3 = "_s_";
0x000154c0 str r5, [sp, 0x18] | var_18h = r5;
0x000154c4 str r3, [sp, 0x10] | var_10h = r3;
0x000154c8 ldr r3, [pc, 0x140] | r3 = *(0x1560c);
0x000154cc str r4, [sp, 0x14] | var_14h = r4;
0x000154d0 str r3, [sp] | *(sp) = r3;
0x000154d4 str r4, [sp, 0xc] | var_ch = r4;
0x000154d8 str r4, [sp, 4] | var_4h = r4;
0x000154dc ldr r3, [pc, 0x130] | r3 = "Introspect";
0x000154e0 mov r2, r7 | r2 = r7;
0x000154e4 mov r1, r6 | r1 = r6;
0x000154e8 str r0, [sp, 8] | var_8h = r0;
0x000154ec mov r0, r8 | r0 = r8;
0x000154f0 bl 0x12044 | r0 = g_dbus_connection_call_sync ();
0x000154f4 subs sb, r0, 0 | sb = r0 - 0;
| if (sb != r0) {
0x000154f8 bne 0x15518 | goto label_4;
| }
0x000154fc ldr r3, [sp, 0x28] | r3 = var_28h;
0x00015500 ldr r0, [pc, 0x110] | r0 = "org.freedesktop.DBus.Introspectable";
0x00015504 ldr r1, [r3, 8] | r1 = *((r3 + 8));
| label_0:
0x00015508 bl 0x11e70 | g_printerr ();
0x0001550c ldr r0, [sp, 0x28] | r0 = var_28h;
0x00015510 bl 0x121f4 | g_error_free ();
0x00015514 b 0x154a0 |
| } while (1);
| label_4:
0x00015518 add r2, sp, 0x2c | r2 += var_2ch;
0x0001551c ldr r1, [pc, 0xf8] | r1 = "Error:__s";
0x00015520 bl 0x12110 | g_variant_get ();
0x00015524 mov r1, r5 | r1 = r5;
0x00015528 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0001552c str r4, [sp, 0x28] | var_28h = r4;
0x00015530 bl 0x11d50 | r0 = g_dbus_node_info_new_for_xml ();
0x00015534 mov r4, r0 | r4 = r0;
0x00015538 mov r0, sb | r0 = sb;
0x0001553c bl 0x11e1c | g_variant_unref ();
0x00015540 cmp r4, 0 |
| if (r4 != 0) {
0x00015544 ldreq r3, [sp, 0x28] | r3 = var_28h;
| }
| if (r4 != 0) {
0x00015548 ldreq r0, [pc, 0xd0] | r0 = "Error_parsing_introspection_XML:__s";
| }
| if (r4 == 0) {
0x0001554c ldreq r1, [r3, 8] | r1 = *((r3 + 8));
| goto label_5;
| }
| if (r4 == 0) {
| label_5:
0x00015550 beq 0x15508 | goto label_0;
| }
0x00015554 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00015558 cmp r3, 0 |
| if (r3 != 0) {
0x0001555c beq 0x1556c |
0x00015560 mov r1, r7 | r1 = r7;
0x00015564 ldr r0, [pc, 0xb8] | r0 = "Error_parsing_introspection_XML:__s";
0x00015568 bl 0x11e4c | g_print ();
| }
0x0001556c ldr sb, [pc, 0xb4] | sb = *(0x00015628);
0x00015570 ldr sl, [pc, 0xb4] | sl = "_s__s";
0x00015574 ldr fp, [pc, 0xb4] | fp = "__s";
0x00015578 mov r5, 0 | r5 = 0;
| do {
0x0001557c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00015580 cmp r3, 0 |
| if (r3 != 0) {
0x00015584 beq 0x15594 |
0x00015588 ldr r3, [r3, r5] | r3 = *((r3 + r5));
0x0001558c cmp r3, 0 |
| if (r3 != 0) {
0x00015590 bne 0x155a0 | goto label_6;
| }
| }
0x00015594 mov r0, r4 | r0 = r4;
0x00015598 bl 0x11e58 | g_dbus_node_info_unref ();
0x0001559c b 0x154a0 | goto label_1;
| label_6:
0x000155a0 mov r1, sb | r1 = sb;
0x000155a4 mov r0, r7 | r0 = r7;
0x000155a8 bl 0x11f3c | g_strcmp0 ();
0x000155ac ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000155b0 ldr r3, [r3, r5] | r3 = *((r3 + r5));
0x000155b4 cmp r0, 0 |
| if (r0 != 0) {
0x000155b8 bne 0x155f0 | goto label_7;
| }
0x000155bc ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000155c0 mov r0, fp | r0 = fp;
0x000155c4 bl 0x11f60 | r0 = g_strdup_printf ()
| label_2:
0x000155c8 mov r2, r0 | r2 = r0;
0x000155cc str r0, [sp, 0x24] | var_24h = r0;
0x000155d0 mov r1, r6 | r1 = r6;
0x000155d4 mov r0, r8 | r0 = r8;
0x000155d8 bl 0x15470 | fcn_00015470 (r0, r1);
0x000155dc ldr r3, [sp, 0x24] | r3 = var_24h;
0x000155e0 add r5, r5, 4 | r5 += 4;
0x000155e4 mov r0, r3 | r0 = r3;
0x000155e8 bl 0x11dc8 | g_free ();
0x000155ec b 0x1557c |
| } while (1);
| label_7:
0x000155f0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000155f4 mov r1, r7 | r1 = r7;
0x000155f8 mov r0, sl | r0 = sl;
0x000155fc bl 0x11f60 | g_strdup_printf ()
0x00015600 b 0x155c8 | goto label_2;
| }
[*] Function printf used 6 times gdbus