[*] Binary protection state of gio-querymodules
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function printf tear down of gio-querymodules
; 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/gio-querymodules @ 0x10e5c */
| #include <stdint.h>
|
; (fcn) main () | int32_t main (uint32_t argc, char ** argv) {
| uint32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| char ** var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| r0 = argc;
| r1 = argv;
| /* [09] -r-x section size 1284 named .text */
0x00010e5c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00010e60 cmp r0, 1 |
0x00010e64 sub sp, sp, 0x1c |
0x00010e68 str r0, [sp] | *(sp) = r0;
0x00010e6c str r1, [sp, 0xc] | var_ch = r1;
| if (r0 != 1) {
0x00010e70 bne 0x10e90 | goto label_4;
| }
0x00010e74 ldr r0, [pc, 0x2d8] | r0 = *(0x11150);
0x00010e78 bl 0x10cf4 | g_print ();
0x00010e7c ldr r0, [pc, 0x2d4] | r0 = "Usage:_gio_querymodules__directory1____directory2__..._";
0x00010e80 bl 0x10cf4 | g_print ();
0x00010e84 ldr r0, [sp] | r0 = *(sp);
| do {
0x00010e88 add sp, sp, 0x1c |
0x00010e8c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00010e90 ldr r1, [pc, 0x2c4] | r1 = "Will update giomodule.cache in the listed directories\n";
0x00010e94 mov r0, 6 | r0 = 6;
0x00010e98 bl 0x10ca0 | setlocale (r0, "Will update giomodule.cache in the listed directories\n");
0x00010e9c mov r0, 0x50 | r0 = 0x50;
0x00010ea0 bl 0x10d18 | g_type_ensure ();
0x00010ea4 mov r6, 1 | r6 = 1;
| label_0:
0x00010ea8 ldr r3, [sp] | r3 = *(sp);
0x00010eac cmp r6, r3 |
| if (r6 < r3) {
0x00010eb0 movge r0, 0 | r0 = 0;
| }
0x00010eb4 bge 0x10e88 |
| } while (r6 >= r3);
0x00010eb8 bl 0x10dfc | r0 = g_module_supported ();
0x00010ebc cmp r0, 0 |
| if (r0 == 0) {
0x00010ec0 beq 0x10f0c | goto label_5;
| }
0x00010ec4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00010ec8 mov r5, 0 | r5 = 0;
0x00010ecc ldr r7, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r7 = *((r3 + offset_0));
0x00010ed0 add r2, sp, 0x18 | r2 += var_18h;
0x00010ed4 str r5, [r2, -4]! | *((r2 -= 4)) = r5;
0x00010ed8 mov r1, r5 | r1 = r5;
0x00010edc mov r0, r7 | r0 = r7;
0x00010ee0 bl 0x10cac | r0 = g_dir_open ();
0x00010ee4 subs r3, r0, 0 | r3 = r0 - 0;
0x00010ee8 str r3, [sp, 4] | var_4h = r3;
| if (r3 != r0) {
0x00010eec bne 0x10f14 | goto label_6;
| }
0x00010ef0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00010ef4 ldr r0, [pc, 0x264] | r0 = *(0x1115c);
0x00010ef8 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00010efc mov r1, r7 | r1 = r7;
0x00010f00 bl 0x10d0c | g_printerr ();
0x00010f04 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00010f08 bl 0x10e50 | g_error_free ();
| do {
| label_5:
0x00010f0c add r6, r6, 1 | r6++;
0x00010f10 b 0x10ea8 | goto label_0;
| label_6:
0x00010f14 ldr r0, [pc, 0x240] | r0 = "Will update giomodule.cache in the listed directories\n";
0x00010f18 bl 0x10cb8 | r0 = g_string_new ();
0x00010f1c mov r4, r0 | r4 = r0;
| label_1:
0x00010f20 ldr r0, [sp, 4] | r0 = var_4h;
0x00010f24 bl 0x10de4 | r0 = g_dir_read_name ();
0x00010f28 cmp r0, 0 |
| if (r0 != 0) {
0x00010f2c bne 0x10fcc | goto label_7;
| }
0x00010f30 mov r0, r5 | r0 = r5;
0x00010f34 ldr r1, [pc, 0x228] | r1 = "Unable_to_open_directory__s:__s";
0x00010f38 bl 0x10d30 | r0 = g_list_sort ();
0x00010f3c mov r5, r0 | r5 = r0;
0x00010f40 str r0, [sp, 8] | var_8h = r0;
| label_2:
0x00010f44 cmp r5, 0 |
| if (r5 != 0) {
0x00010f48 bne 0x10fe4 | goto label_8;
| }
0x00010f4c ldr r0, [sp, 4] | r0 = var_4h;
0x00010f50 bl 0x10c88 | g_dir_close ();
0x00010f54 ldr r1, [pc, 0x20c] | r1 = *(0x11164);
0x00010f58 ldr r0, [sp, 8] | r0 = var_8h;
0x00010f5c bl 0x10cd0 | g_list_free_full ();
0x00010f60 mov r2, r5 | r2 = r5;
0x00010f64 mov r0, r7 | r0 = r7;
0x00010f68 ldr r1, [pc, 0x1fc] | r1 = *(0x11168);
0x00010f6c bl 0x10c94 | g_build_filename ();
0x00010f70 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00010f74 cmp r2, 0 |
0x00010f78 mov r7, r0 | r7 = r0;
| if (r2 == 0) {
0x00010f7c beq 0x11120 | goto label_9;
| }
0x00010f80 add r3, sp, 0x18 | r3 += var_18h;
0x00010f84 str r5, [r3, -4]! | *((r3 -= 4)) = r5;
0x00010f88 ldr r1, [r4] | r1 = *(r4);
0x00010f8c bl 0x10d84 | r0 = g_file_set_contents ();
0x00010f90 cmp r0, 0 |
| if (r0 == 0) {
0x00010f94 bne 0x10fb4 |
0x00010f98 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00010f9c ldr r0, [pc, 0x1cc] | r0 = "giomodule.cache";
0x00010fa0 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00010fa4 mov r1, r7 | r1 = r7;
0x00010fa8 bl 0x10d0c | g_printerr ();
0x00010fac ldr r0, [sp, 0x14] | r0 = var_14h;
0x00010fb0 bl 0x10e50 | g_error_free ();
| }
| label_3:
0x00010fb4 mov r0, r7 | r0 = r7;
0x00010fb8 bl 0x10cc4 | g_free ();
0x00010fbc mov r1, 1 | r1 = 1;
0x00010fc0 mov r0, r4 | r0 = r4;
0x00010fc4 bl 0x10d60 | g_string_free ();
0x00010fc8 b 0x10f0c |
| } while (1);
| label_7:
0x00010fcc bl 0x10df0 | r0 = g_strdup ();
0x00010fd0 mov r1, r0 | r1 = r0;
0x00010fd4 mov r0, r5 | r0 = r5;
0x00010fd8 bl 0x10d24 | r0 = g_list_prepend ();
0x00010fdc mov r5, r0 | r5 = r0;
0x00010fe0 b 0x10f20 | goto label_1;
| label_8:
0x00010fe4 ldr sb, [r5] | sb = *(r5);
0x00010fe8 ldr r1, [pc, 0x184] | r1 = "Unable to create %s: %s\n";
0x00010fec mov r0, sb | r0 = sb;
0x00010ff0 bl 0x10dd8 | r0 = g_str_has_prefix ();
0x00010ff4 cmp r0, 0 |
| if (r0 == 0) {
0x00010ff8 beq 0x110f8 | goto label_10;
| }
0x00010ffc ldr r1, [pc, 0x174] | r1 = *(0x11174);
0x00011000 mov r0, sb | r0 = sb;
0x00011004 bl 0x10d3c | r0 = g_str_has_suffix ();
0x00011008 cmp r0, 0 |
| if (r0 == 0) {
0x0001100c beq 0x110f8 | goto label_10;
| }
0x00011010 mov r2, 0 | r2 = 0;
0x00011014 mov r1, sb | r1 = sb;
0x00011018 mov r0, r7 | r0 = r7;
0x0001101c bl 0x10c94 | g_build_filename ();
0x00011020 mov r1, 3 | r1 = 3;
0x00011024 mov sl, r0 | sl = r0;
0x00011028 bl 0x10d90 | r0 = g_module_open ();
0x0001102c mov r8, r0 | r8 = r0;
0x00011030 mov r0, sl | r0 = sl;
0x00011034 bl 0x10cc4 | g_free ();
0x00011038 cmp r8, 0 |
| if (r8 == 0) {
0x0001103c beq 0x110f8 | goto label_10;
| }
0x00011040 mov r0, sb | r0 = sb;
0x00011044 bl 0x112b4 | fcn_000112b4 ();
0x00011048 mov r3, 0 | r3 = 0;
0x0001104c ldr r2, [pc, 0x128] | r2 = *(0x11178);
0x00011050 mov r1, r0 | r1 = r0;
0x00011054 mov sl, r0 | sl = r0;
0x00011058 ldr r0, [pc, 0x120] | r0 = "_query";
0x0001105c bl 0x10d54 | g_strconcat ();
0x00011060 add r2, sp, 0x10 | r2 += var_10h;
0x00011064 mov r1, r0 | r1 = r0;
0x00011068 mov fp, r0 |
0x0001106c mov r0, r8 | r0 = r8;
0x00011070 bl 0x10e2c | g_module_symbol ();
0x00011074 mov r0, fp | r0 = fp;
0x00011078 bl 0x10cc4 | g_free ();
0x0001107c mov r0, sl | r0 = sl;
0x00011080 bl 0x10cc4 | g_free ();
0x00011084 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00011088 cmp r3, 0 |
| if (r3 == 0) {
0x0001108c bne 0x110a0 |
0x00011090 add r2, sp, 0x10 | r2 += var_10h;
0x00011094 ldr r1, [pc, 0xe8] | r1 = "g_io_";
0x00011098 mov r0, r8 | r0 = r8;
0x0001109c bl 0x10e2c | g_module_symbol ();
| }
0x000110a0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000110a4 cmp r3, 0 |
| if (r3 == 0) {
0x000110a8 beq 0x110f0 | goto label_11;
| }
0x000110ac blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
0x000110b0 subs sl, r0, 0 | sl = r0 - 0;
| if (sl == r0) {
0x000110b4 beq 0x110f0 | goto label_11;
| }
0x000110b8 mov r2, sb | r2 = sb;
0x000110bc ldr r1, [pc, 0xc4] | r1 = "g_io_module_query";
0x000110c0 mov r0, r4 | r0 = r4;
0x000110c4 bl 0x10da8 | g_string_append_printf ()
0x000110c8 ldr fp, [pc, 0xbc] | fp = *(0x0001118c);
0x000110cc mov sb, 0 | sb = 0;
| do {
0x000110d0 ldr r3, [sl, sb, lsl 2] | offset_1 = sb << 2;
| r3 = *((sl + offset_1));
0x000110d4 cmp r3, 0 |
| if (r3 == 0) {
0x000110d8 bne 0x11100 |
0x000110dc ldr r1, [pc, 0xac] | r1 = *(0x1118c);
0x000110e0 mov r0, r4 | r0 = r4;
0x000110e4 bl 0x10dcc | g_string_append ();
0x000110e8 mov r0, sl | r0 = sl;
0x000110ec bl 0x10d9c | g_strfreev ();
| label_11:
0x000110f0 mov r0, r8 | r0 = r8;
0x000110f4 bl 0x10d6c | g_module_close ();
| label_10:
0x000110f8 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x000110fc b 0x10f44 | goto label_2;
| }
0x00011100 cmp sb, 0 |
0x00011104 ldr r2, [pc, 0x50] | r2 = "Will update giomodule.cache in the listed directories\n";
0x00011108 ldr r1, [pc, 0x84] | r1 = *(0x11190);
| if (sb == 0) {
0x0001110c movne r2, fp | r2 = fp;
| }
0x00011110 mov r0, r4 | r0 = r4;
0x00011114 bl 0x10da8 | g_string_append_printf ()
0x00011118 add sb, sb, 1 | sb++;
0x0001111c b 0x110d0 |
| } while (1);
| label_9:
0x00011120 bl 0x10ce8 | r0 = g_unlink ();
0x00011124 cmp r0, 0 |
| if (r0 == 0) {
0x00011128 beq 0x10fb4 | goto label_3;
| }
0x0001112c bl 0x10e44 | r0 = errno_location ();
0x00011130 ldr r0, [r0] | r0 = *(r0);
0x00011134 cmp r0, 2 |
| if (r0 == 2) {
0x00011138 beq 0x10fb4 | goto label_3;
| }
0x0001113c bl 0x10d48 | g_strerror ();
0x00011140 mov r1, r7 | r1 = r7;
0x00011144 mov r2, r0 | r2 = r0;
0x00011148 ldr r0, [pc, 0x48] | r0 = "_s_s";
0x0001114c bl 0x10d0c | g_printerr ();
0x00011150 b 0x10fb4 | goto label_3;
| }
[*] Function printf used 3 times gio-querymodules