[*] Binary protection state of liburcu-bp.so.8.0.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of liburcu-bp.so.8.0.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/liburcu-bp.so.8.0.0 @ 0x3430 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.urcu_bp_after_fork_child () | void urcu_bp_after_fork_child () {
| int16_t var_4h_2;
| int16_t var_4h;
| int16_t var_84h;
0x00003430 ldr r2, [pc, 0xec] |
0x00003432 ldr r3, [pc, 0xf0] | r3 = *(0x3526);
0x00003434 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00003438 sub sp, 0x88 |
0x0000343a add r2, pc | r2 = 0x695e;
0x0000343c ldr.w sb, [pc, 0xe8] |
0x00003440 ldr r3, [r2, r3] |
0x00003442 add sb, pc | sb = 0x696e;
0x00003444 ldr r3, [r3] | r3 = *(0x695e);
0x00003446 str r3, [sp, 0x84] | var_84h = r3;
0x00003448 mov.w r3, 0 | r3 = 0;
0x0000344c ldr r3, [sb, 0x10]! | r3 = *(0x697e);
0x00003450 cmp r3, sb |
| if (r3 == sb) {
0x00003452 beq 0x34bc | goto label_1;
| }
0x00003454 sub.w r6, r3, 8 | r6 = r3 - 8;
0x00003458 mvn r8, 0x10 | r8 = ~0x10;
0x0000345c movs r7, 0 | r7 = 0;
| label_0:
0x0000345e ldr r5, [r6] | r5 = *(r6);
0x00003460 add.w r3, r6, 0x10 | r3 = r6 + 0x10;
0x00003464 adds r5, 0x10 | r5 += 0x10;
0x00003466 add r5, r6 | r5 += r6;
0x00003468 cmp r5, r3 |
| if (r5 < r3) {
0x0000346a bls 0x34b2 | goto label_2;
| }
0x0000346c sub.w r2, r8, r6 | r2 = r8 - r6;
0x00003470 add.w r3, r6, 0x110 | r3 = r6 + 0x110;
0x00003474 add r5, r2 | r5 += r2;
0x00003476 add.w r4, r6, 0x90 | r4 = r6 + 0x90;
0x0000347a bic r5, r5, 0x7f | r5 = BIT_MASK (r5, 0x7f);
0x0000347e add r5, r3 | r5 += r3;
| do {
0x00003480 ldr r3, [r4, -0x34] | r3 = *((r4 - 0x34));
| if (r3 != 0) {
0x00003484 cbz r3, 0x34ac |
0x00003486 ldr sl, [r4, -0x38] | sl = *((r4 - 0x38));
0x0000348a blx 0x1770 | r0 = fcn_00001770 ();
0x0000348e cmp sl, r0 |
| if (sl == r0) {
0x00003490 beq 0x34ac | goto label_3;
| }
0x00003492 ldrd r2, r3, [r4, -0x40] | __asm ("ldrd r2, r3, [r4, -0x40]");
0x00003496 str r7, [r4, -0x80] | *((r4 - 0x80)) = r7;
0x0000349a str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0000349c str r2, [r3] | *(r3) = r2;
0x0000349e str r7, [r4, -0x34] | *((r4 - 0x34)) = r7;
0x000034a2 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000034a4 str r7, [r4, -0x38] | *((r4 - 0x38)) = r7;
0x000034a8 subs r3, 0x80 | r3 -= 0x80;
0x000034aa str r3, [r6, 4] | *((r6 + 4)) = r3;
| }
| label_3:
0x000034ac adds r4, 0x80 | r4 += 0x80;
0x000034ae cmp r4, r5 |
0x000034b0 bne 0x3480 |
| } while (r4 != r5);
| label_2:
0x000034b2 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000034b4 cmp r3, sb |
0x000034b6 sub.w r6, r3, 8 | r6 = r3 - 8;
| if (r3 != sb) {
0x000034ba bne 0x345e | goto label_0;
| }
| label_1:
0x000034bc ldr r4, [pc, 0x6c] |
0x000034be add r5, sp, 4 | r5 += var_4h;
0x000034c0 movs r2, 0x80 | r2 = 0x80;
0x000034c2 mov r0, r5 | r0 = r5;
0x000034c4 add r4, pc | r4 = 0x69f4;
0x000034c6 add.w r1, r4, 0x88 | r1 = r4 + 0x88;
0x000034ca blx 0x177c | fcn_0000177c ();
0x000034ce mov r0, r4 | r0 = r4;
0x000034d0 bl 0x1cdc | fcn_00001cdc ();
0x000034d4 add.w r0, r4, 0x38 | r0 = r4 + 0x38;
0x000034d8 bl 0x1cdc | fcn_00001cdc ();
0x000034dc movs r2, 0 | r2 = 0;
0x000034de mov r1, r5 | r1 = r5;
0x000034e0 movs r0, 2 | r0 = 2;
0x000034e2 blx 0x18b8 | r0 = fprintf_chk ()
| if (r0 == 0) {
0x000034e6 cbnz r0, 0x3502 |
0x000034e8 ldr r2, [pc, 0x44] |
0x000034ea ldr r3, [pc, 0x38] | r3 = *(0x3526);
0x000034ec add r2, pc | r2 = 0x6a20;
0x000034ee ldr r3, [r2, r3] | r3 = *(0x6a20);
0x000034f0 ldr r2, [r3] | r2 = *(0x6a20);
0x000034f2 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000034f4 eors r2, r3 | r2 ^= r3;
0x000034f6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000034fa bne 0x351a | goto label_4;
| }
0x000034fc add sp, 0x88 |
0x000034fe pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x00003502 ldr r3, [pc, 0x30] |
0x00003504 movw r2, 0x2e5 | r2 = 0x2e5;
0x00003508 ldr r1, [pc, 0x2c] |
0x0000350a ldr r0, [pc, 0x30] |
0x0000350c add r3, pc |
0x0000350e add r1, pc | r1 = 0x6a4a;
0x00003510 add.w r3, r3, 0x1c8 | r3 = 0x6c0e;
0x00003514 add r0, pc | r0 = 0x6a56;
0x00003516 blx 0x1990 | fcn_00001990 ();
| label_4:
0x0000351a blx 0x17a0 | fcn_000017a0 ();
0x0000351e nop |
0x00003520 subs r2, 0x9a | r2 -= 0x9a;
0x00003522 movs r0, r0 |
0x00003524 lsls r0, r0, 4 | r0 <<= 4;
0x00003526 movs r0, r0 |
0x00003528 subs r4, 0x3a | r4 -= 0x3a;
0x0000352a movs r0, r0 |
0x0000352c subs r3, 0xe0 | r3 -= 0xe0;
0x0000352e movs r0, r0 |
0x00003530 subs r1, 0xe8 | r1 -= 0xe8;
0x00003532 movs r0, r0 |
0x00003534 asrs r0, r3, 0x16 | r0 = r3 >> 0x16;
0x00003536 movs r0, r0 |
0x00003538 asrs r6, r3, 8 | r6 = r3 >> 8;
0x0000353a movs r0, r0 |
0x0000353c asrs r0, r2, 8 | r0 = r2 >> 8;
0x0000353e 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/liburcu-bp.so.8.0.0 @ 0x33a0 */
| #include <stdint.h>
|
; (fcn) sym.urcu_bp_after_fork_parent () | void urcu_bp_after_fork_parent () {
| int16_t var_4h_2;
| int16_t var_84h;
| if (? < ?) {
0x000033a0 addhs r4, r0, 28, 18 | r4 = r0 + (28 18);
| }
0x000033a4 ldr r3, [pc, 0x70] |
0x000033a6 push {r4, r5, lr} |
0x000033a8 sub sp, 0x8c |
0x000033aa ldr r4, [pc, 0x70] |
0x000033ac add r1, pc | r1 += pc;
0x000033ae add r5, sp, 4 | r5 += var_4h_2;
0x000033b0 ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x000033b2 mov r0, r5 | r0 = r5;
0x000033b4 add r4, pc | r4 = 0x67d6;
0x000033b6 add.w r1, r4, 0x88 | r1 = r4 + 0x88;
0x000033ba ldr r3, [r3] | r3 = *(0x3418);
0x000033bc str r3, [sp, 0x84] | var_84h = r3;
0x000033be mov.w r3, 0 | r3 = 0;
0x000033c2 blx 0x177c | fcn_0000177c ();
0x000033c6 mov r0, r4 | r0 = r4;
0x000033c8 bl 0x1cdc | fcn_00001cdc ();
0x000033ca stc2 p1, c15, [r8], {4} | __asm ("stc2 p1, c15, [r8], {4}");
0x000033cc add.w r0, r4, 0x38 | r0 = r4 + 0x38;
0x000033d0 bl 0x1cdc | fcn_00001cdc ();
0x000033d4 movs r2, 0 | r2 = 0;
0x000033d6 mov r1, r5 | r1 = r5;
0x000033d8 movs r0, 2 | r0 = 2;
0x000033da blx 0x18b8 | r0 = fprintf_chk ()
| if (r0 == 0) {
0x000033de cbnz r0, 0x33f8 |
0x000033e0 ldr r2, [pc, 0x3c] |
0x000033e2 ldr r3, [pc, 0x34] | r3 = *(0x341a);
0x000033e4 add r2, pc | r2 = 0x6808;
0x000033e6 ldr r3, [r2, r3] | r3 = *(0x6808);
0x000033e8 ldr r2, [r3] | r2 = *(0x6808);
0x000033ea ldr r3, [sp, 0x84] | r3 = var_84h;
0x000033ec eors r2, r3 | r2 ^= r3;
0x000033ee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000033f2 bne 0x3410 | goto label_0;
| }
0x000033f4 add sp, 0x8c |
0x000033f6 pop {r4, r5, pc} |
| }
0x000033f8 ldr r3, [pc, 0x28] |
0x000033fa movw r2, 0x2c1 | r2 = 0x2c1;
0x000033fe ldr r1, [pc, 0x28] |
0x00003400 ldr r0, [pc, 0x28] |
0x00003402 add r3, pc |
0x00003404 add r1, pc | r1 = 0x6832;
0x00003406 add.w r3, r3, 0x1ac | r3 = 0x69d6;
0x0000340a add r0, pc | r0 = 0x683a;
0x0000340c blx 0x1990 | fcn_00001990 ();
0x0000340e invalid |
| label_0:
0x00003410 blx 0x17a0 | fcn_000017a0 ();
0x00003414 subs r3, 0x28 | r3 -= 0x28;
0x00003416 movs r0, r0 |
0x00003418 lsls r0, r0, 4 | r0 <<= 4;
0x0000341a movs r0, r0 |
0x0000341c subs r4, 0xf0 | r4 -= 0xf0;
0x0000341e movs r0, r0 |
0x00003420 subs r2, 0xf0 | r2 -= 0xf0;
0x00003422 movs r0, r0 |
0x00003424 asrs r2, r4, 0x1a | r2 = r4 >> 0x1a;
0x00003426 movs r0, r0 |
0x00003428 asrs r0, r5, 0xc | r0 = r5 >> 0xc;
0x0000342a movs r0, r0 |
0x0000342c asrs r2, r3, 0xc | r2 = r3 >> 0xc;
0x0000342e 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/liburcu-bp.so.8.0.0 @ 0x32e4 */
| #include <stdint.h>
|
; (fcn) sym.urcu_bp_before_fork () | void urcu_bp_before_fork () {
| int16_t var_84h_2;
| int16_t var_4h;
| int16_t var_84h_3;
| int16_t var_104h;
0x000032e4 blmi 0x955b7c | __asm ("blmi aav.0x00003be8");
0x000032e8 push {r4, r5, lr} |
0x000032ea sub sp, 0x10c |
0x000032ec add r2, pc | r2 += pc;
0x000032ee add r4, sp, 4 | r4 += var_4h;
0x000032f0 mov r0, r4 | r0 = r4;
0x000032f2 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000032f4 ldr r3, [r3] | r3 = *(r3);
0x000032f6 str r3, [sp, 0x104] | var_104h = r3;
0x000032f8 mov.w r3, 0 | r3 = 0;
0x000032fc blx 0x1878 | r0 = fcn_00001878 ();
| if (r0 == 0) {
0x00003300 cbnz r0, 0x3344 |
0x00003302 add r5, sp, 0x84 | r5 += var_84h_3;
0x00003304 mov r1, r4 | r1 = r4;
0x00003306 mov r2, r5 | r2 = r5;
0x00003308 blx 0x18b8 | r0 = fprintf_chk ()
| if (r0 != 0) {
0x0000330c cbnz r0, 0x3360 | goto label_0;
| }
0x0000330e ldr r4, [pc, 0x70] |
0x00003310 add r4, pc | r4 = 0x6696;
0x00003312 add.w r0, r4, 0x38 | r0 = r4 + 0x38;
0x00003316 bl 0x1be0 | fcn_00001be0 ();
0x0000331a mov r0, r4 | r0 = r4;
0x0000331c bl 0x1be0 | fcn_00001be0 ();
0x00003320 movs r2, 0x80 | r2 = 0x80;
0x00003322 mov r1, r5 | r1 = r5;
0x00003324 add.w r0, r4, 0x88 | r0 = r4 + 0x88;
0x00003328 blx 0x177c | fcn_0000177c ();
0x0000332c ldr r2, [pc, 0x54] |
0x0000332e ldr r3, [pc, 0x4c] | r3 = *(0x337e);
0x00003330 add r2, pc | r2 = 0x66b8;
0x00003332 ldr r3, [r2, r3] | r3 = *(0x66b8);
0x00003334 ldr r2, [r3] | r2 = *(0x66b8);
0x00003336 ldr r3, [sp, 0x104] | r3 = var_104h;
0x00003338 eors r2, r3 | r2 ^= r3;
0x0000333a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000333e bne 0x335c | goto label_1;
| }
0x00003340 add sp, 0x10c |
0x00003342 pop {r4, r5, pc} |
| }
0x00003344 ldr r3, [pc, 0x40] |
0x00003346 mov.w r2, 0x2b0 | r2 = 0x2b0;
0x0000334a ldr r1, [pc, 0x40] |
0x0000334c ldr r0, [pc, 0x40] |
0x0000334e add r3, pc |
0x00003350 add r1, pc | r1 = 0x66e2;
0x00003352 add.w r3, r3, 0x198 | r3 = 0x6872;
0x00003356 add r0, pc | r0 = 0x66ea;
0x00003358 blx 0x1990 | fcn_00001990 ();
| label_1:
0x0000335c blx 0x17a0 | fcn_000017a0 ();
| label_0:
0x00003360 ldr r3, [pc, 0x30] |
0x00003362 movw r2, 0x2b2 | r2 = 0x2b2;
0x00003366 ldr r1, [pc, 0x30] |
0x00003368 ldr r0, [pc, 0x30] |
0x0000336a add r3, pc |
0x0000336c add r1, pc | r1 = 0x670a;
0x0000336e add.w r3, r3, 0x198 | r3 = 0x689a;
0x00003372 add r0, pc | r0 = 0x6712;
0x00003374 blx 0x1990 | fcn_00001990 ();
0x00003378 subs r3, 0xe8 | r3 -= 0xe8;
0x0000337a movs r0, r0 |
0x0000337c lsls r0, r0, 4 | r0 <<= 4;
0x0000337e movs r0, r0 |
0x00003380 subs r5, 0x94 | r5 -= 0x94;
0x00003382 movs r0, r0 |
0x00003384 subs r3, 0xa4 | r3 -= 0xa4;
0x00003386 movs r0, r0 |
0x00003388 asrs r6, r2, 0x1d | r6 = r2 >> 0x1d;
0x0000338a movs r0, r0 |
0x0000338c asrs r4, r3, 0xf | r4 = r3 >> 0xf;
0x0000338e movs r0, r0 |
0x00003390 asrs r6, r1, 0xf | r6 = r1 >> 0xf;
0x00003392 movs r0, r0 |
0x00003394 asrs r2, r7, 0x1c | r2 = r7 >> 0x1c;
0x00003396 movs r0, r0 |
0x00003398 asrs r0, r0, 0xf | r0 >>= 0xf;
0x0000339a movs r0, r0 |
0x0000339c asrs r2, r6, 0xe | r2 = r6 >> 0xe;
0x0000339e 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/liburcu-bp.so.8.0.0 @ 0x20d4 */
| #include <stdint.h>
|
; (fcn) sym.urcu_bp_register_rculfhash_atfork () | void urcu_bp_register_rculfhash_atfork (int16_t arg1) {
| r0 = arg1;
0x000020d4 invalid |
0x000020d8 bl 0x2060 | fcn_00002060 ();
0x000020dc ldr r3, [pc, 0x10] |
0x000020de add r3, pc | r3 = 0x41d2;
0x000020e0 ldr r2, [r3, 0x30] | r2 = *(0x4202);
0x000020e2 adds r1, r2, 1 | r1 = r2 + 1;
0x000020e4 str r1, [r3, 0x30] | *((r3 + 0x30)) = r1;
| if (r2 == 0) {
0x000020e6 cbnz r2, 0x20ea |
0x000020e8 str r4, [r3, 0x34] | *((r3 + 0x34)) = r4;
| }
0x000020ea pop.w {r4, lr} |
0x000020ee b 0x200c | return void (*0x200c)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/liburcu-bp.so.8.0.0 @ 0x2800 */
| #include <stdint.h>
|
; (fcn) sym.urcu_bp_register () | void urcu_bp_register () {
| int16_t var_0h;
| int16_t var_14h;
| int16_t var_94h;
| int16_t var_114h;
0x00002800 ldr r2, [pc, 0x224] |
0x00002802 ldr r3, [pc, 0x228] | r3 = *(0x2a2e);
0x00002804 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00002808 sub sp, 0x118 |
0x0000280a add r2, pc | r2 = 0x5236;
0x0000280c add r4, sp, 0x14 | r4 += var_14h;
0x0000280e mov r0, r4 | r0 = r4;
0x00002810 ldr r3, [r2, r3] |
0x00002812 ldr r3, [r3] | r3 = *(0x5236);
0x00002814 str r3, [sp, 0x114] | var_114h = r3;
0x00002816 mov.w r3, 0 | r3 = 0;
0x0000281a blx 0x1878 | r0 = fcn_00001878 ();
0x0000281e cmp r0, 0 |
| if (r0 != 0) {
0x00002820 bne 0x28fc | goto label_3;
| }
0x00002822 add r6, sp, 0x94 | r6 += var_94h;
0x00002824 mov r1, r4 | r1 = r4;
0x00002826 mov r2, r6 | r2 = r6;
0x00002828 blx 0x18b8 | r0 = fprintf_chk ()
0x0000282c mov r5, r0 | r5 = r0;
0x0000282e cmp r0, 0 |
| if (r0 != 0) {
0x00002830 bne 0x28fc | goto label_3;
| }
0x00002832 ldr r0, [pc, 0x1ec] |
0x00002834 add r0, pc | r0 = 0x525a;
0x00002836 blx 0x1948 | r0 = pthread_join (r0, r1);
0x0000283a ldr r3, [r0] | r3 = *(0x525a);
| if (r3 != 0) {
0x0000283c cbz r3, 0x2868 |
| label_4:
0x0000283e movs r2, 0 | r2 = 0;
0x00002840 mov r1, r6 | r1 = r6;
0x00002842 movs r0, 2 | r0 = 2;
0x00002844 blx 0x18b8 | r0 = fprintf_chk ()
0x00002848 cmp r0, 0 |
| if (r0 != 0) {
0x0000284a bne 0x28fc | goto label_3;
| }
0x0000284c ldr r2, [pc, 0x1e0] |
0x0000284e ldr r3, [pc, 0x1dc] | r3 = *(0x2a2e);
0x00002850 add r2, pc | r2 = 0x5284;
0x00002852 ldr r3, [r2, r3] | r3 = *(0x5284);
0x00002854 ldr r2, [r3] | r2 = *(0x5284);
0x00002856 ldr r3, [sp, 0x114] | r3 = var_114h;
0x00002858 eors r2, r3 | r2 ^= r3;
0x0000285a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000285e bne.w 0x29ea | goto label_6;
| }
0x00002862 add sp, 0x118 |
0x00002864 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x00002868 bl 0x1a58 | entry_init1 ();
0x0000286c ldr r0, [pc, 0x1c4] |
0x0000286e add r0, pc | r0 = 0x52a6;
0x00002870 bl 0x1be0 | fcn_00001be0 ();
0x00002874 ldr r3, [pc, 0x1c0] |
0x00002876 add r3, pc | r3 = 0x52b2;
0x00002878 ldr r7, [r3, 0x10]! | r7 = *(0x52c2);
0x0000287c cmp r7, r3 |
0x0000287e sub.w r1, r7, 8 | r1 = r7 - 8;
| if (r7 == r3) {
0x00002882 beq 0x28a4 | goto label_7;
| }
| label_0:
0x00002884 ldr.w ip, [pc, 0x1b4] |
0x00002888 add ip, pc |
0x0000288a add.w ip, ip, 0x10 | ip = 0x52d8;
| do {
0x0000288e ldrd r3, r0, [r1] | __asm ("ldrd r3, r0, [r1]");
0x00002892 subs r2, r3, r0 | r2 = r3 - r0;
0x00002894 cmp r2, 0x7f |
| if (r2 > 0x7f) {
0x00002896 bhi 0x2900 | goto label_8;
| }
| label_1:
0x00002898 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0000289a cmp r3, ip |
0x0000289c sub.w r1, r3, 8 | r1 = r3 - 8;
0x000028a0 bne 0x288e |
| } while (r3 != ip);
| if (r5 != 0) {
0x000028a2 cbnz r5, 0x28fc | goto label_3;
| }
| label_7:
0x000028a4 ldr.w r8, [pc, 0x198] |
0x000028a8 add r8, pc | r8 = 0x52ec;
0x000028aa add.w sb, r8, 0x10 | sb = r8 + 0x10;
0x000028ae cmp r7, sb |
| if (r7 == sb) {
0x000028b0 beq 0x2968 | goto label_9;
| }
0x000028b2 ldr.w r7, [r8, 0x14] | r7 = *((r8 + 0x14));
0x000028b6 movs r3, 0 | r3 = 0;
0x000028b8 ldr r4, [r7, -0x8] | r4 = *((r7 - 0x8));
0x000028bc sub.w sl, r7, 8 | sl = r7 - 8;
0x000028c0 mov r0, sl | r0 = sl;
0x000028c2 adds r4, 0x10 | r4 += 0x10;
0x000028c4 lsls r5, r4, 1 | r5 = r4 << 1;
0x000028c6 mov r1, r4 | r1 = r4;
0x000028c8 mov r2, r5 | r2 = r5;
0x000028ca blx 0x193c | r0 = tls_get_addr ();
0x000028ce adds r2, r0, 1 | r2 = r0 + 1;
| if (r2 == r0) {
0x000028d0 beq 0x29ae | goto label_10;
| }
0x000028d2 cmp sl, r0 |
| if (sl != r0) {
0x000028d4 bne.w 0x29ee | goto label_11;
| }
0x000028d8 subs r2, r5, r4 | r2 = r5 - r4;
0x000028da add.w r0, sl, r4 | r0 = sl + r4;
0x000028de movs r1, 0 | r1 = 0;
0x000028e0 subs r5, 0x10 | r5 -= 0x10;
0x000028e2 blx 0x189c | fcn_0000189c ();
0x000028e6 str r5, [r7, -0x8] | *((r7 - 0x8)) = r5;
| label_5:
0x000028ea ldr r3, [pc, 0x158] |
0x000028ec movs r5, 1 | r5 = 1;
0x000028ee add r3, pc | r3 = 0x5338;
0x000028f0 ldr r7, [r3, 0x10]! | r7 = *(0x5348);
0x000028f4 cmp r7, r3 |
0x000028f6 sub.w r1, r7, 8 | r1 = r7 - 8;
| if (r7 != r3) {
0x000028fa bne 0x2884 | goto label_0;
| }
| label_3:
0x000028fc blx 0x1960 | close (r0);
| label_8:
0x00002900 adds r3, 0x10 | r3 += 0x10;
0x00002902 add.w r4, r1, 0x10 | r4 = r1 + 0x10;
0x00002906 add r3, r1 | r3 += r1;
0x00002908 cmp r4, r3 |
| if (r4 <= r3) {
0x0000290a blo 0x2914 | goto label_12;
| }
0x0000290c b 0x2898 | goto label_1;
| label_2:
0x0000290e adds r4, 0x80 | r4 += 0x80;
0x00002910 cmp r4, r3 |
| if (r4 >= r3) {
0x00002912 bhs 0x2898 | goto label_1;
| }
| label_12:
0x00002914 ldr r2, [r4, 0x4c] | r2 = *((r4 + 0x4c));
0x00002916 cmp r2, 0 |
| if (r2 != 0) {
0x00002918 bne 0x290e | goto label_2;
| }
0x0000291a ldr r5, [pc, 0x12c] |
0x0000291c adds r0, 0x80 | r0 += 0x80;
0x0000291e movs r3, 1 | r3 = 1;
0x00002920 str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x00002922 add r5, pc | r5 = 0x5370;
0x00002924 str r0, [r1, 4] | *((r1 + 4)) = r0;
0x00002926 ldr r0, [r5, 0x7c] | r0 = *(0x53ec);
0x00002928 mov r1, r4 | r1 = r4;
0x0000292a blx 0x1984 | r0 = assert_fail ();
0x0000292e cmp r0, 0 |
| if (r0 != 0) {
0x00002930 bne 0x28fc | goto label_3;
| }
0x00002932 blx 0x1770 | fcn_00001770 ();
0x00002936 ldr r3, [r4] | r3 = *(r4);
0x00002938 str r0, [r4, 0x48] | *((r4 + 0x48)) = r0;
0x0000293a cmp r3, 0 |
| if (r3 != 0) {
0x0000293c bne 0x2a06 | goto label_13;
| }
0x0000293e ldr r3, [pc, 0x10c] |
0x00002940 add.w r7, r4, 0x40 | r7 = r4 + 0x40;
0x00002944 ldr r0, [pc, 0xdc] |
0x00002946 add r3, pc | r3 = 0x5398;
0x00002948 mov r2, r3 | r2 = r3;
0x0000294a add r0, pc | r0 = 0x5372;
0x0000294c ldr r1, [r2, 8]! | r1 = *((r2 += 8));
0x00002950 str r7, [r3, 8] | *((r3 + 8)) = r7;
0x00002952 str r7, [r1, 4] | *((r1 + 4)) = r7;
0x00002954 strd r1, r2, [r4, 0x40] | __asm ("strd r1, r2, [r4, 0x40]");
0x00002958 blx 0x1948 | r0 = pthread_join (r0, r1);
0x0000295c mov r3, r0 | r3 = r0;
0x0000295e mov r0, r5 | r0 = r5;
0x00002960 str r4, [r3] | *(r3) = r4;
0x00002962 bl 0x1cdc | fcn_00001cdc ();
0x00002966 b 0x283e | goto label_4;
| label_9:
0x00002968 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0000296c mov.w r2, -1 | r2 = -1;
0x00002970 mov.w r1, 0x410 | r1 = 0x410;
0x00002974 str r2, [sp] | *(sp) = r2;
0x00002976 movs r3, 0x22 | r3 = 0x22;
0x00002978 movs r2, 3 | r2 = 3;
0x0000297a movs r0, 0 | r0 = 0;
0x0000297c vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x00002980 blx 0x1788 | r0 = fcn_00001788 ();
0x00002984 adds r1, r0, 1 | r1 = r0 + 1;
0x00002986 mov r4, r0 | r4 = r0;
| if (r1 == r0) {
0x00002988 beq 0x28fc | goto label_3;
| }
0x0000298a mov.w r2, 0x410 | r2 = 0x410;
0x0000298e movs r1, 0 | r1 = 0;
0x00002990 blx 0x189c | fcn_0000189c ();
0x00002992 invalid |
0x00002996 movs r0, 0x14 | r0 = 0x14;
0x00002998 mov r3, r4 | r3 = r4;
0x0000299a mov.w r1, 0x400 | r1 = 0x400;
0x0000299c str r0, [r0, 0x18] | *((r0 + 0x18)) = r0;
0x0000299e str r1, [r3], 8 | *(r3) = r1;
| r3 += 8;
0x000029a2 str r3, [r2] | *(r2) = r3;
0x000029a4 strd r7, r2, [r4, 8] | __asm ("strd r7, r2, [r4, 8]");
0x000029a8 str.w r3, [r8, 0x14] | __asm ("str.w r3, [r8, 0x14]");
0x000029ac b 0x28ea | goto label_5;
| label_10:
0x000029ae vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000029b2 movs r3, 0x22 | r3 = 0x22;
0x000029b4 str r0, [sp] | *(sp) = r0;
0x000029b6 movs r2, 3 | r2 = 3;
0x000029b8 mov r1, r5 | r1 = r5;
0x000029ba movs r0, 0 | r0 = 0;
0x000029bc vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x000029c0 blx 0x1788 | r0 = fcn_00001788 ();
0x000029c4 adds r3, r0, 1 | r3 = r0 + 1;
0x000029c6 mov r4, r0 | r4 = r0;
| if (r3 == r0) {
0x000029c8 beq 0x28fc | goto label_3;
| }
0x000029ca mov r2, r5 | r2 = r5;
0x000029cc movs r1, 0 | r1 = 0;
0x000029ce blx 0x189c | fcn_0000189c ();
0x000029d2 ldr.w r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x000029d6 mov r3, r4 | r3 = r4;
0x000029d8 subs r5, 0x10 | r5 -= 0x10;
0x000029da str r5, [r3], 8 | *(r3) = r5;
| r3 += 8;
0x000029de str r3, [r2] | *(r2) = r3;
0x000029e0 strd sb, r2, [r4, 8] | __asm ("strd sb, r2, [r4, 8]");
0x000029e4 str.w r3, [r8, 0x14] | __asm ("str.w r3, [r8, 0x14]");
0x000029e8 b 0x28ea | goto label_5;
| label_6:
0x000029ea blx 0x17a0 | fcn_000017a0 ();
| label_11:
0x000029ee ldr r3, [pc, 0x60] |
0x000029f0 mov.w r2, 0x1a0 | r2 = 0x1a0;
0x000029f4 ldr r1, [pc, 0x5c] |
0x000029f6 ldr r0, [pc, 0x60] |
0x000029f8 add r3, pc |
0x000029fa add r1, pc | r1 = 0x5452;
0x000029fc add.w r3, r3, 0x120 | r3 = 0x556e;
0x00002a00 add r0, pc | r0 = 0x545e;
0x00002a02 blx 0x1990 | fcn_00001990 ();
| label_13:
0x00002a06 ldr r3, [pc, 0x54] |
0x00002a08 movw r2, 0x1e7 | r2 = 0x1e7;
0x00002a0c ldr r1, [pc, 0x50] |
0x00002a0e ldr r0, [pc, 0x54] |
0x00002a10 add r3, pc |
0x00002a12 add r1, pc | r1 = 0x5476;
0x00002a14 add.w r3, r3, 0x130 | r3 = 0x55a2;
0x00002a16 strb r0, [r3, 0xe] | *((r3 + 0xe)) = r0;
0x00002a18 add r0, pc | r0 = 0x5482;
0x00002a1a blx 0x1990 | fcn_00001990 ();
0x00002a1e nop |
0x00002a20 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t) (r1, r0);
0x00002a22 movs r0, r0 |
0x00002a24 mov sl, r5 | sl = r5;
0x00002a26 movs r0, r0 |
0x00002a28 mov sl, sb | sl = sb;
0x00002a2a movs r0, r0 |
0x00002a2c lsls r0, r0, 4 | r0 <<= 4;
0x00002a2e movs r0, r0 |
0x00002a30 mov ip, r0 |
0x00002a32 movs r0, r0 |
0x00002a34 ldr r0, [pc, 0xd8] | r0 = *(0x2b10);
0x00002a36 movs r0, r0 |
0x00002a38 ldr r0, [pc, 0x18] | r0 = *(0x2a54);
0x00002a3a movs r0, r0 |
0x00002a3c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/liburcu-bp.so.8.0.0 @ 0x2a68 */
| #include <stdint.h>
|
; (fcn) sym.urcu_bp_register_thread () | void urcu_bp_register_thread () {
| do {
0x00001738 invalid | void (*0x173c)() ();
0x00002a68 ldr r0, [pc, 0x14] |
0x00002a6a push {r3, lr} |
0x00002a6c add r0, pc | r0 = 0x54f0;
0x00002a6e blx 0x1948 | r0 = pthread_join (r0, r1);
0x00002a72 ldr r3, [r0] | r3 = *(0x54f0);
| if (r3 != 0) {
0x00002a74 cbz r3, 0x2a78 |
0x00002a76 pop {r3, pc} |
| }
0x00002a78 pop.w {r3, lr} |
0x00002a7c b.w 0x1738 |
| } 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/liburcu-bp.so.8.0.0 @ 0x2224 */
| #include <stdint.h>
|
; (fcn) sym.urcu_bp_synchronize_rcu () | void urcu_bp_synchronize_rcu () {
| int16_t var_0h;
| int16_t var_8h;
| int32_t var_4h;
| int16_t var_14h;
| int16_t var_94h;
| int16_t var_114h;
0x00002224 ldr r2, [pc, 0x170] |
0x00002226 ldr r3, [pc, 0x174] | r3 = *(0x239e);
0x00002228 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000222c sub sp, 0x118 |
0x0000222e add r2, pc | r2 = 0x45ca;
0x00002230 add r4, sp, 8 | r4 += var_8h;
0x00002232 mov r6, sp | r6 = sp;
0x00002234 add r5, sp, 0x14 | r5 += var_14h;
0x00002236 ldr r3, [r2, r3] |
0x00002238 mov r0, r5 | r0 = r5;
0x0000223a ldr r7, [pc, 0x164] |
0x0000223c vdup.32 d17, r6 | __asm ("vdup.32 d17, r6");
0x00002240 vdup.32 d16, r4 | __asm ("vdup.32 d16, r4");
0x00002244 ldr r3, [r3] | r3 = *(0x45ca);
0x00002246 str r3, [sp, 0x114] | var_114h = r3;
0x00002248 mov.w r3, 0 | r3 = 0;
0x0000224c add r7, pc | r7 = 0x45f2;
0x0000224e vstr d17, [sp] | __asm ("vstr d17, [sp]");
0x00002252 vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x00002256 blx 0x1878 | r0 = fcn_00001878 ();
0x0000225a cmp r0, 0 |
| if (r0 != 0) {
0x0000225c bne.w 0x237e | goto label_1;
| }
0x00002260 add.w sb, sp, 0x94 | sb += var_94h;
0x00002264 mov r1, r5 | r1 = r5;
0x00002266 mov r2, sb | r2 = sb;
0x00002268 blx 0x18b8 | r0 = fprintf_chk ()
0x0000226c mov r5, r0 | r5 = r0;
0x0000226e cmp r0, 0 |
| if (r0 != 0) {
0x00002270 bne 0x2368 | goto label_2;
| }
0x00002272 ldr.w r8, [pc, 0x130] |
0x00002276 add r8, pc | r8 = 0x4620;
0x00002278 add.w r0, r8, 0x38 | r0 = r8 + 0x38;
0x0000227c bl 0x1be0 | fcn_00001be0 ();
0x00002280 mov r0, r8 | r0 = r8;
0x00002282 bl 0x1be0 | fcn_00001be0 ();
0x00002286 ldr r3, [pc, 0x120] |
0x00002288 add r3, pc | r3 = 0x4636;
0x0000228a ldr r2, [r3, 8] | r2 = *(0x463e);
0x0000228c adds r3, 8 | r3 += 8;
0x0000228e cmp r2, r3 |
| if (r2 == r3) {
0x00002290 beq 0x230a | goto label_0;
| }
0x00002292 ldr r3, [pc, 0x118] | r3 = *(0x23ae);
0x00002294 ldr.w r8, [r7, r3] | r8 = *((r7 + r3));
0x00002298 ldr.w r3, [r8] | r3 = *(r8);
0x0000229c cmp r3, 0 |
| if (r3 == 0) {
0x0000229e beq 0x2342 | goto label_3;
| }
0x000022a0 mov r2, r5 | r2 = r5;
0x000022a2 movs r1, 8 | r1 = 8;
0x000022a4 movw r0, 0x185 | r0 = 0x185;
0x000022a8 blx 0x1854 | r0 = fcn_00001854 ();
0x000022ac cmp r0, 0 |
| if (r0 != 0) {
0x000022ae bne 0x234e | goto label_4;
| }
| do {
0x000022b0 ldr r5, [pc, 0xfc] |
0x000022b2 mov r2, r4 | r2 = r4;
0x000022b4 mov r1, r6 | r1 = r6;
0x000022b6 add r5, pc | r5 = 0x466a;
0x000022b8 add.w sl, r5, 8 | sl = r5 + 8;
0x000022bc mov r0, sl | r0 = sl;
0x000022be bl 0x1d28 | fcn_00001d28 (r0, r1, r2);
0x000022c2 dmb ish | __asm ("dmb ish");
0x000022c6 ldr r3, [pc, 0xec] | r3 = *(0x23b6);
0x000022c8 ldr r2, [r7, r3] | r2 = *((r7 + r3));
0x000022ca ldr r3, [r2] | r3 = *(r2);
0x000022cc eor r3, r3, 0x10000 | r3 ^= 0x10000;
0x000022d0 str r3, [r2] | *(r2) = r3;
0x000022d2 dmb ish | __asm ("dmb ish");
0x000022d6 movs r1, 0 | r1 = 0;
0x000022d8 mov r0, r6 | r0 = r6;
0x000022da mov r2, r4 | r2 = r4;
0x000022dc bl 0x1d28 | fcn_00001d28 (r0, r1, r2);
0x000022de stc2 p8, c6, [r4, -0x8c]! | __asm ("stc2 p8, c6, [r4, -0x8c]!");
0x000022e2 cmp r3, r4 |
| if (r3 != r4) {
0x000022e4 beq 0x22f6 |
0x000022e6 str.w sl, [r3, 4] | __asm ("str.w sl, [r3, 4]");
0x000022ea ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000022ec ldr r2, [r4, 4] | r2 = var_4h;
0x000022ee str r3, [r2] | *(r2) = r3;
0x000022f0 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000022f2 ldr r3, [r4] | r3 = *(r4);
0x000022f4 str r3, [r5, 8] | *((r5 + 8)) = r3;
| }
0x000022f6 ldr.w r3, [r8] | r3 = *(r8);
| if (r3 == 0) {
0x000022fa cbz r3, 0x2348 | goto label_5;
| }
0x000022fc movs r2, 0 | r2 = 0;
0x000022fe movs r1, 8 | r1 = 8;
0x00002300 movw r0, 0x185 | r0 = 0x185;
0x00002304 blx 0x1854 | r0 = fcn_00001854 ();
| if (r0 != 0) {
0x00002308 cbnz r0, 0x234e | goto label_4;
| }
| label_0:
0x0000230a ldr r4, [pc, 0xac] |
0x0000230c add r4, pc | r4 = 0x46ca;
0x0000230e mov r0, r4 | r0 = r4;
0x00002310 bl 0x1cdc | fcn_00001cdc ();
0x00002314 add.w r0, r4, 0x38 | r0 = r4 + 0x38;
0x00002316 movs r0, r7 | r0 = r7;
0x00002318 bl 0x1cdc | fcn_00001cdc ();
0x0000231c movs r2, 0 | r2 = 0;
0x0000231e mov r1, sb | r1 = sb;
0x00002320 movs r0, 2 | r0 = 2;
0x00002322 blx 0x18b8 | r0 = fprintf_chk ()
| if (r0 != 0) {
0x00002326 cbnz r0, 0x2352 | goto label_6;
| }
0x00002328 ldr r2, [pc, 0x90] |
0x0000232a ldr r3, [pc, 0x70] | r3 = *(0x239e);
0x0000232c add r2, pc | r2 = 0x46ec;
0x0000232e ldr r3, [r2, r3] | r3 = *(0x46ec);
0x00002330 ldr r2, [r3] | r2 = *(0x46ec);
0x00002332 ldr r3, [sp, 0x114] | r3 = var_114h;
0x00002334 eors r2, r3 | r2 ^= r3;
0x00002336 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000233a bne 0x2394 | goto label_7;
| }
0x0000233c add sp, 0x118 |
0x0000233e pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x00002342 dmb ish | __asm ("dmb ish");
0x00002346 b 0x22b0 |
| } while (1);
| label_5:
0x00002348 dmb ish | __asm ("dmb ish");
0x0000234c b 0x230a | goto label_0;
| label_4:
0x0000234e bl 0x1eb8 | fcn_00001eb8 ();
| label_6:
0x00002352 ldr r3, [pc, 0x6c] |
0x00002354 mov.w r2, 0x15c | r2 = 0x15c;
0x00002358 ldr r1, [pc, 0x68] |
0x0000235a ldr r0, [pc, 0x6c] |
0x0000235c add r3, pc | r3 = 0x4722;
0x0000235e add r1, pc | r1 = 0x4726;
0x00002360 adds r3, 0xb0 | r3 += 0xb0;
0x00002362 add r0, pc | r0 = "/usr/src/debug/liburcu/0.13.2-r0/src/urcu-bp.c";
0x00002364 blx 0x1990 | fcn_00001990 ();
| label_2:
0x00002368 ldr r3, [pc, 0x60] |
0x0000236a mov.w r2, 0x11a | r2 = 0x11a;
0x0000236e ldr r1, [pc, 0x60] |
0x00002370 ldr r0, [pc, 0x60] |
0x00002372 add r3, pc | r3 = 0x4742;
0x00002374 add r1, pc | r1 = 0x474a;
0x00002376 adds r3, 0xb0 | r3 += 0xb0;
0x00002378 add r0, pc | r0 = 0x4750;
0x0000237a blx 0x1990 | fcn_00001990 ();
| label_1:
0x0000237e ldr r3, [pc, 0x58] |
0x00002380 mov.w r2, 0x118 | r2 = 0x118;
0x00002384 ldr r1, [pc, 0x54] |
0x00002386 ldr r0, [pc, 0x58] |
0x00002388 add r3, pc | r3 = 0x4766;
0x0000238a add r1, pc | r1 = 0x476a;
0x0000238c adds r3, 0xb0 | r3 += 0xb0;
0x0000238e add r0, pc | r0 = 0x4774;
0x00002390 blx 0x1990 | fcn_00001990 ();
| label_7:
0x00002394 blx 0x17a0 | fcn_000017a0 ();
0x00002398 ldr r4, [pc, 0x298] | r4 = *(0x2634);
0x0000239a movs r0, r0 |
0x0000239c lsls r0, r0, 4 | r0 <<= 4;
0x0000239e movs r0, r0 |
0x000023a0 ldr r4, [pc, 0x220] | r4 = *(0x25c4);
0x000023a2 movs r0, r0 |
0x000023a4 ldr r6, [pc, 0xb8] | r6 = *(0x2460);
0x000023a6 movs r0, r0 |
0x000023a8 ldr r5, [pc, 0x3d0] | r5 = *(0x277c);
0x000023aa movs r0, r0 |
0x000023ac lsls r0, r2, 4 | r0 = r2 << 4;
0x000023ae movs r0, r0 |
0x000023b0 ldr r5, [pc, 0x318] | r5 = *(0x26cc);
0x000023b2 movs r0, r0 |
0x000023b4 lsls r0, r3, 4 | r0 = r3 << 4;
0x000023b6 movs r0, r0 |
0x000023b8 ldr r5, [pc, 0x260] | r5 = *(0x261c);
0x000023ba movs r0, r0 |
0x000023bc ldr r3, [pc, 0x2a0] | r3 = *(0x2660);
0x000023be movs r0, r0 |
0x000023c0 movs r7, 0x48 | r7 = 0x48;
0x000023c2 movs r0, r0 |
0x000023c4 movs r3, 0xce | r3 = 0xce;
0x000023c6 movs r0, r0 |
0x000023c8 movs r3, 0xc2 | r3 = 0xc2;
0x000023ca movs r0, r0 |
0x000023cc movs r7, 0x32 | r7 = 0x32;
0x000023ce movs r0, r0 |
0x000023d0 movs r3, 0xb8 | r3 = 0xb8;
0x000023d2 movs r0, r0 |
0x000023d4 movs r3, 0xac | r3 = 0xac;
0x000023d6 movs r0, r0 |
0x000023d8 movs r7, 0x1c | r7 = 0x1c;
0x000023da movs r0, r0 |
0x000023dc movs r3, 0xa2 | r3 = 0xa2;
0x000023de movs r0, r0 |
0x000023e0 movs r3, 0x96 | r3 = 0x96;
0x000023e2 movs r0, r0 |
| }
[*] Function printf used 8 times liburcu-bp.so.8.0.0