[*] Binary protection state of libevent-2.1.so.6.0.2
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function system tear down of libevent-2.1.so.6.0.2
; 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/lib/libevent-2.1.so.6.0.2 @ 0xba60 */
| #include <stdint.h>
|
; (fcn) entry.fini0 () | void entry_fini0 () {
0x0000ba60 ldr r3, [pc, 0x68] | r3 = *(0xbacc);
0x0000ba64 push {r4, lr} |
0x0000ba68 ldr r4, [pc, 0x64] | r4 = *(0xbad0);
0x0000ba6c add r3, pc, r3 | r3 = pc + r3;
0x0000ba70 ldrb r3, [r3] | r3 = *(r3);
0x0000ba74 add r4, pc, r4 | r4 = pc + r4;
0x0000ba78 cmp r3, 0 |
0x0000ba7c popne {r4, pc} |
0x0000ba80 ldr r3, [pc, 0x50] | r3 = *(0xbad4);
0x0000ba84 ldr r3, [r4, r3] | r3 = *(0xbad0);
0x0000ba88 cmp r3, 0 |
| if (r3 != 0) {
0x0000ba8c beq 0xba9c |
0x0000ba90 ldr r3, [pc, 0x44] | r3 = *(0xbad8);
0x0000ba94 ldr r0, [pc, r3] | r0 = *(0x0000ba9c);
0x0000ba98 bl 0xab34 | cxa_finalize ();
| }
0x0000ba9c bl 0xb9a4 | entry0 ();
0x0000baa0 ldr r3, [pc, 0x38] | r3 = *(0xbadc);
0x0000baa4 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0000baa8 cmp r3, 0 |
| if (r3 != 0) {
0x0000baac beq 0xbabc |
0x0000bab0 ldr r0, [pc, 0x2c] | r0 = *(0xbae0);
0x0000bab4 add r0, pc, r0 | r0 = pc + r0;
0x0000bab8 bl 0xb980 | loc_imp_deregister_frame_info ();
| }
0x0000babc ldr r3, [pc, 0x24] | r3 = *(0xbae4);
0x0000bac0 mov r2, 1 | r2 = 1;
0x0000bac4 add r3, pc, r3 | r3 = pc + r3;
0x0000bac8 strb r2, [r3] | *(r3) = r2;
0x0000bacc pop {r4, pc} |
| }
; 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/lib/libevent-2.1.so.6.0.2 @ 0xdbb0 */
| #include <stdint.h>
|
; (fcn) sym.evbuffer_peek () | void evbuffer_peek (int32_t arg_20h, int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0000dbb0 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000dbb4 ldr sb, [pc, 0x140] | sb = *(0x0000dcfc);
0x0000dbb8 subs r5, r2, 0 | r5 = r2 - 0;
0x0000dbbc add sb, pc, sb | sb = pc + sb;
0x0000dbc0 mov r7, r0 | r7 = r0;
0x0000dbc4 mov r6, r1 | r6 = r1;
0x0000dbc8 mov r8, r3 | r8 = r3;
0x0000dbcc ldr sl, [sp, 0x20] | sl = *(arg_20h);
| if (r5 != r2) {
0x0000dbd0 beq 0xdbe0 |
0x0000dbd4 ldr r4, [r5, 4] | r4 = *((r5 + 4));
0x0000dbd8 cmp r4, 0 |
| if (r4 == 0) {
0x0000dbdc beq 0xdcd0 | goto label_2;
| }
| }
0x0000dbe0 ldr r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0000dbe4 cmp r1, 0 |
| if (r1 != 0) {
0x0000dbe8 beq 0xdc00 |
0x0000dbec ldr r3, [pc, 0x10c] |
0x0000dbf0 mov r0, 0 | r0 = 0;
0x0000dbf4 ldr r3, [sb, r3] | r3 = *((sb + r3));
0x0000dbf8 ldr r3, [r3, 0x10] | r3 = *(0xdd0c);
0x0000dbfc blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x0000dc00 cmp r5, 0 |
| if (r5 != 0) {
0x0000dc04 ldreq r1, [r7] | r1 = *(r7);
| }
| if (r5 != 0) {
0x0000dc08 moveq r2, r5 | r2 = r5;
| }
| if (r5 != 0) {
0x0000dc0c moveq r4, r5 | r4 = r5;
| }
| if (r5 != 0) {
0x0000dc10 beq 0xdc44 |
0x0000dc14 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0000dc18 cmp sl, 0 |
0x0000dc1c ldr r1, [r5, 8] | r1 = *((r5 + 8));
| if (sl <= 0) {
0x0000dc20 ldrgt r0, [r3, 8] | r0 = *((r3 + 8));
| }
0x0000dc24 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0000dc28 mov r4, 1 | r4 = 1;
0x0000dc2c sub r2, r2, r1 | r2 -= r1;
| if (sl <= 0) {
0x0000dc30 addgt r1, r1, r0 | r1 += r0;
| }
| if (sl <= 0) {
0x0000dc34 ldrgt r0, [r3, 0x1c] | r0 = *((r3 + 0x1c));
| }
| if (sl <= 0) {
0x0000dc38 addgt r1, r0, r1 | r1 = r0 + r1;
| }
| if (sl <= 0) {
0x0000dc3c stmgt r8, {r1, r2} | *(r8) = r1;
| *((r8 + 4)) = r2;
| }
0x0000dc40 ldr r1, [r3] | r1 = *(r3);
| }
0x0000dc44 cmp sl, 0 |
| if (sl != 0) {
0x0000dc48 lsreq r3, r6, 0x1f | r3 = r6 >> 0x1f;
| }
| if (sl == 0) {
0x0000dc4c movne r3, 0 | r3 = 0;
| }
0x0000dc50 cmp r3, 0 |
| if (r3 != 0) {
0x0000dc54 beq 0xdc68 |
0x0000dc58 cmp r5, 0 |
0x0000dc5c ldr r6, [r7, 0xc] | r6 = *((r7 + 0xc));
| if (r5 == 0) {
0x0000dc60 ldrne r3, [r5] | r3 = *(r5);
| }
| if (r5 != 0) {
0x0000dc64 subne r6, r6, r3 | r6 -= r3;
| goto label_3;
| }
| }
| label_3:
0x0000dc68 mvn r0, r6 | r0 = ~r6;
0x0000dc6c lsr r0, r0, 0x1f | r0 >>= 0x1f;
0x0000dc70 b 0xdca8 |
| while (r3 == 0) {
0x0000dc74 cmp r4, sl |
| if (r4 >= sl) {
0x0000dc78 bge 0xdcd8 | goto label_4;
| }
0x0000dc7c ldr ip, [r1, 8] | ip = *((r1 + 8));
0x0000dc80 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x0000dc84 add r3, r3, ip | r3 += ip;
0x0000dc88 str r3, [r8, r4, lsl 3] | offset_0 = r4 << 3;
| *((r8 + offset_0)) = r3;
0x0000dc8c ldr ip, [r1, 0x10] | ip = *((r1 + 0x10));
0x0000dc90 add r3, r8, r4, lsl 3 | r3 = r8 + (r4 << 3);
0x0000dc94 str ip, [r3, 4] | *((r3 + 4)) = ip;
| label_0:
0x0000dc98 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x0000dc9c ldr r1, [r1] | r1 = *(r1);
0x0000dca0 add r4, r4, 1 | r4++;
0x0000dca4 add r2, r2, r3 | r2 += r3;
0x0000dca8 cmp r1, 0 |
| if (r1 == 0) {
0x0000dcac beq 0xdcc4 | goto label_1;
| }
0x0000dcb0 cmp r2, r6 |
| if (r2 >= r6) {
0x0000dcb4 movlt r3, 0 | r3 = 0;
| }
| if (r2 < r6) {
0x0000dcb8 andge r3, r0, 1 | r3 = r0 & 1;
| }
0x0000dcbc cmp r3, 0 |
0x0000dcc0 beq 0xdc74 |
| }
| label_1:
0x0000dcc4 ldr r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0000dcc8 cmp r1, 0 |
| if (r1 != 0) {
0x0000dccc bne 0xdce4 | goto label_5;
| }
| label_2:
0x0000dcd0 mov r0, r4 | r0 = r4;
0x0000dcd4 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_4:
0x0000dcd8 cmp r6, 0 |
| if (r6 >= 0) {
0x0000dcdc bge 0xdc98 | goto label_0;
| }
0x0000dce0 b 0xdcc4 | goto label_1;
| label_5:
0x0000dce4 ldr r3, [pc, 0x14] |
0x0000dce8 mov r0, 0 | r0 = 0;
0x0000dcec ldr r3, [sb, r3] | r3 = *((sb + r3));
0x0000dcf0 ldr r3, [r3, 0x14] | r3 = *(0xdd10);
0x0000dcf4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000dcf8 b 0xdcd0 | goto label_2;
| }
; 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/lib/libevent-2.1.so.6.0.2 @ 0xf044 */
| #include <stdint.h>
|
; (fcn) sym.evbuffer_remove_buffer () | void evbuffer_remove_buffer (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x0000f044 push {r0, r1, r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000f048 ldr r5, [r0, 0x18] | r5 = *((r0 + 0x18));
0x0000f04c ldr r4, [r1, 0x18] | r4 = *((r1 + 0x18));
0x0000f050 ldr r8, [pc, 0x29c] | r8 = *(0xf2f0);
0x0000f054 cmp r5, 0 |
0x0000f058 cmpne r4, 0 | __asm ("cmpne r4, 0");
0x0000f05c add r8, pc, r8 | r8 = pc + r8;
0x0000f060 mov r6, r0 | r6 = r0;
0x0000f064 mov r7, r1 | r7 = r1;
0x0000f068 mov sb, r2 | sb = r2;
| if (r5 == 0) {
0x0000f06c beq 0xf094 | goto label_5;
| }
0x0000f070 cmp r5, r4 |
| if (r5 > r4) {
0x0000f074 bhi 0xf2c4 | goto label_6;
| }
| do {
| label_2:
0x0000f078 ldr r3, [pc, 0x278] |
0x0000f07c mov r1, r5 | r1 = r5;
0x0000f080 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x0000f084 mov r0, 0 | r0 = 0;
0x0000f088 ldr r3, [r3, 0x10] | r3 = *(0xf304);
0x0000f08c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000f090 b 0xf09c | goto label_7;
| label_5:
0x0000f094 cmp r5, 0 |
0x0000f098 bne 0xf078 |
| } while (r5 != 0);
| label_7:
0x0000f09c mov r3, r5 | r3 = r5;
0x0000f0a0 cmp r4, 0 |
0x0000f0a4 cmpne r3, r4 | __asm ("cmpne r3, r4");
0x0000f0a8 mov r5, r4 | r5 = r4;
| if (r4 != 0) {
0x0000f0ac beq 0xf0c8 |
| label_3:
0x0000f0b0 ldr r3, [pc, 0x240] |
0x0000f0b4 mov r1, r5 | r1 = r5;
0x0000f0b8 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x0000f0bc mov r0, 0 | r0 = 0;
0x0000f0c0 ldr r3, [r3, 0x10] | r3 = *(0xf304);
0x0000f0c4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| }
0x0000f0c8 cmp r6, r7 |
0x0000f0cc cmpne sb, 0 | __asm ("cmpne sb, 0");
| if (r6 == r7) {
0x0000f0d0 beq 0xf278 | goto label_8;
| }
0x0000f0d4 ldrb r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0000f0d8 tst r3, 4 |
| if ((r3 & 4) != 0) {
0x0000f0dc bne 0xf280 | goto label_9;
| }
0x0000f0e0 ldrb r4, [r6, 0x1c] | r4 = *((r6 + 0x1c));
0x0000f0e4 ands r3, r4, 2 | r3 = r4 & 2;
| if (r3 != r4) {
0x0000f0e8 bne 0xf280 | goto label_9;
| }
0x0000f0ec ldr r4, [r6, 0xc] | r4 = *((r6 + 0xc));
0x0000f0f0 cmp r4, sb |
| if (r4 <= sb) {
0x0000f0f4 ldrhi sl, [r6] | sl = *(r6);
| }
| if (r4 <= sb) {
0x0000f0f8 movhi r4, r3 | r4 = r3;
| }
| if (r4 <= sb) {
0x0000f0fc movhi r5, sl | r5 = sl;
| }
| if (r4 > sb) {
0x0000f100 bhi 0xf1ac | goto label_10;
| }
0x0000f104 mov r1, r6 | r1 = r6;
0x0000f108 mov r0, r7 | r0 = r7;
0x0000f10c bl 0xaaec | fcn_0000aaec ();
| label_0:
0x0000f110 ldr r5, [r6, 0x18] | r5 = *((r6 + 0x18));
0x0000f114 ldr r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0000f118 cmp r5, 0 |
0x0000f11c cmpne r1, 0 | __asm ("cmpne r1, 0");
| if (r5 == 0) {
0x0000f120 beq 0xf288 | goto label_11;
| }
0x0000f124 cmp r5, r1 |
| if (r5 > r1) {
0x0000f128 bhi 0xf2dc | goto label_12;
| }
| if (r5 == r1) {
0x0000f12c beq 0xf2a4 | goto label_4;
| }
| label_1:
0x0000f130 ldr r3, [pc, 0x1c0] |
0x0000f134 mov r0, 0 | r0 = 0;
0x0000f138 ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x0000f13c ldr r3, [r3, 0x14] | r3 = *(0xf308);
0x0000f140 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f144 b 0xf298 | goto label_13;
| do {
0x0000f148 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0000f14c ldr r1, [r2] | r1 = *(r2);
0x0000f150 cmp r1, r5 |
| if (r1 == r5) {
0x0000f154 bne 0xf194 |
0x0000f158 ldr r3, [pc, 0x19c] |
0x0000f15c ldr r2, [pc, 0x19c] | r2 = *(0xf2fc);
0x0000f160 add r3, pc, r3 | r3 = pc + r3;
0x0000f164 add r3, r3, 0x200 | r3 = 0xf4f8;
0x0000f168 add r3, r3, 3 | r3 += 3;
0x0000f16c str r3, [sp, 4] | var_4h = r3;
0x0000f170 ldr r3, [pc, 0x18c] | r3 = *(0xf300);
0x0000f174 ldr r1, [pc, 0x18c] | r1 = *(0xf304);
0x0000f178 add r3, pc, r3 | r3 = pc + r3;
0x0000f17c str r3, [sp] | *(sp) = r3;
0x0000f180 add r2, pc, r2 | r2 = pc + r2;
0x0000f184 ldr r3, [pc, 0x180] | r3 = *(0xf308);
0x0000f188 add r1, pc, r1 | r1 = pc + r1;
0x0000f18c ldr r0, [pc, 0x17c] | r0 = *(0xf30c);
0x0000f190 bl 0xb578 | fcn_0000b578 ();
| }
0x0000f194 cmp r2, r5 |
| if (r2 != r5) {
0x0000f198 streq r6, [r6, 8] | *((r6 + 8)) = r6;
| }
0x0000f19c mov sl, r5 | sl = r5;
0x0000f1a0 ldr r5, [r5] | r5 = *(r5);
0x0000f1a4 add r4, r4, r3 | r4 += r3;
0x0000f1a8 sub sb, sb, r3 | sb -= r3;
| label_10:
0x0000f1ac ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0000f1b0 cmp sb, r3 |
0x0000f1b4 bhs 0xf148 |
| } while (sb >= r3);
0x0000f1b8 cmp r4, 0 |
| if (r4 != 0) {
0x0000f1bc beq 0xf20c |
0x0000f1c0 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x0000f1c4 bl 0xe55c | fcn_0000e55c (r0);
0x0000f1c8 ldr r3, [r7] | r3 = *(r7);
0x0000f1cc cmp r3, 0 |
0x0000f1d0 ldr r3, [r6] | r3 = *(r6);
| if (r3 != 0) {
0x0000f1d4 streq r3, [r7] | *(r7) = r3;
| }
| if (r3 == 0) {
0x0000f1d8 strne r3, [r0] | *(r0) = r3;
| }
0x0000f1dc mov r3, 0 | r3 = 0;
0x0000f1e0 str sl, [r7, 4] | *((r7 + 4)) = sl;
0x0000f1e4 mov r0, r7 | r0 = r7;
0x0000f1e8 str r3, [sl] | *(sl) = r3;
0x0000f1ec str r5, [r6] | *(r6) = r5;
0x0000f1f0 bl 0xc164 | fcn_0000c164 (r0);
0x0000f1f4 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0000f1f8 add r3, r3, r4 | r3 += r4;
0x0000f1fc str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0000f200 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0000f204 add r3, r3, r4 | r3 += r4;
0x0000f208 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| }
0x0000f20c ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0000f210 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x0000f214 mov r2, sb | r2 = sb;
0x0000f218 add r1, r1, r3 | r1 += r3;
0x0000f21c mov r0, r7 | r0 = r7;
0x0000f220 bl 0xa93c | fcn_0000a93c ();
0x0000f224 ldrd r2, r3, [r5, 8] | __asm ("ldrd r2, r3, [r5, 8]");
0x0000f228 add r4, sb, r4 | r4 = sb + r4;
0x0000f22c adds r0, r2, sb | r0 = r2 + sb;
0x0000f230 adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x0000f234 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0000f238 strd r0, r1, [r5, 8] | __asm ("strd r0, r1, [r5, 8]");
0x0000f23c sub r3, r3, sb | r3 -= sb;
0x0000f240 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0000f244 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0000f248 cmp r4, 0 |
0x0000f24c sub r3, r3, r4 | r3 -= r4;
0x0000f250 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x0000f254 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0000f258 add r3, r3, r4 | r3 += r4;
0x0000f25c str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
| if (r4 == 0) {
0x0000f260 beq 0xf110 | goto label_0;
| }
0x0000f264 mov r0, r7 | r0 = r7;
0x0000f268 bl 0xa714 | fcn_0000a714 ();
0x0000f26c mov r0, r6 | r0 = r6;
0x0000f270 bl 0xa714 | fcn_0000a714 ();
0x0000f274 b 0xf110 | goto label_0;
| label_8:
0x0000f278 mov r4, 0 | r4 = 0;
0x0000f27c b 0xf110 | goto label_0;
| label_9:
0x0000f280 mvn r4, 0 | r4 = ~0;
0x0000f284 b 0xf110 | goto label_0;
| label_11:
0x0000f288 cmp r5, r1 |
| if (r5 == r1) {
0x0000f28c beq 0xf29c | goto label_14;
| }
0x0000f290 cmp r1, 0 |
| if (r1 != 0) {
0x0000f294 bne 0xf130 | goto label_1;
| }
| label_13:
0x0000f298 mov r1, r5 | r1 = r5;
| label_14:
0x0000f29c cmp r1, 0 |
| if (r1 != 0) {
0x0000f2a0 beq 0xf2b8 |
| label_4:
0x0000f2a4 ldr r3, [pc, 0x4c] |
0x0000f2a8 mov r0, 0 | r0 = 0;
0x0000f2ac ldr r3, [r8, r3] | r3 = *((r8 + r3));
0x0000f2b0 ldr r3, [r3, 0x14] | r3 = *(0xf308);
0x0000f2b4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x0000f2b8 mov r0, r4 | r0 = r4;
0x0000f2bc add sp, sp, 8 |
0x0000f2c0 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x0000f2c4 cmp r4, 0 |
| if (r4 == 0) {
0x0000f2c8 movne r3, r5 | r3 = r5;
| }
| if (r4 == 0) {
0x0000f2cc movne r5, r4 | r5 = r4;
| }
| if (r4 != 0) {
0x0000f2d0 movne r4, r3 | r4 = r3;
| goto label_15;
| }
| if (r4 != 0) {
| label_15:
0x0000f2d4 bne 0xf078 | goto label_2;
| }
0x0000f2d8 b 0xf0b0 | goto label_3;
| label_12:
0x0000f2dc cmp r5, 0 |
| if (r5 == 0) {
0x0000f2e0 movne r3, r5 | r3 = r5;
| }
| if (r5 == 0) {
0x0000f2e4 movne r5, r1 | r5 = r1;
| }
| if (r5 != 0) {
0x0000f2e8 movne r1, r3 | r1 = r3;
| goto label_16;
| }
| if (r5 != 0) {
| label_16:
0x0000f2ec bne 0xf130 | goto label_1;
| }
0x0000f2f0 b 0xf2a4 | goto label_4;
| }
[*] Function system used 1 times libevent-2.1.so.6.0.2