[*] Binary protection state of libwpa_client.so
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of libwpa_client.so
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4c4c */
| #include <stdint.h>
|
; (fcn) sym.hostapd_logger_register_cb () | uint32_t hostapd_logger_register_cb (int16_t arg1) {
| r0 = arg1;
0x00004c4c ldrbtmi r4, [fp], -0xb01 | __asm ("ldrbtmi r4, [fp], -aav.0x0000244a");
0x00004c50 str r0, [r3, 8] | *((r3 + 8)) = r0;
0x00004c52 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4c58 */
| #include <stdint.h>
|
; (fcn) sym.hostapd_logger () | void hostapd_logger (int16_t arg_48h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_ch;
| int32_t var_ch_2;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00004c58 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00004c5c mov sb, r2 | sb = r2;
0x00004c5e ldr r2, [pc, 0xcc] |
0x00004c60 mov sl, r3 | sl = r3;
0x00004c62 sub sp, 0x24 |
0x00004c64 mov r7, r1 | r7 = r1;
0x00004c66 ldr r3, [pc, 0xc8] | r3 = *(0x4d32);
0x00004c68 add r4, sp, 0x48 | r4 += arg_48h;
0x00004c6a add r2, pc | r2 = 0x999c;
0x00004c6c ldr fp, [r4], 4 | fp = *(r4);
| r4 += 4;
0x00004c70 movs r1, 0 | r1 = 0;
0x00004c72 mov r8, r0 | r8 = r0;
0x00004c74 ldr r3, [r2, r3] |
0x00004c76 mov r0, r1 | r0 = r1;
0x00004c78 movs r2, 1 | r2 = 1;
0x00004c7a ldr r3, [r3] | r3 = *(0x999c);
0x00004c7c str r3, [sp, 0x1c] | var_1ch = r3;
0x00004c7e mov.w r3, 0 | r3 = 0;
0x00004c82 mov.w r3, -1 | r3 = -1;
0x00004c86 strd fp, r4, [sp] | __asm ("strd fp, r4, [sp]");
0x00004c8a str r4, [sp, 0x18] | var_18h = r4;
0x00004c8c blx 0x2144 | r0 = fcn_00002144 ();
0x00004c90 adds r5, r0, 1 | r5 = r0 + 1;
0x00004c92 mov r0, r5 | r0 = r5;
0x00004c94 blx 0x2264 | r0 = fcn_00002264 ();
0x00004c98 cmp r0, 0 |
| if (r0 == 0) {
0x00004c9a beq 0x4d1e | goto label_1;
| }
0x00004c9c mov.w r3, -1 | r3 = -1;
0x00004ca0 strd fp, r4, [sp] | __asm ("strd fp, r4, [sp]");
0x00004ca4 movs r2, 1 | r2 = 1;
0x00004ca6 mov r1, r5 | r1 = r5;
0x00004ca8 str r4, [sp, 0x18] | var_18h = r4;
0x00004caa mov r6, r0 | r6 = r0;
0x00004cac blx 0x2144 | fcn_00002144 ();
0x00004cb0 ldr r3, [pc, 0x80] |
0x00004cb2 add r3, pc | r3 = 0x99ea;
0x00004cb4 ldr r4, [r3, 8] | r4 = *(0x99f2);
| if (r4 == 0) {
0x00004cb6 cbz r4, 0x4ce8 | goto label_2;
| }
0x00004cb8 str r0, [sp, 4] | var_4h = r0;
0x00004cba mov r3, sl | r3 = sl;
0x00004cbc mov r2, sb | r2 = sb;
0x00004cbe mov r1, r7 | r1 = r7;
0x00004cc0 mov r0, r8 | r0 = r8;
0x00004cc2 str r6, [sp] | *(sp) = r6;
0x00004cc4 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| do {
0x00004cc6 mov r1, r5 | r1 = r5;
0x00004cc8 mov r0, r6 | r0 = r6;
0x00004cca blx 0x22c0 | fcn_000022c0 ();
| label_0:
0x00004cce ldr r2, [pc, 0x68] |
0x00004cd0 ldr r3, [pc, 0x5c] | r3 = *(0x4d30);
0x00004cd2 add r2, pc | r2 = 0x9a10;
0x00004cd4 ldr r3, [r2, r3] | r3 = *(0x9a10);
0x00004cd6 ldr r2, [r3] | r2 = *(0x9a10);
0x00004cd8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00004cda eors r2, r3 | r2 ^= r3;
0x00004cdc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004ce0 bne 0x4d1a | goto label_3;
| }
0x00004ce2 add sp, 0x24 |
0x00004ce4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| if (r7 == 0) {
| label_2:
0x00004ce8 cbz r7, 0x4d0c | goto label_4;
| }
0x00004cea ldrb r2, [r7, 5] | r2 = *((r7 + 5));
0x00004cec movs r0, 2 | r0 = 2;
0x00004cee ldrb r3, [r7, 4] | r3 = *((r7 + 4));
0x00004cf0 ldr r1, [pc, 0x48] |
0x00004cf2 strd r2, r6, [sp, 0xc] | __asm ("strd r2, r6, [var_ch]");
0x00004cf6 str r3, [sp, 8] | var_8h = r3;
0x00004cf8 ldrb r2, [r7, 3] | r2 = *((r7 + 3));
0x00004cfa add r1, pc | r1 = 0x9a3a;
0x00004cfc ldrb r3, [r7, 2] | r3 = *((r7 + 2));
0x00004cfe strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x00004d02 ldrb r3, [r7, 1] | r3 = *((r7 + 1));
0x00004d04 ldrb r2, [r7] | r2 = *(r7);
0x00004d06 blx 0x2274 | vfprintf_chk ()
0x00004d0a b 0x4cc6 |
| } while (1);
| label_4:
0x00004d0c ldr r1, [pc, 0x30] |
0x00004d0e mov r2, r6 | r2 = r6;
0x00004d10 movs r0, 2 | r0 = 2;
0x00004d12 add r1, pc | r1 = 0x9a56;
0x00004d14 blx 0x2274 | vfprintf_chk ()
0x00004d16 invalid |
| label_3:
0x00004d1a blx 0x21a0 | fcn_000021a0 ();
| label_1:
0x00004d1e ldr r1, [pc, 0x24] |
0x00004d20 movs r0, 5 | r0 = 5;
0x00004d22 add r1, pc | r1 = 0x9a6c;
0x00004d24 blx 0x2274 | vfprintf_chk ()
0x00004d28 b 0x4cce | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x473c */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_register_cb () | uint32_t wpa_msg_register_cb (int16_t arg1) {
| r0 = arg1;
0x0000473c ldr r3, [pc, 4] |
0x0000473e add r3, pc | r3 = 0x8e86;
0x00004740 str r0, [r3] | *(r3) = r0;
0x00004742 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4748 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_register_ifname_cb () | uint32_t wpa_msg_register_ifname_cb (int16_t arg1) {
| r0 = arg1;
0x00004748 ldr r3, [pc, 4] |
0x0000474a add r3, pc | r3 = 0x8e9e;
0x0000474c str r0, [r3, 4] | *((r3 + 4)) = r0;
0x0000474e bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4754 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg () | void wpa_msg (int16_t arg1, int16_t arg2) {
| int16_t var_ch_2;
| int16_t var_30h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_94h;
| int16_t var_b8h;
| int16_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
0x00004754 push {r2, r3} |
0x00004756 mov.w r3, -1 | r3 = -1;
0x0000475a push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000475e mov r7, r1 | r7 = r1;
0x00004760 sub sp, 0x98 |
0x00004762 mov r8, r0 | r8 = r0;
0x00004764 add r5, sp, 0xb8 | r5 += var_b8h;
0x00004766 ldr r1, [pc, 0xe4] |
0x00004768 ldr r2, [pc, 0xe4] | r2 = *(0x4850);
0x0000476a ldr sb, [r5], 4 | sb = *(r5);
| r5 += 4;
0x0000476e add r1, pc | r1 = 0x8fc0;
0x00004770 ldr r2, [r1, r2] |
0x00004772 movs r1, 0 | r1 = 0;
0x00004774 mov r0, r1 | r0 = r1;
0x00004776 ldr r2, [r2] | r2 = *(0x8fc0);
0x00004778 str r2, [sp, 0x94] | var_94h = r2;
0x0000477a mov.w r2, 0 | r2 = 0;
0x0000477e movs r2, 1 | r2 = 1;
0x00004780 strd sb, r5, [sp] | __asm ("strd sb, r5, [sp]");
0x00004784 str r5, [sp, 0xc] | var_ch = r5;
0x00004786 blx 0x2144 | r0 = fcn_00002144 ();
0x0000478a adds r6, r0, 1 | r6 = r0 + 1;
0x0000478c mov r0, r6 | r0 = r6;
0x0000478e blx 0x2264 | r0 = fcn_00002264 ();
0x00004792 cmp r0, 0 |
| if (r0 == 0) {
0x00004794 beq 0x483a | goto label_0;
| }
0x00004796 ldr r3, [pc, 0xbc] |
0x00004798 mov r4, r0 | r4 = r0;
0x0000479a str r5, [sp, 0xc] | var_ch = r5;
0x0000479c movs r5, 0 | r5 = 0;
0x0000479e strb.w r5, [sp, 0x10] | var_10h = r5;
0x000047a2 add r3, pc |
0x000047a4 ldr r3, [r3, 4] | r3 = *(0x9000);
| if (r3 != 0) {
0x000047a6 cbz r3, 0x47d0 |
0x000047a8 mov r0, r8 | r0 = r8;
0x000047aa blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
| if (r0 != 0) {
0x000047ac cbz r0, 0x47d0 |
0x000047ae ldr r3, [pc, 0xa8] |
0x000047b0 add.w sl, sp, 0x10 | sl += var_10h;
0x000047b4 str r0, [sp, 4] | var_4h = r0;
0x000047b6 movs r2, 1 | r2 = 1;
0x000047b8 mov r0, sl | r0 = sl;
0x000047ba add r3, pc | r3 = 0x9018;
0x000047bc str r3, [sp] | *(sp) = r3;
0x000047be movs r3, 0x82 | r3 = 0x82;
0x000047c0 mov r1, r3 | r1 = r3;
0x000047c2 blx 0x2508 | r0 = fcn_00002508 ();
0x000047c6 cmp r0, 0x81 |
0x000047c8 it hi |
| if (r0 <= 0x81) {
0x000047ca strbhi r5, [sp, 0x10] | var_10h = r5;
| }
0x000047ce b 0x47d4 |
| }
| } else {
0x000047d0 add.w sl, sp, 0x10 | sl += var_10h;
| }
0x000047d4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000047d6 movs r2, 1 | r2 = 1;
0x000047d8 mov r1, r6 | r1 = r6;
0x000047da str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000047de mov r0, r4 | r0 = r4;
0x000047e0 str r3, [sp, 4] | var_4h = r3;
0x000047e2 mov.w r3, -1 | r3 = -1;
0x000047e6 blx 0x2144 | fcn_00002144 ();
0x000047ea ldr r1, [pc, 0x70] |
0x000047ec mov r3, r4 | r3 = r4;
0x000047ee mov r2, sl | r2 = sl;
0x000047f0 mov r5, r0 | r5 = r0;
0x000047f2 mov r0, r7 | r0 = r7;
0x000047f4 add r1, pc | r1 = 0x9056;
0x000047f6 blx 0x2274 | vfprintf_chk ()
0x000047fa ldr r3, [pc, 0x64] |
0x000047fc add r3, pc | r3 = 0x9062;
0x000047fe ldr.w sb, [r3] | sb = *(0x9062);
0x00004802 cmp.w sb, 0 |
| if (sb != 0) {
0x00004806 beq 0x4814 |
0x00004808 mov r1, r7 | r1 = r7;
0x0000480a mov r0, r8 | r0 = r8;
0x0000480c mov r3, r4 | r3 = r4;
0x0000480e movs r2, 0 | r2 = 0;
0x00004810 str r5, [sp] | *(sp) = r5;
0x00004812 blx sb | sb (r0, r1, r2, r3);
| }
0x00004814 mov r1, r6 | r1 = r6;
0x00004816 mov r0, r4 | r0 = r4;
0x00004818 blx 0x22c0 | fcn_000022c0 ();
| do {
0x0000481c ldr r2, [pc, 0x44] |
0x0000481e ldr r3, [pc, 0x30] | r3 = *(0x4852);
0x00004820 add r2, pc | r2 = 0x9088;
0x00004822 ldr r3, [r2, r3] | r3 = *(0x9088);
0x00004824 ldr r2, [r3] | r2 = *(0x9088);
0x00004826 ldr r3, [sp, 0x94] | r3 = var_94h;
0x00004828 eors r2, r3 | r2 ^= r3;
0x0000482a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000482e bne 0x4846 | goto label_1;
| }
0x00004830 add sp, 0x98 |
0x00004832 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00004836 add sp, 8 |
0x00004838 bx lr | return;
| label_0:
0x0000483a ldr r1, [pc, 0x2c] |
0x0000483c movs r0, 5 | r0 = 5;
0x0000483e add r1, pc | r1 = 0x90ac;
0x00004840 blx 0x2274 | vfprintf_chk ()
0x00004844 b 0x481c |
| } while (1);
| label_1:
0x00004846 blx 0x21a0 | fcn_000021a0 ();
0x0000484a nop |
0x0000484c movs r6, 0xf6 | r6 = 0xf6;
0x0000484e movs r0, r0 |
0x00004850 lsls r0, r0, 6 | r0 <<= 6;
0x00004852 movs r0, r0 |
0x00004854 cmp r0, 0xf6 |
0x00004856 movs r0, r0 |
0x00004858 lsrs r6, r0, 6 | r6 = r0 >> 6;
0x0000485a movs r0, r0 |
0x0000485c lsrs r4, r2, 5 | r4 = r2 >> 5;
0x0000485e movs r0, r0 |
0x00004860 cmp r0, 0x9c |
0x00004862 movs r0, r0 |
0x00004864 movs r6, 0x44 | r6 = 0x44;
0x00004866 movs r0, r0 |
0x00004868 lsrs r6, r2, 3 | r6 = r2 >> 3;
0x0000486a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x486c */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_ctrl () | void wpa_msg_ctrl (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x0000486c push {r2, r3, sl, ip, sp, pc} |
0x00004870 blx lr | lr ();
0x00004872 mov sl, r1 | sl = r1;
0x00004874 sub sp, 0x10 |
0x00004876 ldr.w r8, [pc, 0x9c] |
0x0000487a ldr r1, [pc, 0x9c] |
0x0000487c ldr r2, [pc, 0x9c] | r2 = *(0x491c);
0x0000487e add r8, pc | r8 = 0x9198;
0x00004880 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x00004884 add r1, pc | r1 = 0x91a2;
0x00004886 ldr.w r3, [r8] | r3 = *(0x9198);
0x0000488a ldr r2, [r1, r2] |
0x0000488c ldr r2, [r2] | r2 = *(0x91a2);
0x0000488e str r2, [sp, 0xc] | var_ch = r2;
0x00004890 mov.w r2, 0 | r2 = 0;
| if (r3 == 0) {
0x00004894 cbz r3, 0x48e4 | goto label_0;
| }
0x00004896 movs r1, 0 | r1 = 0;
0x00004898 add r7, sp, 0x34 | r7 += var_34h;
0x0000489a mov.w r3, -1 | r3 = -1;
0x0000489e movs r2, 1 | r2 = 1;
0x000048a0 mov r6, r0 | r6 = r0;
0x000048a2 strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x000048a6 mov r0, r1 | r0 = r1;
0x000048a8 str r7, [sp, 8] | var_8h = r7;
0x000048aa blx 0x2144 | r0 = fcn_00002144 ();
0x000048ae adds r5, r0, 1 | r5 = r0 + 1;
0x000048b0 mov r0, r5 | r0 = r5;
0x000048b2 blx 0x2264 | r0 = fcn_00002264 ();
0x000048b6 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000048b8 cbz r0, 0x4906 | goto label_1;
| }
0x000048ba mov.w r3, -1 | r3 = -1;
0x000048be movs r2, 1 | r2 = 1;
0x000048c0 mov r1, r5 | r1 = r5;
0x000048c2 strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x000048c6 str r7, [sp, 8] | var_8h = r7;
0x000048c8 blx 0x2144 | fcn_00002144 ();
0x000048cc mov r1, sl | r1 = sl;
0x000048ce str r0, [sp] | *(sp) = r0;
0x000048d0 mov r3, r4 | r3 = r4;
0x000048d2 mov r0, r6 | r0 = r6;
0x000048d4 ldr.w r7, [r8] | r7 = *(r8);
0x000048d8 movs r2, 0 | r2 = 0;
0x000048da blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000048dc mov r1, r5 | r1 = r5;
0x000048de mov r0, r4 | r0 = r4;
0x000048e0 blx 0x22c0 | fcn_000022c0 ();
| do {
| label_0:
0x000048e4 ldr r2, [pc, 0x38] |
0x000048e6 ldr r3, [pc, 0x34] | r3 = *(0x491e);
0x000048e8 add r2, pc | r2 = 0x920c;
0x000048ea ldr r3, [r2, r3] | r3 = *(0x920c);
0x000048ec ldr r2, [r3] | r2 = *(0x920c);
0x000048ee ldr r3, [sp, 0xc] | r3 = var_ch;
0x000048f0 eors r2, r3 | r2 ^= r3;
0x000048f2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000048f6 bne 0x4902 |
0x000048f8 add sp, 0x10 |
0x000048fa pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000048fe add sp, 8 |
0x00004900 bx lr | return;
| }
0x00004902 blx 0x21a0 | fcn_000021a0 ();
| label_1:
0x00004906 ldr r1, [pc, 0x1c] |
0x00004908 movs r0, 5 | r0 = 5;
0x0000490a add r1, pc | r1 = 0x9234;
0x0000490c blx 0x2274 | vfprintf_chk ()
0x00004910 b 0x48e4 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4928 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global () | void wpa_msg_global (int16_t arg1, int16_t arg2) {
| int16_t var_ch_2;
| int16_t var_30h_2;
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00004928 push {r2, r3} |
0x0000492a mov.w r3, -1 | r3 = -1;
0x0000492e push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004932 mov r7, r1 | r7 = r1;
0x00004934 sub sp, 0x14 |
0x00004936 mov r8, r0 | r8 = r0;
0x00004938 add r4, sp, 0x30 | r4 += var_30h;
0x0000493a ldr r1, [pc, 0xa0] |
0x0000493c ldr r2, [pc, 0xa0] | r2 = *(0x49e0);
0x0000493e ldr sb, [r4], 4 | sb = *(r4);
| r4 += 4;
0x00004940 ldr r3, [sp, 0x10] | r3 = *((sp + 0x10));
0x00004942 add r1, pc | r1 = 0x9324;
0x00004944 ldr r2, [r1, r2] |
0x00004946 movs r1, 0 | r1 = 0;
0x00004948 mov r0, r1 | r0 = r1;
0x0000494a ldr r2, [r2] | r2 = *(0x9324);
0x0000494c str r2, [sp, 0xc] | var_ch = r2;
0x0000494e mov.w r2, 0 | r2 = 0;
0x00004952 movs r2, 1 | r2 = 1;
0x00004954 strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004958 str r4, [sp, 8] | var_8h = r4;
0x0000495a blx 0x2144 | r0 = fcn_00002144 ();
0x0000495e adds r6, r0, 1 | r6 = r0 + 1;
0x00004960 mov r0, r6 | r0 = r6;
0x00004962 blx 0x2264 | r0 = fcn_00002264 ();
| if (r0 == 0) {
0x00004966 cbz r0, 0x49ca | goto label_0;
| }
0x00004968 mov.w r3, -1 | r3 = -1;
0x0000496c strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004970 movs r2, 1 | r2 = 1;
0x00004972 mov r1, r6 | r1 = r6;
0x00004974 mov r5, r0 | r5 = r0;
0x00004976 str r4, [sp, 8] | var_8h = r4;
0x00004978 blx 0x2144 | fcn_00002144 ();
0x0000497c ldr r1, [pc, 0x64] |
0x0000497e mov r4, r0 | r4 = r0;
0x00004980 mov r2, r5 | r2 = r5;
0x00004982 mov r0, r7 | r0 = r7;
0x00004984 add r1, pc | r1 = 0x936c;
0x00004986 blx 0x2274 | vfprintf_chk ()
0x0000498a ldr r3, [pc, 0x5c] |
0x0000498c add r3, pc | r3 = 0x937a;
0x0000498e ldr.w sb, [r3] | sb = *(0x937a);
0x00004992 cmp.w sb, 0 |
| if (sb != 0) {
0x00004996 beq 0x49a4 |
0x00004998 mov r1, r7 | r1 = r7;
0x0000499a mov r0, r8 | r0 = r8;
0x0000499c mov r3, r5 | r3 = r5;
0x0000499e movs r2, 1 | r2 = 1;
0x000049a0 str r4, [sp] | *(sp) = r4;
0x000049a2 blx sb | sb (r0, r1, r2, r3);
| }
0x000049a4 mov r1, r6 | r1 = r6;
0x000049a6 mov r0, r5 | r0 = r5;
0x000049a8 blx 0x22c0 | fcn_000022c0 ();
| do {
0x000049ac ldr r2, [pc, 0x3c] |
0x000049ae ldr r3, [pc, 0x30] | r3 = *(0x49e2);
0x000049b0 add r2, pc | r2 = 0x93a0;
0x000049b2 ldr r3, [r2, r3] | r3 = *(0x93a0);
0x000049b4 ldr r2, [r3] | r2 = *(0x93a0);
0x000049b6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000049b8 eors r2, r3 | r2 ^= r3;
0x000049ba mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000049be bne 0x49d6 | goto label_1;
| }
0x000049c0 add sp, 0x14 |
0x000049c2 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000049c6 add sp, 8 |
0x000049c8 bx lr | return;
| label_0:
0x000049ca ldr r1, [pc, 0x24] |
0x000049cc movs r0, 5 | r0 = 5;
0x000049ce add r1, pc | r1 = 0x93c4;
0x000049d0 blx 0x2274 | vfprintf_chk ()
0x000049d4 b 0x49ac |
| } while (1);
| label_1:
0x000049d6 blx 0x21a0 | fcn_000021a0 ();
0x000049da nop |
0x000049dc movs r5, 0x22 | r5 = 0x22;
0x000049de movs r0, r0 |
0x000049e0 lsls r0, r0, 6 | r0 <<= 6;
0x000049e2 movs r0, r0 |
0x000049e4 lsrs r0, r6, 4 | r0 = r6 >> 4;
0x000049e6 movs r0, r0 |
0x000049e8 movs r7, 0xc | r7 = 0xc;
0x000049ea movs r0, r0 |
0x000049ec movs r4, 0xb4 | r4 = 0xb4;
0x000049ee movs r0, r0 |
0x000049f0 lsls r2, r6, 0x1e | r2 = r6 << 0x1e;
0x000049f2 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x49f4 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global_ctrl () | void wpa_msg_global_ctrl (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x000049f4 push {r2, r3, sl, ip, sp, pc} |
0x000049f8 blx lr | lr ();
0x000049fa mov sl, r1 | sl = r1;
0x000049fc sub sp, 0x10 |
0x000049fe ldr.w r8, [pc, 0x9c] |
0x00004a02 ldr r1, [pc, 0x9c] |
0x00004a04 ldr r2, [pc, 0x9c] | r2 = *(0x4aa4);
0x00004a06 add r8, pc | r8 = 0x94a8;
0x00004a08 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x00004a0c add r1, pc | r1 = 0x94b2;
0x00004a0e ldr.w r3, [r8] | r3 = *(0x94a8);
0x00004a12 ldr r2, [r1, r2] |
0x00004a14 ldr r2, [r2] | r2 = *(0x94b2);
0x00004a16 str r2, [sp, 0xc] | var_ch = r2;
0x00004a18 mov.w r2, 0 | r2 = 0;
| if (r3 == 0) {
0x00004a1c cbz r3, 0x4a6c | goto label_0;
| }
0x00004a1e movs r1, 0 | r1 = 0;
0x00004a20 add r7, sp, 0x34 | r7 += var_34h;
0x00004a22 mov.w r3, -1 | r3 = -1;
0x00004a26 movs r2, 1 | r2 = 1;
0x00004a28 mov r6, r0 | r6 = r0;
0x00004a2a strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x00004a2e mov r0, r1 | r0 = r1;
0x00004a30 str r7, [sp, 8] | var_8h = r7;
0x00004a32 blx 0x2144 | r0 = fcn_00002144 ();
0x00004a36 adds r5, r0, 1 | r5 = r0 + 1;
0x00004a38 mov r0, r5 | r0 = r5;
0x00004a3a blx 0x2264 | r0 = fcn_00002264 ();
0x00004a3e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00004a40 cbz r0, 0x4a8e | goto label_1;
| }
0x00004a42 mov.w r3, -1 | r3 = -1;
0x00004a46 movs r2, 1 | r2 = 1;
0x00004a48 mov r1, r5 | r1 = r5;
0x00004a4a strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x00004a4e str r7, [sp, 8] | var_8h = r7;
0x00004a50 blx 0x2144 | fcn_00002144 ();
0x00004a54 mov r1, sl | r1 = sl;
0x00004a56 str r0, [sp] | *(sp) = r0;
0x00004a58 mov r3, r4 | r3 = r4;
0x00004a5a mov r0, r6 | r0 = r6;
0x00004a5c ldr.w r7, [r8] | r7 = *(r8);
0x00004a60 movs r2, 1 | r2 = 1;
0x00004a62 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00004a64 mov r1, r5 | r1 = r5;
0x00004a66 mov r0, r4 | r0 = r4;
0x00004a68 blx 0x22c0 | fcn_000022c0 ();
0x00004a6a invalid |
| do {
| label_0:
0x00004a6c ldr r2, [pc, 0x38] |
0x00004a6e ldr r3, [pc, 0x34] | r3 = *(0x4aa6);
0x00004a70 add r2, pc | r2 = 0x951c;
0x00004a72 ldr r3, [r2, r3] | r3 = *(0x951c);
0x00004a74 ldr r2, [r3] | r2 = *(0x951c);
0x00004a76 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00004a78 eors r2, r3 | r2 ^= r3;
0x00004a7a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00004a7e bne 0x4a8a |
0x00004a80 add sp, 0x10 |
0x00004a82 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00004a86 add sp, 8 |
0x00004a88 bx lr | return;
| }
0x00004a8a blx 0x21a0 | fcn_000021a0 ();
| label_1:
0x00004a8e ldr r1, [pc, 0x1c] |
0x00004a90 movs r0, 5 | r0 = 5;
0x00004a92 add r1, pc | r1 = 0x9544;
0x00004a94 blx 0x2274 | vfprintf_chk ()
0x00004a98 b 0x4a6c |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4ab0 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_no_global () | void wpa_msg_no_global (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int32_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00004ab0 push {r2, r3} |
0x00004ab2 mov.w r3, -1 | r3 = -1;
0x00004ab6 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004aba mov r7, r1 | r7 = r1;
0x00004abc sub sp, 0x14 |
0x00004abe mov r8, r0 | r8 = r0;
0x00004ac0 add r4, sp, 0x30 | r4 += var_30h;
0x00004ac2 ldr r1, [pc, 0xa0] |
0x00004ac4 ldr r2, [pc, 0xa0] | r2 = *(0x4b68);
0x00004ac6 ldr sb, [r4], 4 | sb = *(r4);
| r4 += 4;
0x00004ac8 ldr r3, [sp, 0x10] | r3 = *((sp + 0x10));
0x00004aca add r1, pc | r1 = 0x9634;
0x00004acc ldr r2, [r1, r2] |
0x00004ace movs r1, 0 | r1 = 0;
0x00004ad0 mov r0, r1 | r0 = r1;
0x00004ad2 ldr r2, [r2] | r2 = *(0x9634);
0x00004ad4 str r2, [sp, 0xc] | var_ch = r2;
0x00004ad6 mov.w r2, 0 | r2 = 0;
0x00004ada movs r2, 1 | r2 = 1;
0x00004adc strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004ae0 str r4, [sp, 8] | var_8h = r4;
0x00004ae2 blx 0x2144 | r0 = fcn_00002144 ();
0x00004ae6 adds r6, r0, 1 | r6 = r0 + 1;
0x00004ae8 mov r0, r6 | r0 = r6;
0x00004aea blx 0x2264 | r0 = fcn_00002264 ();
| if (r0 == 0) {
0x00004aee cbz r0, 0x4b52 | goto label_0;
| }
0x00004af0 mov.w r3, -1 | r3 = -1;
0x00004af4 strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004af8 movs r2, 1 | r2 = 1;
0x00004afa mov r1, r6 | r1 = r6;
0x00004afc mov r5, r0 | r5 = r0;
0x00004afe str r4, [sp, 8] | var_8h = r4;
0x00004b00 blx 0x2144 | fcn_00002144 ();
0x00004b04 ldr r1, [pc, 0x64] |
0x00004b06 mov r4, r0 | r4 = r0;
0x00004b08 mov r2, r5 | r2 = r5;
0x00004b0a mov r0, r7 | r0 = r7;
0x00004b0c add r1, pc | r1 = 0x967c;
0x00004b0e blx 0x2274 | vfprintf_chk ()
0x00004b12 ldr r3, [pc, 0x5c] |
0x00004b14 add r3, pc | r3 = 0x968a;
0x00004b16 ldr.w sb, [r3] | sb = *(0x968a);
0x00004b1a cmp.w sb, 0 |
| if (sb != 0) {
0x00004b1e beq 0x4b2c |
0x00004b20 mov r1, r7 | r1 = r7;
0x00004b22 mov r0, r8 | r0 = r8;
0x00004b24 mov r3, r5 | r3 = r5;
0x00004b26 movs r2, 2 | r2 = 2;
0x00004b28 str r4, [sp] | *(sp) = r4;
0x00004b2a blx sb | sb (r0, r1, r2, r3);
| }
0x00004b2c mov r1, r6 | r1 = r6;
0x00004b2e mov r0, r5 | r0 = r5;
0x00004b30 blx 0x22c0 | fcn_000022c0 ();
| do {
0x00004b34 ldr r2, [pc, 0x3c] |
0x00004b36 ldr r3, [pc, 0x30] | r3 = *(0x4b6a);
0x00004b38 add r2, pc | r2 = 0x96b0;
0x00004b3a ldr r3, [r2, r3] | r3 = *(0x96b0);
0x00004b3c ldr r2, [r3] | r2 = *(0x96b0);
0x00004b3e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00004b40 eors r2, r3 | r2 ^= r3;
0x00004b42 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004b46 bne 0x4b5e | goto label_1;
| }
0x00004b48 add sp, 0x14 |
0x00004b4a pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004b4e add sp, 8 |
0x00004b50 bx lr | return;
| label_0:
0x00004b52 ldr r1, [pc, 0x24] |
0x00004b54 movs r0, 5 | r0 = 5;
0x00004b56 add r1, pc | r1 = 0x96d4;
0x00004b58 blx 0x2274 | vfprintf_chk ()
0x00004b5c b 0x4b34 |
| } while (1);
| label_1:
0x00004b5e blx 0x21a0 | fcn_000021a0 ();
0x00004b62 nop |
0x00004b64 movs r3, 0x9a | r3 = 0x9a;
0x00004b66 movs r0, r0 |
0x00004b68 lsls r0, r0, 6 | r0 <<= 6;
0x00004b6a movs r0, r0 |
0x00004b6c lsls r0, r5, 0x1e | r0 = r5 << 0x1e;
0x00004b6e movs r0, r0 |
0x00004b70 movs r5, 0x84 | r5 = 0x84;
0x00004b72 movs r0, r0 |
0x00004b74 movs r3, 0x2c | r3 = 0x2c;
0x00004b76 movs r0, r0 |
0x00004b78 lsls r6, r2, 0x1a | r6 = r2 << 0x1a;
0x00004b7a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4b7c */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global_only () | void wpa_msg_global_only (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_30h_2;
| r0 = arg1;
| r1 = arg2;
0x00004b7c invalid |
0x00004b80 adds r3, 0xff | r3 += 0xff;
0x00004b82 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004b86 mov r7, r1 | r7 = r1;
0x00004b88 sub sp, 0x14 |
0x00004b8a mov r8, r0 | r8 = r0;
0x00004b8c add r4, sp, 0x30 | r4 += var_30h_2;
0x00004b8e ldr r1, [pc, 0xa0] |
0x00004b90 ldr r2, [pc, 0xa0] | r2 = *(0x4c34);
0x00004b92 ldr sb, [r4], 4 | sb = *(r4);
| r4 += 4;
0x00004b96 add r1, pc | r1 = 0x97cc;
0x00004b98 ldr r2, [r1, r2] |
0x00004b9a movs r1, 0 | r1 = 0;
0x00004b9c mov r0, r1 | r0 = r1;
0x00004b9e ldr r2, [r2] | r2 = *(0x97cc);
0x00004ba0 str r2, [sp, 0xc] | var_ch_2 = r2;
0x00004ba2 mov.w r2, 0 | r2 = 0;
0x00004ba6 movs r2, 1 | r2 = 1;
0x00004ba8 strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004bac str r4, [sp, 8] | var_8h_2 = r4;
0x00004bae blx 0x2144 | r0 = fcn_00002144 ();
0x00004bb2 adds r6, r0, 1 | r6 = r0 + 1;
0x00004bb4 mov r0, r6 | r0 = r6;
0x00004bb6 blx 0x2264 | r0 = fcn_00002264 ();
| if (r0 == 0) {
0x00004bba cbz r0, 0x4c18 | goto label_0;
| }
0x00004bbc mov r1, r6 | r1 = r6;
0x00004bbe mov.w r3, -1 | r3 = -1;
0x00004bc2 movs r2, 1 | r2 = 1;
0x00004bc4 strd r4, r4, [sp, 4] | __asm ("strd r4, r4, [sp, 4]");
0x00004bc8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00004bcc mov r5, r0 | r5 = r0;
0x00004bce blx 0x2144 | fcn_00002144 ();
0x00004bd2 ldr r1, [pc, 0x64] |
0x00004bd4 mov r2, r5 | r2 = r5;
0x00004bd6 mov r4, r0 | r4 = r0;
0x00004bd8 mov r0, r7 | r0 = r7;
0x00004bda add r1, pc | r1 = 0x9818;
0x00004bdc blx 0x2274 | vfprintf_chk ()
0x00004be0 ldr r3, [pc, 0x58] |
0x00004be2 add r3, pc | r3 = 0x9822;
0x00004be4 ldr r6, [r3] | r6 = *(0x9822);
| if (r6 != 0) {
0x00004be6 cbz r6, 0x4bf4 |
0x00004be8 mov r1, r7 | r1 = r7;
0x00004bea mov r0, r8 | r0 = r8;
0x00004bec mov r3, r5 | r3 = r5;
0x00004bee movs r2, 3 | r2 = 3;
0x00004bf0 str r4, [sp] | *(sp) = r4;
0x00004bf2 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
0x00004bf4 mov r0, r5 | r0 = r5;
0x00004bf6 blx 0x2120 | fcn_00002120 ();
| do {
0x00004bfa ldr r2, [pc, 0x44] |
0x00004bfc ldr r3, [pc, 0x34] | r3 = *(0x4c34);
0x00004bfe add r2, pc | r2 = 0x9844;
0x00004c00 ldr r3, [r2, r3] | r3 = *(0x9844);
0x00004c02 ldr r2, [r3] | r2 = *(0x9844);
0x00004c04 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00004c06 eors r2, r3 | r2 ^= r3;
0x00004c08 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004c0c bne 0x4c2a | goto label_1;
| }
0x00004c0e add sp, 0x14 |
0x00004c10 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004c14 add sp, 8 |
0x00004c16 bx lr | return;
| label_0:
0x00004c18 ldr r2, [pc, 0x28] |
0x00004c1a movs r0, 5 | r0 = 5;
0x00004c1c ldr r1, [pc, 0x28] |
0x00004c1e add r2, pc | r2 = 0x9866;
0x00004c20 add r1, pc | r1 = 0x986c;
0x00004c22 adds r2, 0x14 | r2 += 0x14;
0x00004c24 blx 0x2274 | vfprintf_chk ()
0x00004c28 b 0x4bfa |
| } while (1);
| label_1:
0x00004c2a blx 0x21a0 | fcn_000021a0 ();
0x00004c2e nop |
0x00004c30 movs r2, 0xce | r2 = 0xce;
0x00004c32 movs r0, r0 |
0x00004c34 lsls r0, r0, 6 | r0 <<= 6;
0x00004c36 movs r0, r0 |
0x00004c38 lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
0x00004c3a movs r0, r0 |
0x00004c3c movs r4, 0xb6 | r4 = 0xb6;
0x00004c3e movs r0, r0 |
0x00004c40 movs r2, 0x66 | r2 = 0x66;
0x00004c42 movs r0, r0 |
0x00004c44 lsls r6, r4, 0x1b | r6 = r4 << 0x1b;
0x00004c46 movs r0, r0 |
0x00004c48 lsls r4, r0, 0x18 | r4 = r0 << 0x18;
0x00004c4a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x486c */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_ctrl () | void wpa_msg_ctrl (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x0000486c push {r2, r3, sl, ip, sp, pc} |
0x00004870 blx lr | lr ();
0x00004872 mov sl, r1 | sl = r1;
0x00004874 sub sp, 0x10 |
0x00004876 ldr.w r8, [pc, 0x9c] |
0x0000487a ldr r1, [pc, 0x9c] |
0x0000487c ldr r2, [pc, 0x9c] | r2 = *(0x491c);
0x0000487e add r8, pc | r8 = 0x9198;
0x00004880 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x00004884 add r1, pc | r1 = 0x91a2;
0x00004886 ldr.w r3, [r8] | r3 = *(0x9198);
0x0000488a ldr r2, [r1, r2] |
0x0000488c ldr r2, [r2] | r2 = *(0x91a2);
0x0000488e str r2, [sp, 0xc] | var_ch = r2;
0x00004890 mov.w r2, 0 | r2 = 0;
| if (r3 == 0) {
0x00004894 cbz r3, 0x48e4 | goto label_0;
| }
0x00004896 movs r1, 0 | r1 = 0;
0x00004898 add r7, sp, 0x34 | r7 += var_34h;
0x0000489a mov.w r3, -1 | r3 = -1;
0x0000489e movs r2, 1 | r2 = 1;
0x000048a0 mov r6, r0 | r6 = r0;
0x000048a2 strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x000048a6 mov r0, r1 | r0 = r1;
0x000048a8 str r7, [sp, 8] | var_8h = r7;
0x000048aa blx 0x2144 | r0 = fcn_00002144 ();
0x000048ae adds r5, r0, 1 | r5 = r0 + 1;
0x000048b0 mov r0, r5 | r0 = r5;
0x000048b2 blx 0x2264 | r0 = fcn_00002264 ();
0x000048b6 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000048b8 cbz r0, 0x4906 | goto label_1;
| }
0x000048ba mov.w r3, -1 | r3 = -1;
0x000048be movs r2, 1 | r2 = 1;
0x000048c0 mov r1, r5 | r1 = r5;
0x000048c2 strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x000048c6 str r7, [sp, 8] | var_8h = r7;
0x000048c8 blx 0x2144 | fcn_00002144 ();
0x000048cc mov r1, sl | r1 = sl;
0x000048ce str r0, [sp] | *(sp) = r0;
0x000048d0 mov r3, r4 | r3 = r4;
0x000048d2 mov r0, r6 | r0 = r6;
0x000048d4 ldr.w r7, [r8] | r7 = *(r8);
0x000048d8 movs r2, 0 | r2 = 0;
0x000048da blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000048dc mov r1, r5 | r1 = r5;
0x000048de mov r0, r4 | r0 = r4;
0x000048e0 blx 0x22c0 | fcn_000022c0 ();
| do {
| label_0:
0x000048e4 ldr r2, [pc, 0x38] |
0x000048e6 ldr r3, [pc, 0x34] | r3 = *(0x491e);
0x000048e8 add r2, pc | r2 = 0x920c;
0x000048ea ldr r3, [r2, r3] | r3 = *(0x920c);
0x000048ec ldr r2, [r3] | r2 = *(0x920c);
0x000048ee ldr r3, [sp, 0xc] | r3 = var_ch;
0x000048f0 eors r2, r3 | r2 ^= r3;
0x000048f2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000048f6 bne 0x4902 |
0x000048f8 add sp, 0x10 |
0x000048fa pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000048fe add sp, 8 |
0x00004900 bx lr | return;
| }
0x00004902 blx 0x21a0 | fcn_000021a0 ();
| label_1:
0x00004906 ldr r1, [pc, 0x1c] |
0x00004908 movs r0, 5 | r0 = 5;
0x0000490a add r1, pc | r1 = 0x9234;
0x0000490c blx 0x2274 | vfprintf_chk ()
0x00004910 b 0x48e4 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4928 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global () | void wpa_msg_global (int16_t arg1, int16_t arg2) {
| int16_t var_ch_2;
| int16_t var_30h_2;
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00004928 push {r2, r3} |
0x0000492a mov.w r3, -1 | r3 = -1;
0x0000492e push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004932 mov r7, r1 | r7 = r1;
0x00004934 sub sp, 0x14 |
0x00004936 mov r8, r0 | r8 = r0;
0x00004938 add r4, sp, 0x30 | r4 += var_30h;
0x0000493a ldr r1, [pc, 0xa0] |
0x0000493c ldr r2, [pc, 0xa0] | r2 = *(0x49e0);
0x0000493e ldr sb, [r4], 4 | sb = *(r4);
| r4 += 4;
0x00004940 ldr r3, [sp, 0x10] | r3 = *((sp + 0x10));
0x00004942 add r1, pc | r1 = 0x9324;
0x00004944 ldr r2, [r1, r2] |
0x00004946 movs r1, 0 | r1 = 0;
0x00004948 mov r0, r1 | r0 = r1;
0x0000494a ldr r2, [r2] | r2 = *(0x9324);
0x0000494c str r2, [sp, 0xc] | var_ch = r2;
0x0000494e mov.w r2, 0 | r2 = 0;
0x00004952 movs r2, 1 | r2 = 1;
0x00004954 strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004958 str r4, [sp, 8] | var_8h = r4;
0x0000495a blx 0x2144 | r0 = fcn_00002144 ();
0x0000495e adds r6, r0, 1 | r6 = r0 + 1;
0x00004960 mov r0, r6 | r0 = r6;
0x00004962 blx 0x2264 | r0 = fcn_00002264 ();
| if (r0 == 0) {
0x00004966 cbz r0, 0x49ca | goto label_0;
| }
0x00004968 mov.w r3, -1 | r3 = -1;
0x0000496c strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004970 movs r2, 1 | r2 = 1;
0x00004972 mov r1, r6 | r1 = r6;
0x00004974 mov r5, r0 | r5 = r0;
0x00004976 str r4, [sp, 8] | var_8h = r4;
0x00004978 blx 0x2144 | fcn_00002144 ();
0x0000497c ldr r1, [pc, 0x64] |
0x0000497e mov r4, r0 | r4 = r0;
0x00004980 mov r2, r5 | r2 = r5;
0x00004982 mov r0, r7 | r0 = r7;
0x00004984 add r1, pc | r1 = 0x936c;
0x00004986 blx 0x2274 | vfprintf_chk ()
0x0000498a ldr r3, [pc, 0x5c] |
0x0000498c add r3, pc | r3 = 0x937a;
0x0000498e ldr.w sb, [r3] | sb = *(0x937a);
0x00004992 cmp.w sb, 0 |
| if (sb != 0) {
0x00004996 beq 0x49a4 |
0x00004998 mov r1, r7 | r1 = r7;
0x0000499a mov r0, r8 | r0 = r8;
0x0000499c mov r3, r5 | r3 = r5;
0x0000499e movs r2, 1 | r2 = 1;
0x000049a0 str r4, [sp] | *(sp) = r4;
0x000049a2 blx sb | sb (r0, r1, r2, r3);
| }
0x000049a4 mov r1, r6 | r1 = r6;
0x000049a6 mov r0, r5 | r0 = r5;
0x000049a8 blx 0x22c0 | fcn_000022c0 ();
| do {
0x000049ac ldr r2, [pc, 0x3c] |
0x000049ae ldr r3, [pc, 0x30] | r3 = *(0x49e2);
0x000049b0 add r2, pc | r2 = 0x93a0;
0x000049b2 ldr r3, [r2, r3] | r3 = *(0x93a0);
0x000049b4 ldr r2, [r3] | r2 = *(0x93a0);
0x000049b6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000049b8 eors r2, r3 | r2 ^= r3;
0x000049ba mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000049be bne 0x49d6 | goto label_1;
| }
0x000049c0 add sp, 0x14 |
0x000049c2 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000049c6 add sp, 8 |
0x000049c8 bx lr | return;
| label_0:
0x000049ca ldr r1, [pc, 0x24] |
0x000049cc movs r0, 5 | r0 = 5;
0x000049ce add r1, pc | r1 = 0x93c4;
0x000049d0 blx 0x2274 | vfprintf_chk ()
0x000049d4 b 0x49ac |
| } while (1);
| label_1:
0x000049d6 blx 0x21a0 | fcn_000021a0 ();
0x000049da nop |
0x000049dc movs r5, 0x22 | r5 = 0x22;
0x000049de movs r0, r0 |
0x000049e0 lsls r0, r0, 6 | r0 <<= 6;
0x000049e2 movs r0, r0 |
0x000049e4 lsrs r0, r6, 4 | r0 = r6 >> 4;
0x000049e6 movs r0, r0 |
0x000049e8 movs r7, 0xc | r7 = 0xc;
0x000049ea movs r0, r0 |
0x000049ec movs r4, 0xb4 | r4 = 0xb4;
0x000049ee movs r0, r0 |
0x000049f0 lsls r2, r6, 0x1e | r2 = r6 << 0x1e;
0x000049f2 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x49f4 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global_ctrl () | void wpa_msg_global_ctrl (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x000049f4 push {r2, r3, sl, ip, sp, pc} |
0x000049f8 blx lr | lr ();
0x000049fa mov sl, r1 | sl = r1;
0x000049fc sub sp, 0x10 |
0x000049fe ldr.w r8, [pc, 0x9c] |
0x00004a02 ldr r1, [pc, 0x9c] |
0x00004a04 ldr r2, [pc, 0x9c] | r2 = *(0x4aa4);
0x00004a06 add r8, pc | r8 = 0x94a8;
0x00004a08 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x00004a0c add r1, pc | r1 = 0x94b2;
0x00004a0e ldr.w r3, [r8] | r3 = *(0x94a8);
0x00004a12 ldr r2, [r1, r2] |
0x00004a14 ldr r2, [r2] | r2 = *(0x94b2);
0x00004a16 str r2, [sp, 0xc] | var_ch = r2;
0x00004a18 mov.w r2, 0 | r2 = 0;
| if (r3 == 0) {
0x00004a1c cbz r3, 0x4a6c | goto label_0;
| }
0x00004a1e movs r1, 0 | r1 = 0;
0x00004a20 add r7, sp, 0x34 | r7 += var_34h;
0x00004a22 mov.w r3, -1 | r3 = -1;
0x00004a26 movs r2, 1 | r2 = 1;
0x00004a28 mov r6, r0 | r6 = r0;
0x00004a2a strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x00004a2e mov r0, r1 | r0 = r1;
0x00004a30 str r7, [sp, 8] | var_8h = r7;
0x00004a32 blx 0x2144 | r0 = fcn_00002144 ();
0x00004a36 adds r5, r0, 1 | r5 = r0 + 1;
0x00004a38 mov r0, r5 | r0 = r5;
0x00004a3a blx 0x2264 | r0 = fcn_00002264 ();
0x00004a3e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00004a40 cbz r0, 0x4a8e | goto label_1;
| }
0x00004a42 mov.w r3, -1 | r3 = -1;
0x00004a46 movs r2, 1 | r2 = 1;
0x00004a48 mov r1, r5 | r1 = r5;
0x00004a4a strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x00004a4e str r7, [sp, 8] | var_8h = r7;
0x00004a50 blx 0x2144 | fcn_00002144 ();
0x00004a54 mov r1, sl | r1 = sl;
0x00004a56 str r0, [sp] | *(sp) = r0;
0x00004a58 mov r3, r4 | r3 = r4;
0x00004a5a mov r0, r6 | r0 = r6;
0x00004a5c ldr.w r7, [r8] | r7 = *(r8);
0x00004a60 movs r2, 1 | r2 = 1;
0x00004a62 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00004a64 mov r1, r5 | r1 = r5;
0x00004a66 mov r0, r4 | r0 = r4;
0x00004a68 blx 0x22c0 | fcn_000022c0 ();
0x00004a6a invalid |
| do {
| label_0:
0x00004a6c ldr r2, [pc, 0x38] |
0x00004a6e ldr r3, [pc, 0x34] | r3 = *(0x4aa6);
0x00004a70 add r2, pc | r2 = 0x951c;
0x00004a72 ldr r3, [r2, r3] | r3 = *(0x951c);
0x00004a74 ldr r2, [r3] | r2 = *(0x951c);
0x00004a76 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00004a78 eors r2, r3 | r2 ^= r3;
0x00004a7a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00004a7e bne 0x4a8a |
0x00004a80 add sp, 0x10 |
0x00004a82 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00004a86 add sp, 8 |
0x00004a88 bx lr | return;
| }
0x00004a8a blx 0x21a0 | fcn_000021a0 ();
| label_1:
0x00004a8e ldr r1, [pc, 0x1c] |
0x00004a90 movs r0, 5 | r0 = 5;
0x00004a92 add r1, pc | r1 = 0x9544;
0x00004a94 blx 0x2274 | vfprintf_chk ()
0x00004a98 b 0x4a6c |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4b7c */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global_only () | void wpa_msg_global_only (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_30h_2;
| r0 = arg1;
| r1 = arg2;
0x00004b7c push {r2, r3} |
0x00004b7e mov.w r3, -1 | r3 = -1;
0x00004b82 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004b86 mov r7, r1 | r7 = r1;
0x00004b88 sub sp, 0x14 |
0x00004b8a mov r8, r0 | r8 = r0;
0x00004b8c add r4, sp, 0x30 | r4 += var_30h_2;
0x00004b8e ldr r1, [pc, 0xa0] |
0x00004b90 ldr r2, [pc, 0xa0] | r2 = *(0x4c34);
0x00004b92 ldr sb, [r4], 4 | sb = *(r4);
| r4 += 4;
0x00004b96 add r1, pc | r1 = 0x97cc;
0x00004b98 ldr r2, [r1, r2] |
0x00004b9a movs r1, 0 | r1 = 0;
0x00004b9c mov r0, r1 | r0 = r1;
0x00004b9e ldr r2, [r2] | r2 = *(0x97cc);
0x00004ba0 str r2, [sp, 0xc] | var_ch_2 = r2;
0x00004ba2 mov.w r2, 0 | r2 = 0;
0x00004ba6 movs r2, 1 | r2 = 1;
0x00004ba8 strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004bac str r4, [sp, 8] | var_8h_2 = r4;
0x00004bae blx 0x2144 | r0 = fcn_00002144 ();
0x00004bb2 adds r6, r0, 1 | r6 = r0 + 1;
0x00004bb4 mov r0, r6 | r0 = r6;
0x00004bb6 blx 0x2264 | r0 = fcn_00002264 ();
| if (r0 == 0) {
0x00004bba cbz r0, 0x4c18 | goto label_0;
| }
0x00004bbc mov r1, r6 | r1 = r6;
0x00004bbe mov.w r3, -1 | r3 = -1;
0x00004bc2 movs r2, 1 | r2 = 1;
0x00004bc4 strd r4, r4, [sp, 4] | __asm ("strd r4, r4, [sp, 4]");
0x00004bc8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00004bcc mov r5, r0 | r5 = r0;
0x00004bce blx 0x2144 | fcn_00002144 ();
0x00004bd2 ldr r1, [pc, 0x64] |
0x00004bd4 mov r2, r5 | r2 = r5;
0x00004bd6 mov r4, r0 | r4 = r0;
0x00004bd8 mov r0, r7 | r0 = r7;
0x00004bda add r1, pc | r1 = 0x9818;
0x00004bdc blx 0x2274 | vfprintf_chk ()
0x00004be0 ldr r3, [pc, 0x58] |
0x00004be2 add r3, pc | r3 = 0x9822;
0x00004be4 ldr r6, [r3] | r6 = *(0x9822);
| if (r6 != 0) {
0x00004be6 cbz r6, 0x4bf4 |
0x00004be8 mov r1, r7 | r1 = r7;
0x00004bea mov r0, r8 | r0 = r8;
0x00004bec mov r3, r5 | r3 = r5;
0x00004bee movs r2, 3 | r2 = 3;
0x00004bf0 str r4, [sp] | *(sp) = r4;
0x00004bf2 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
0x00004bf4 mov r0, r5 | r0 = r5;
0x00004bf6 blx 0x2120 | fcn_00002120 ();
| do {
0x00004bfa ldr r2, [pc, 0x44] |
0x00004bfc ldr r3, [pc, 0x34] | r3 = *(0x4c34);
0x00004bfe add r2, pc | r2 = 0x9844;
0x00004c00 ldr r3, [r2, r3] | r3 = *(0x9844);
0x00004c02 ldr r2, [r3] | r2 = *(0x9844);
0x00004c04 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00004c06 eors r2, r3 | r2 ^= r3;
0x00004c08 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004c0c bne 0x4c2a | goto label_1;
| }
0x00004c0e add sp, 0x14 |
0x00004c10 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004c14 add sp, 8 |
0x00004c16 bx lr | return;
| label_0:
0x00004c18 ldr r2, [pc, 0x28] |
0x00004c1a movs r0, 5 | r0 = 5;
0x00004c1c ldr r1, [pc, 0x28] |
0x00004c1e add r2, pc | r2 = 0x9866;
0x00004c20 add r1, pc | r1 = 0x986c;
0x00004c22 adds r2, 0x14 | r2 += 0x14;
0x00004c24 blx 0x2274 | vfprintf_chk ()
0x00004c28 b 0x4bfa |
| } while (1);
| label_1:
0x00004c2a blx 0x21a0 | fcn_000021a0 ();
0x00004c2e nop |
0x00004c30 movs r2, 0xce | r2 = 0xce;
0x00004c32 movs r0, r0 |
0x00004c34 lsls r0, r0, 6 | r0 <<= 6;
0x00004c36 movs r0, r0 |
0x00004c38 lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
0x00004c3a movs r0, r0 |
0x00004c3c movs r4, 0xb6 | r4 = 0xb6;
0x00004c3e movs r0, r0 |
0x00004c40 movs r2, 0x66 | r2 = 0x66;
0x00004c42 movs r0, r0 |
0x00004c44 lsls r6, r4, 0x1b | r6 = r4 << 0x1b;
0x00004c46 movs r0, r0 |
0x00004c48 lsls r4, r0, 0x18 | r4 = r0 << 0x18;
0x00004c4a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x49f4 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global_ctrl () | void wpa_msg_global_ctrl (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x000049f4 push {r2, r3, sl, ip, sp, pc} |
0x000049f8 blx lr | lr ();
0x000049fa mov sl, r1 | sl = r1;
0x000049fc sub sp, 0x10 |
0x000049fe ldr.w r8, [pc, 0x9c] |
0x00004a02 ldr r1, [pc, 0x9c] |
0x00004a04 ldr r2, [pc, 0x9c] | r2 = *(0x4aa4);
0x00004a06 add r8, pc | r8 = 0x94a8;
0x00004a08 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x00004a0c add r1, pc | r1 = 0x94b2;
0x00004a0e ldr.w r3, [r8] | r3 = *(0x94a8);
0x00004a12 ldr r2, [r1, r2] |
0x00004a14 ldr r2, [r2] | r2 = *(0x94b2);
0x00004a16 str r2, [sp, 0xc] | var_ch = r2;
0x00004a18 mov.w r2, 0 | r2 = 0;
| if (r3 == 0) {
0x00004a1c cbz r3, 0x4a6c | goto label_0;
| }
0x00004a1e movs r1, 0 | r1 = 0;
0x00004a20 add r7, sp, 0x34 | r7 += var_34h;
0x00004a22 mov.w r3, -1 | r3 = -1;
0x00004a26 movs r2, 1 | r2 = 1;
0x00004a28 mov r6, r0 | r6 = r0;
0x00004a2a strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x00004a2e mov r0, r1 | r0 = r1;
0x00004a30 str r7, [sp, 8] | var_8h = r7;
0x00004a32 blx 0x2144 | r0 = fcn_00002144 ();
0x00004a36 adds r5, r0, 1 | r5 = r0 + 1;
0x00004a38 mov r0, r5 | r0 = r5;
0x00004a3a blx 0x2264 | r0 = fcn_00002264 ();
0x00004a3e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00004a40 cbz r0, 0x4a8e | goto label_1;
| }
0x00004a42 mov.w r3, -1 | r3 = -1;
0x00004a46 movs r2, 1 | r2 = 1;
0x00004a48 mov r1, r5 | r1 = r5;
0x00004a4a strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x00004a4e str r7, [sp, 8] | var_8h = r7;
0x00004a50 blx 0x2144 | fcn_00002144 ();
0x00004a54 mov r1, sl | r1 = sl;
0x00004a56 str r0, [sp] | *(sp) = r0;
0x00004a58 mov r3, r4 | r3 = r4;
0x00004a5a mov r0, r6 | r0 = r6;
0x00004a5c ldr.w r7, [r8] | r7 = *(r8);
0x00004a60 movs r2, 1 | r2 = 1;
0x00004a62 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00004a64 mov r1, r5 | r1 = r5;
0x00004a66 mov r0, r4 | r0 = r4;
0x00004a68 blx 0x22c0 | fcn_000022c0 ();
0x00004a6a invalid |
| do {
| label_0:
0x00004a6c ldr r2, [pc, 0x38] |
0x00004a6e ldr r3, [pc, 0x34] | r3 = *(0x4aa6);
0x00004a70 add r2, pc | r2 = 0x951c;
0x00004a72 ldr r3, [r2, r3] | r3 = *(0x951c);
0x00004a74 ldr r2, [r3] | r2 = *(0x951c);
0x00004a76 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00004a78 eors r2, r3 | r2 ^= r3;
0x00004a7a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00004a7e bne 0x4a8a |
0x00004a80 add sp, 0x10 |
0x00004a82 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00004a86 add sp, 8 |
0x00004a88 bx lr | return;
| }
0x00004a8a blx 0x21a0 | fcn_000021a0 ();
| label_1:
0x00004a8e ldr r1, [pc, 0x1c] |
0x00004a90 movs r0, 5 | r0 = 5;
0x00004a92 add r1, pc | r1 = 0x9544;
0x00004a94 blx 0x2274 | vfprintf_chk ()
0x00004a98 b 0x4a6c |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4b7c */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_global_only () | void wpa_msg_global_only (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_30h_2;
| r0 = arg1;
| r1 = arg2;
0x00004b7c push {r2, r3} |
0x00004b7e mov.w r3, -1 | r3 = -1;
0x00004b82 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004b86 mov r7, r1 | r7 = r1;
0x00004b88 sub sp, 0x14 |
0x00004b8a mov r8, r0 | r8 = r0;
0x00004b8c add r4, sp, 0x30 | r4 += var_30h_2;
0x00004b8e ldr r1, [pc, 0xa0] |
0x00004b90 ldr r2, [pc, 0xa0] | r2 = *(0x4c34);
0x00004b92 ldr sb, [r4], 4 | sb = *(r4);
| r4 += 4;
0x00004b96 add r1, pc | r1 = 0x97cc;
0x00004b98 ldr r2, [r1, r2] |
0x00004b9a movs r1, 0 | r1 = 0;
0x00004b9c mov r0, r1 | r0 = r1;
0x00004b9e ldr r2, [r2] | r2 = *(0x97cc);
0x00004ba0 str r2, [sp, 0xc] | var_ch_2 = r2;
0x00004ba2 mov.w r2, 0 | r2 = 0;
0x00004ba6 movs r2, 1 | r2 = 1;
0x00004ba8 strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004bac str r4, [sp, 8] | var_8h_2 = r4;
0x00004bae blx 0x2144 | r0 = fcn_00002144 ();
0x00004bb2 adds r6, r0, 1 | r6 = r0 + 1;
0x00004bb4 mov r0, r6 | r0 = r6;
0x00004bb6 blx 0x2264 | r0 = fcn_00002264 ();
| if (r0 == 0) {
0x00004bba cbz r0, 0x4c18 | goto label_0;
| }
0x00004bbc mov r1, r6 | r1 = r6;
0x00004bbe mov.w r3, -1 | r3 = -1;
0x00004bc2 movs r2, 1 | r2 = 1;
0x00004bc4 strd r4, r4, [sp, 4] | __asm ("strd r4, r4, [sp, 4]");
0x00004bc8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00004bcc mov r5, r0 | r5 = r0;
0x00004bce blx 0x2144 | fcn_00002144 ();
0x00004bd2 ldr r1, [pc, 0x64] |
0x00004bd4 mov r2, r5 | r2 = r5;
0x00004bd6 mov r4, r0 | r4 = r0;
0x00004bd8 mov r0, r7 | r0 = r7;
0x00004bda add r1, pc | r1 = 0x9818;
0x00004bdc blx 0x2274 | vfprintf_chk ()
0x00004be0 ldr r3, [pc, 0x58] |
0x00004be2 add r3, pc | r3 = 0x9822;
0x00004be4 ldr r6, [r3] | r6 = *(0x9822);
| if (r6 != 0) {
0x00004be6 cbz r6, 0x4bf4 |
0x00004be8 mov r1, r7 | r1 = r7;
0x00004bea mov r0, r8 | r0 = r8;
0x00004bec mov r3, r5 | r3 = r5;
0x00004bee movs r2, 3 | r2 = 3;
0x00004bf0 str r4, [sp] | *(sp) = r4;
0x00004bf2 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
0x00004bf4 mov r0, r5 | r0 = r5;
0x00004bf6 blx 0x2120 | fcn_00002120 ();
| do {
0x00004bfa ldr r2, [pc, 0x44] |
0x00004bfc ldr r3, [pc, 0x34] | r3 = *(0x4c34);
0x00004bfe add r2, pc | r2 = 0x9844;
0x00004c00 ldr r3, [r2, r3] | r3 = *(0x9844);
0x00004c02 ldr r2, [r3] | r2 = *(0x9844);
0x00004c04 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00004c06 eors r2, r3 | r2 ^= r3;
0x00004c08 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004c0c bne 0x4c2a | goto label_1;
| }
0x00004c0e add sp, 0x14 |
0x00004c10 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004c14 add sp, 8 |
0x00004c16 bx lr | return;
| label_0:
0x00004c18 ldr r2, [pc, 0x28] |
0x00004c1a movs r0, 5 | r0 = 5;
0x00004c1c ldr r1, [pc, 0x28] |
0x00004c1e add r2, pc | r2 = 0x9866;
0x00004c20 add r1, pc | r1 = 0x986c;
0x00004c22 adds r2, 0x14 | r2 += 0x14;
0x00004c24 blx 0x2274 | vfprintf_chk ()
0x00004c28 b 0x4bfa |
| } while (1);
| label_1:
0x00004c2a blx 0x21a0 | fcn_000021a0 ();
0x00004c2e nop |
0x00004c30 movs r2, 0xce | r2 = 0xce;
0x00004c32 movs r0, r0 |
0x00004c34 lsls r0, r0, 6 | r0 <<= 6;
0x00004c36 movs r0, r0 |
0x00004c38 lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
0x00004c3a movs r0, r0 |
0x00004c3c movs r4, 0xb6 | r4 = 0xb6;
0x00004c3e movs r0, r0 |
0x00004c40 movs r2, 0x66 | r2 = 0x66;
0x00004c42 movs r0, r0 |
0x00004c44 lsls r6, r4, 0x1b | r6 = r4 << 0x1b;
0x00004c46 movs r0, r0 |
0x00004c48 lsls r4, r0, 0x18 | r4 = r0 << 0x18;
0x00004c4a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libwpa_client.so @ 0x4ab0 */
| #include <stdint.h>
|
; (fcn) sym.wpa_msg_no_global () | void wpa_msg_no_global (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int32_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00004ab0 invalid |
0x00004ab4 adds r3, 0xff | r3 += 0xff;
0x00004ab6 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004aba mov r7, r1 | r7 = r1;
0x00004abc sub sp, 0x14 |
0x00004abe mov r8, r0 | r8 = r0;
0x00004ac0 add r4, sp, 0x30 | r4 += var_30h;
0x00004ac2 ldr r1, [pc, 0xa0] |
0x00004ac4 ldr r2, [pc, 0xa0] | r2 = *(0x4b68);
0x00004ac6 ldr sb, [r4], 4 | sb = *(r4);
| r4 += 4;
0x00004ac8 ldr r3, [sp, 0x10] | r3 = *((sp + 0x10));
0x00004aca add r1, pc | r1 = 0x9634;
0x00004acc ldr r2, [r1, r2] |
0x00004ace movs r1, 0 | r1 = 0;
0x00004ad0 mov r0, r1 | r0 = r1;
0x00004ad2 ldr r2, [r2] | r2 = *(0x9634);
0x00004ad4 str r2, [sp, 0xc] | var_ch = r2;
0x00004ad6 mov.w r2, 0 | r2 = 0;
0x00004ada movs r2, 1 | r2 = 1;
0x00004adc strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004ae0 str r4, [sp, 8] | var_8h = r4;
0x00004ae2 blx 0x2144 | r0 = fcn_00002144 ();
0x00004ae6 adds r6, r0, 1 | r6 = r0 + 1;
0x00004ae8 mov r0, r6 | r0 = r6;
0x00004aea blx 0x2264 | r0 = fcn_00002264 ();
| if (r0 == 0) {
0x00004aee cbz r0, 0x4b52 | goto label_0;
| }
0x00004af0 mov.w r3, -1 | r3 = -1;
0x00004af4 strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00004af8 movs r2, 1 | r2 = 1;
0x00004afa mov r1, r6 | r1 = r6;
0x00004afc mov r5, r0 | r5 = r0;
0x00004afe str r4, [sp, 8] | var_8h = r4;
0x00004b00 blx 0x2144 | fcn_00002144 ();
0x00004b04 ldr r1, [pc, 0x64] |
0x00004b06 mov r4, r0 | r4 = r0;
0x00004b08 mov r2, r5 | r2 = r5;
0x00004b0a mov r0, r7 | r0 = r7;
0x00004b0c add r1, pc | r1 = 0x967c;
0x00004b0e blx 0x2274 | vfprintf_chk ()
0x00004b12 ldr r3, [pc, 0x5c] |
0x00004b14 add r3, pc | r3 = 0x968a;
0x00004b16 ldr.w sb, [r3] | sb = *(0x968a);
0x00004b1a cmp.w sb, 0 |
| if (sb != 0) {
0x00004b1e beq 0x4b2c |
0x00004b20 mov r1, r7 | r1 = r7;
0x00004b22 mov r0, r8 | r0 = r8;
0x00004b24 mov r3, r5 | r3 = r5;
0x00004b26 movs r2, 2 | r2 = 2;
0x00004b28 str r4, [sp] | *(sp) = r4;
0x00004b2a blx sb | sb (r0, r1, r2, r3);
| }
0x00004b2c mov r1, r6 | r1 = r6;
0x00004b2e mov r0, r5 | r0 = r5;
0x00004b30 blx 0x22c0 | fcn_000022c0 ();
| do {
0x00004b34 ldr r2, [pc, 0x3c] |
0x00004b36 ldr r3, [pc, 0x30] | r3 = *(0x4b6a);
0x00004b38 add r2, pc | r2 = 0x96b0;
0x00004b3a ldr r3, [r2, r3] | r3 = *(0x96b0);
0x00004b3c ldr r2, [r3] | r2 = *(0x96b0);
0x00004b3e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00004b40 eors r2, r3 | r2 ^= r3;
0x00004b42 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004b46 bne 0x4b5e | goto label_1;
| }
0x00004b48 add sp, 0x14 |
0x00004b4a pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00004b4e add sp, 8 |
0x00004b50 bx lr | return;
| label_0:
0x00004b52 ldr r1, [pc, 0x24] |
0x00004b54 movs r0, 5 | r0 = 5;
0x00004b56 add r1, pc | r1 = 0x96d4;
0x00004b58 blx 0x2274 | vfprintf_chk ()
0x00004b5c b 0x4b34 |
| } while (1);
| label_1:
0x00004b5e blx 0x21a0 | fcn_000021a0 ();
0x00004b62 nop |
0x00004b64 movs r3, 0x9a | r3 = 0x9a;
0x00004b66 movs r0, r0 |
0x00004b68 lsls r0, r0, 6 | r0 <<= 6;
0x00004b6a movs r0, r0 |
0x00004b6c lsls r0, r5, 0x1e | r0 = r5 << 0x1e;
0x00004b6e movs r0, r0 |
0x00004b70 movs r5, 0x84 | r5 = 0x84;
0x00004b72 movs r0, r0 |
0x00004b74 movs r3, 0x2c | r3 = 0x2c;
0x00004b76 movs r0, r0 |
0x00004b78 lsls r6, r2, 0x1a | r6 = r2 << 0x1a;
0x00004b7a movs r0, r0 |
| }
[*] Function fprintf used 25 times libwpa_client.so