[*] Binary protection state of libnl-route-3.so.200.26.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libnl-route-3.so.200.26.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/libnl-route-3.so.200.26.0 @ 0x390f0 */
| #include <stdint.h>
|
; (fcn) fcn.000390f0 () | void fcn_000390f0 () {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_58h;
| int16_t var_74h;
0x000390f0 ldr r1, [pc, 0x16c] |
0x000390f2 movs r3, 0 | r3 = 0;
0x000390f4 ldr r2, [pc, 0x16c] | r2 = *(0x39264);
0x000390f6 ldr r0, [pc, 0x170] |
0x000390f8 add r1, pc | r1 = 0x7235c;
0x000390fa push {r4, r5, r6, r7, lr} |
0x000390fc ldr r5, [pc, 0x16c] |
0x000390fe add r0, pc | r0 = 0x7236c;
0x00039100 vpush {d8} | __asm ("vpush {d8}");
0x00039104 sub sp, 0x7c |
0x00039106 ldr r2, [r1, r2] |
0x00039108 add r5, pc | r5 = 0x72378;
0x0003910a ldr r2, [r2] | r2 = *(0x7235c);
0x0003910c str r2, [sp, 0x74] | var_74h = r2;
0x0003910e mov.w r2, 0 | r2 = 0;
0x00039112 str r3, [sp, 0x10] | var_10h = r3;
0x00039114 blx 0x144c8 | r0 = fcn_000144c8 ();
0x00039118 mov r3, r0 | r3 = r0;
0x0003911a cmp r0, 0 |
| if (r0 == 0) {
0x0003911c beq.w 0x3923c | goto label_6;
| }
| label_3:
0x00039120 ldr r0, [pc, 0x14c] |
0x00039122 movs r1, 1 | r1 = 1;
0x00039124 ldr r2, [pc, 0x14c] |
0x00039126 add r0, pc | r0 = 0x7239a;
0x00039128 str r0, [sp] | *(sp) = r0;
0x0003912a add r2, pc | r2 = 0x723a2;
0x0003912c add r0, sp, 0x14 | r0 += var_14h;
0x0003912e blx 0x148cc | r0 = fcn_000148cc ();
0x00039132 cmp r0, 0 |
| if (r0 < 0) {
0x00039134 blt.w 0x39256 | goto label_7;
| }
0x00039138 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0003913a add r1, sp, 0x18 | r1 += var_18h;
0x0003913c blx 0x15558 | r0 = fcn_00015558 ();
0x00039140 mov r4, r0 | r4 = r0;
0x00039142 cmp r0, 0 |
| if (r0 == 0) {
0x00039144 beq 0x3922c | goto label_8;
| }
| label_1:
0x00039146 ldr r3, [pc, 0x130] |
0x00039148 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x0003914a ldr r3, [r3] | r3 = *(0x3927a);
0x0003914c cmp r3, 1 |
| if (r3 > 1) {
0x0003914e ble 0x3917c |
0x00039150 blx 0x15610 | fcn_00015610 ();
0x00039154 ldr r3, [pc, 0x124] | r3 = *(0x3927c);
0x00039156 mov r4, r0 | r4 = r0;
0x00039158 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0003915a movs r1, 0x68 | r1 = 0x68;
0x0003915c ldr r0, [r5, r3] | r0 = *((r5 + r3));
0x0003915e ldr r3, [pc, 0x120] |
0x00039160 ldr r5, [r4] | r5 = *(r4);
0x00039162 ldr r0, [r0] | r0 = *(r0);
0x00039164 add r3, pc | r3 = 0x723ea;
0x00039166 str r1, [sp] | *(sp) = r1;
0x00039168 strd r3, r2, [sp, 4] | __asm ("strd r3, r2, [var_4h]");
0x0003916c movs r1, 1 | r1 = 1;
0x0003916e ldr r3, [pc, 0x114] |
0x00039170 ldr r2, [pc, 0x114] |
0x00039172 add r3, pc | r3 = 0x723fc;
0x00039174 add r2, pc | r2 = 0x72400;
0x00039176 blx 0x15038 | strtok_r ();
0x0003917a str r5, [r4] | *(r4) = r5;
| }
0x0003917c ldr r1, [pc, 0x10c] |
0x0003917e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00039180 add r1, pc | r1 = 0x72410;
0x00039182 blx 0x14644 | r0 = fcn_00014644 ();
0x00039186 mov r7, r0 | r7 = r0;
0x00039188 cmp r0, 0 |
| if (r0 == 0) {
0x0003918a beq 0x39250 | goto label_9;
| }
0x0003918c ldr r5, [pc, 0x100] |
0x0003918e add r5, pc | r5 = 0x72422;
0x00039190 add.w r6, r5, 0x800 | r6 = r5 + 0x800;
| label_0:
0x00039194 ldr r3, [r5] | r3 = *(r5);
0x00039196 vdup.32 d8, r5 | __asm ("vdup.32 d8, r5");
0x0003919a mov r0, r3 | r0 = r3;
0x0003919c cmp r5, r3 |
0x0003919e ldr r4, [r0], -0x14 | r4 = *(r0);
| r0 += -0x14;
0x000391a2 sub.w r4, r4, 0x14 | r4 -= 0x14;
| if (r5 == r3) {
0x000391a6 beq 0x391bc | goto label_10;
| }
| do {
0x000391a8 blx 0x14adc | fcn_00014adc ();
0x000391ac add.w r3, r4, 0x14 | r3 = r4 + 0x14;
0x000391ae lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x000391b0 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x000391b2 cmp r3, r5 |
0x000391b4 mov r0, r4 | r0 = r4;
0x000391b6 sub.w r4, r2, 0x14 | r4 = r2 - 0x14;
0x000391ba bne 0x391a8 |
| } while (r3 != r5);
| label_10:
0x000391bc vst1.32 {d8}, [r5]! | __asm ("vst1.32 {d8}, [r5]!");
0x000391c0 cmp r5, r6 |
| if (r5 != r6) {
0x000391c2 bne 0x39194 | goto label_0;
| }
0x000391c4 add r0, sp, 0x10 | r0 += var_10h;
0x000391c6 bl 0x45354 | r0 = fcn_00045354 (r0);
0x000391ca cmp r0, 0 |
0x000391cc it lt |
| if (r0 >= 0) {
0x000391ce movlt r4, -1 | r4 = -1;
| }
| if (r0 >= 0) {
0x000391d2 blt 0x39202 |
0x000391d4 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000391d6 mov.w r1, 0x4000 | r1 = 0x4000;
0x000391da mov r0, r7 | r0 = r7;
0x000391dc bl 0x45314 | fcn_00045314 (r0, r1, r2);
0x000391e0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000391e2 mov r5, r0 | r5 = r0;
0x000391e4 bl 0x4552c | fcn_0004552c (r0, r1);
0x000391e8 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000391ea bl 0x46104 | r0 = fcn_00046104 (r0, r1);
0x000391ee mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x000391f0 cbnz r0, 0x39242 | goto label_11;
| }
0x000391f2 ldr r3, [pc, 0xa0] |
0x000391f4 ldr r2, [sp, 0x58] | r2 = var_58h;
0x000391f6 add r3, pc | r3 = 0x72490;
0x000391f8 str.w r2, [r3, 0x800] | __asm ("str.w r2, [r3, 0x800]");
| label_4:
0x000391fc ldr r0, [sp, 0x10] | r0 = var_10h;
0x000391fe bl 0x45e18 | fcn_00045e18 (r0);
| }
0x00039202 mov r0, r7 | r0 = r7;
0x00039204 blx 0x144b0 | printf_chk ()
| label_2:
0x00039208 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0003920a blx 0x14868 | fcn_00014868 ();
| label_5:
0x0003920e ldr r2, [pc, 0x88] |
0x00039210 ldr r3, [pc, 0x50] | r3 = *(0x39264);
0x00039212 add r2, pc | r2 = 0x724b0;
0x00039214 ldr r3, [r2, r3] | r3 = *(0x724b0);
0x00039216 ldr r2, [r3] | r2 = *(0x724b0);
0x00039218 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0003921a eors r2, r3 | r2 ^= r3;
0x0003921c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00039220 bne 0x3925c | goto label_12;
| }
0x00039222 mov r0, r4 | r0 = r4;
0x00039224 add sp, 0x7c |
0x00039226 vpop {d8} | __asm ("vpop {d8}");
0x0003922a pop {r4, r5, r6, r7, pc} |
| label_8:
0x0003922c ldr r3, [pc, 0x6c] |
0x0003922e ldr r2, [sp, 0x58] | r2 = var_58h;
0x00039230 add r3, pc |
0x00039232 ldr.w r3, [r3, 0x800] | r3 = *(0x72cd0);
0x00039236 cmp r2, r3 |
| if (r2 != r3) {
0x00039238 bne 0x39146 | goto label_1;
| }
0x0003923a b 0x39208 | goto label_2;
| label_6:
0x0003923c ldr r3, [pc, 0x60] |
0x0003923e add r3, pc | r3 = 0x724e2;
0x00039240 b 0x39120 | goto label_3;
| label_11:
0x00039242 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00039244 mov r0, r5 | r0 = r5;
0x00039246 mvn r4, 0x1d | r4 = ~0x1d;
0x0003924a bl 0x45d88 | fcn_00045d88 (r0, r1);
0x0003924e b 0x391fc | goto label_4;
| label_9:
0x00039250 mvn r4, 0x1c | r4 = ~0x1c;
0x00039254 b 0x39208 | goto label_2;
| label_7:
0x00039256 mvn r4, 4 | r4 = ~4;
0x0003925a b 0x3920e | goto label_5;
| label_12:
0x0003925c blx 0x15004 | r0 = fcn_00015004 ();
0x00039260 adds r0, r0, r0 | r0 += r0;
0x00039262 movs r2, r0 | r2 = r0;
0x00039264 lsls r0, r5, 0x1b | r0 = r5 << 0x1b;
0x00039266 movs r0, r0 |
0x00039268 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/libnl-route-3.so.200.26.0 @ 0x19584 */
| #include <stdint.h>
|
; (fcn) sym.rtnl_classid_generate () | void rtnl_classid_generate (int16_t arg1, int16_t arg2, uint32_t arg3) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_14h;
| int32_t var_14h_2;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00019584 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00019588 cmn.w r2, 0xf |
0x0001958c it ne |
| if (r2 != 0xf) {
0x0001958e cmpne r2, -1 | __asm ("cmpne r2, -1");
| }
0x00019592 ldr r4, [pc, 0x1cc] |
0x00019594 sub sp, 0x28 |
0x00019596 mov r6, r0 | r6 = r0;
0x00019598 mov r7, r1 | r7 = r1;
0x0001959a ldr r3, [pc, 0x1c8] | r3 = *(0x19766);
0x0001959c add r4, pc | r4 = 0x32d02;
0x0001959e ldr.w r8, [pc, 0x1c8] |
0x000195a2 ldr r3, [r4, r3] |
0x000195a4 add r8, pc | r8 = 0x32d12;
0x000195a6 ldr r3, [r3] | r3 = *(0x32d02);
0x000195a8 str r3, [sp, 0x24] | var_24h = r3;
0x000195aa mov.w r3, 0 | r3 = 0;
| if (r2 != 0xf) {
0x000195ae bne 0x196a2 | goto label_8;
| }
0x000195b0 ldr.w sb, [pc, 0x1b8] |
0x000195b4 add.w sl, sp, 0x1c | sl += var_1ch;
0x000195b8 ldr r4, [pc, 0x1b4] |
0x000195ba add r5, sp, 0x14 | r5 += var_14h;
0x000195bc add sb, pc |
0x000195be add.w sb, sb, 0x800 | sb = 0x3352c;
0x000195c2 add r4, pc | r4 = 0x32d36;
| do {
0x000195c4 ldr r3, [r4] | r3 = *(r4);
0x000195c6 movs r1, 0 | r1 = 0;
0x000195c8 ldr r2, [pc, 0x1a8] |
0x000195ca strd r1, r1, [sl] | __asm ("strd r1, r1, [sl]");
0x000195ce mov r1, sb | r1 = sb;
0x000195d0 cmn.w r3, 0x20000 |
0x000195d4 add.w ip, r3, 0x10000 |
0x000195d8 ldr r3, [pc, 0x19c] |
0x000195da itet eq |
| if (r3 != 0x20000) {
0x000195dc moveq r0, 0x40000000 | r0 = 0x40000000;
| }
| if (r3 != 0x20000) {
0x000195e0 moveq r0, ip | r0 = ip;
| }
| if (r3 == 0x20000) {
0x000195e2 mov ip, r0 |
| }
0x000195e4 str r0, [r4] | *(r4) = r0;
0x000195e6 add r2, pc | r2 = 0x32d5e;
0x000195e8 add r3, pc | r3 = 0x32d64;
0x000195ea mov r0, r5 | r0 = r5;
0x000195ec strd ip, r3, [sp, 0x14] | __asm ("strd ip, r3, [var_14h]");
0x000195f0 blx 0x14a3c | r0 = fcn_00014a3c ();
| if (r0 == 0) {
0x000195f4 cbz r0, 0x195fe | goto label_9;
| }
0x000195f6 ldr r3, [r0] | r3 = *(r0);
0x000195f8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000195fa cmp r3, 0 |
0x000195fc bne 0x195c4 |
| } while (r3 != 0);
| label_9:
0x000195fe ldr r3, [pc, 0x17c] |
0x00019600 add r3, pc | r3 = 0x32d82;
0x00019602 ldr r4, [r3] | r4 = *(0x32d82);
| do {
| label_0:
0x00019604 ldr r3, [pc, 0x178] |
0x00019606 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0001960a ldr r3, [r3] | r3 = *(0x19780);
0x0001960c cmp r3, 1 |
| if (r3 > 1) {
0x0001960e bgt 0x196f8 | goto label_10;
| }
| label_3:
0x00019610 ldr r0, [pc, 0x170] |
0x00019612 add r0, pc | r0 = 0x32d9a;
0x00019614 blx 0x144c8 | r0 = fcn_000144c8 ();
0x00019618 mov r3, r0 | r3 = r0;
0x0001961a cmp r0, 0 |
| if (r0 == 0) {
0x0001961c beq.w 0x1973a | goto label_11;
| }
| label_5:
0x00019620 ldr r2, [pc, 0x164] |
0x00019622 mov r0, r5 | r0 = r5;
0x00019624 movs r1, 1 | r1 = 1;
0x00019626 add r2, pc | r2 = 0x32db2;
0x00019628 str r2, [sp] | *(sp) = r2;
0x0001962a ldr r2, [pc, 0x160] |
0x0001962c add r2, pc | r2 = 0x32dbe;
0x0001962e blx 0x148cc | r0 = fcn_000148cc ();
0x00019632 cmp r0, 0 |
| if (r0 < 0) {
0x00019634 blt.w 0x19746 | goto label_12;
| }
0x00019638 ldr r1, [pc, 0x154] |
0x0001963a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0001963c add r1, pc | r1 = 0x32dd0;
0x0001963e blx 0x14644 | r0 = fcn_00014644 ();
0x00019642 mov r5, r0 | r5 = r0;
0x00019644 cmp r0, 0 |
| if (r0 == 0) {
0x00019646 beq.w 0x19750 | goto label_13;
| }
0x0001964a ldr r2, [pc, 0x148] |
0x0001964c lsrs r3, r4, 0x10 | r3 = r4 >> 0x10;
0x0001964e movs r1, 1 | r1 = 1;
0x00019650 add r2, pc | r2 = 0x32dea;
0x00019652 blx 0x15038 | strtok_r ();
0x00019656 uxth r3, r4 | r3 = (int16_t) r4;
0x00019658 cmp r3, 0 |
| if (r3 != 0) {
0x0001965a bne 0x1972c | goto label_14;
| }
| label_4:
0x0001965c ldr r2, [pc, 0x138] |
0x0001965e mov r3, r6 | r3 = r6;
0x00019660 movs r1, 1 | r1 = 1;
0x00019662 mov r0, r5 | r0 = r5;
0x00019664 add r2, pc | r2 = 0x32e00;
0x00019666 blx 0x15038 | strtok_r ();
0x0001966a mov r0, r5 | r0 = r5;
0x0001966c blx 0x144b0 | printf_chk ()
0x00019670 mov r1, r6 | r1 = r6;
0x00019672 mov r0, r4 | r0 = r4;
0x00019674 bl 0x190cc | r0 = fcn_000190cc (r0, r1);
0x00019678 cmp r0, 0 |
| if (r0 < 0) {
0x0001967a blt 0x19740 | goto label_15;
| }
| label_6:
0x0001967c movs r5, 0 | r5 = 0;
0x0001967e str r4, [r7] | *(r7) = r4;
| label_7:
0x00019680 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00019682 blx 0x14868 | fcn_00014868 ();
| label_2:
0x00019686 ldr r2, [pc, 0x114] |
0x00019688 ldr r3, [pc, 0xd8] | r3 = *(0x19764);
0x0001968a add r2, pc | r2 = 0x32e2c;
0x0001968c ldr r3, [r2, r3] | r3 = *(0x32e2c);
0x0001968e ldr r2, [r3] | r2 = *(0x32e2c);
0x00019690 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00019692 eors r2, r3 | r2 ^= r3;
0x00019694 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00019698 bne 0x1974c | goto label_16;
| }
0x0001969a mov r0, r5 | r0 = r5;
0x0001969c add sp, 0x28 |
0x0001969e pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_8:
0x000196a2 lsrs r4, r2, 0x10 | r4 = r2 >> 0x10;
0x000196a4 ldr.w sb, [pc, 0xf8] |
0x000196a8 ldr.w sl, [pc, 0xf8] |
0x000196ac movw r3, 0xffff | r3 = 0xffff;
0x000196b0 lsls r4, r4, 0x10 | r4 <<= 0x10;
0x000196b2 add sb, pc |
0x000196b4 adds r4, 1 | r4++;
0x000196b6 add sl, pc | sl = 0x32e5e;
0x000196b8 uxth r2, r4 | r2 = (int16_t) r4;
0x000196ba add.w sb, sb, 0x800 | sb = 0x33656;
0x000196be cmp r2, r3 |
| if (r2 == r3) {
0x000196c0 beq 0x196f2 | goto label_17;
| }
| label_1:
0x000196c2 ldr r2, [pc, 0xe4] |
0x000196c4 add r5, sp, 0x14 | r5 += var_14h;
0x000196c6 movs r3, 0 | r3 = 0;
0x000196c8 mov r1, sb | r1 = sb;
0x000196ca mov r0, r5 | r0 = r5;
0x000196cc str r3, [sp, 0x1c] | var_1ch = r3;
0x000196ce add r2, pc | r2 = 0x32e7c;
0x000196d0 strd r4, sl, [sp, 0x14] | __asm ("strd r4, sl, [var_14h]");
0x000196d4 str r3, [sp, 0x20] | var_20h = r3;
0x000196d6 blx 0x14a3c | r0 = fcn_00014a3c ();
0x000196da cmp r0, 0 |
0x000196dc beq 0x19604 |
| } while (r0 == 0);
0x000196de ldr r3, [r0] | r3 = *(r0);
0x000196e0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000196e2 cmp r3, 0 |
| if (r3 == 0) {
0x000196e4 beq 0x19604 | goto label_0;
| }
0x000196e6 adds r4, 1 | r4++;
0x000196e8 movw r3, 0xffff | r3 = 0xffff;
0x000196ec uxth r2, r4 | r2 = (int16_t) r4;
0x000196ee cmp r2, r3 |
| if (r2 != r3) {
0x000196f0 bne 0x196c2 | goto label_1;
| }
| label_17:
0x000196f2 mvn r5, 7 | r5 = ~7;
0x000196f6 b 0x19686 | goto label_2;
| label_10:
0x000196f8 blx 0x15610 | fcn_00015610 ();
0x000196fc ldr r3, [pc, 0xac] | r3 = *(0x197ac);
0x000196fe mov sb, r0 | sb = r0;
0x00019700 ldr r2, [pc, 0xac] |
0x00019702 movs r1, 1 | r1 = 1;
0x00019704 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00019708 ldr.w r8, [sb] | r8 = *(sb);
0x0001970c add r2, pc | r2 = 0x32ec0;
0x0001970e ldr r0, [r3] | r0 = *(0x197ac);
0x00019710 ldr r3, [pc, 0xa0] |
0x00019712 add r3, pc | r3 = 0x32eca;
0x00019714 strd r3, r4, [sp, 4] | __asm ("strd r3, r4, [var_4h]");
0x00019718 mov.w r3, 0x18a | r3 = 0x18a;
0x0001971c str r3, [sp] | *(sp) = r3;
0x0001971e ldr r3, [pc, 0x98] |
0x00019720 add r3, pc | r3 = 0x32ede;
0x00019722 blx 0x15038 | strtok_r ();
0x00019726 str.w r8, [sb] | __asm ("str.w r8, [sb]");
0x0001972a b 0x19610 | goto label_3;
| label_14:
0x0001972c ldr r2, [pc, 0x8c] |
0x0001972e movs r1, 1 | r1 = 1;
0x00019730 mov r0, r5 | r0 = r5;
0x00019732 add r2, pc | r2 = 0x32ef2;
0x00019734 blx 0x15038 | strtok_r ();
0x00019738 b 0x1965c | goto label_4;
| label_11:
0x0001973a ldr r3, [pc, 0x84] |
0x0001973c add r3, pc | r3 = 0x32f02;
0x0001973e b 0x19620 | goto label_5;
| label_15:
0x00019740 blx 0x14660 | memset (r0, r1, r2);
0x00019744 b 0x1967c | goto label_6;
| label_12:
0x00019746 mvn r5, 4 | r5 = ~4;
0x0001974a b 0x19686 | goto label_2;
| label_16:
0x0001974c blx 0x15004 | fcn_00015004 ();
| label_13:
0x00019750 blx 0x15610 | r0 = fcn_00015610 ();
0x00019754 ldr r0, [r0] | r0 = *(r0);
0x00019756 blx 0x149dc | r0 = fcn_000149dc ();
0x0001975a rsbs r5, r0, 0 | r5 = r0 - ;
0x0001975c b 0x19680 | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libnl-route-3.so.200.26.0 @ 0x3d310 */
| #include <stdint.h>
|
; (fcn) sym.rtnl_netem_set_delay_distribution_data () | void rtnl_netem_set_delay_distribution_data (int16_t arg2, int16_t arg3) {
| int16_t var_0h_7;
| int16_t var_4h_7;
| r1 = arg2;
| r2 = arg3;
0x0003d310 push {r4, r5, r6, r7, lr} |
0x0003d312 sub sp, 0xc |
0x0003d314 mov r7, r1 | r7 = r1;
0x0003d316 mov r5, r2 | r5 = r2;
0x0003d318 blx 0x15498 | fcn_00015498 ();
0x0003d31c ldr r3, [pc, 0x7c] |
0x0003d31e add r3, pc | r3 = 0x7a6be;
| if (r0 == 0) {
0x0003d320 cbz r0, 0x3d35e | goto label_1;
| }
0x0003d322 cmp.w r5, 0x10000 |
| if (r5 > 0x10000) {
0x0003d326 bhi 0x3d358 | goto label_2;
| }
0x0003d328 mov r4, r0 | r4 = r0;
0x0003d32a movs r1, 2 | r1 = 2;
0x0003d32c mov r0, r5 | r0 = r5;
0x0003d32e blx 0x14588 | r0 = fcn_00014588 ();
0x0003d332 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x0003d334 cbz r0, 0x3d394 | goto label_3;
| }
0x0003d336 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x0003d338 blx 0x14868 | fcn_00014868 ();
0x0003d33c lsls r2, r5, 1 | r2 = r5 << 1;
0x0003d33e mov r1, r7 | r1 = r7;
0x0003d340 mov r0, r6 | r0 = r6;
0x0003d342 str r6, [r4, 0x38] | *((r4 + 0x38)) = r6;
0x0003d344 blx 0x14b74 | fcn_00014b74 ();
0x0003d348 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0003d34a movs r0, 0 | r0 = 0;
0x0003d34c str r5, [r4, 0x3c] | *((r4 + 0x3c)) = r5;
0x0003d34e orr r3, r3, 0x2000 | r3 |= 0x2000;
0x0003d352 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| do {
| label_0:
0x0003d354 add sp, 0xc |
0x0003d356 pop {r4, r5, r6, r7, pc} |
| label_2:
0x0003d358 mvn r0, 6 | r0 = ~6;
0x0003d35c b 0x3d354 |
| } while (1);
| label_1:
0x0003d35e ldr r2, [pc, 0x40] | r2 = *(0x3d3a2);
0x0003d360 movw r6, 0x36f | r6 = 0x36f;
0x0003d364 ldr r5, [pc, 0x3c] |
0x0003d366 movs r1, 1 | r1 = 1;
0x0003d368 ldr r4, [pc, 0x3c] |
0x0003d36a ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x0003d36c add r5, pc | r5 = 0x7a714;
0x0003d36e str r6, [sp] | *(sp) = r6;
0x0003d370 add.w r3, r5, 0x618 | r3 = r5 + 0x618;
0x0003d374 add r4, pc | r4 = 0x7a720;
0x0003d376 str r3, [sp, 4] | var_4h_7 = r3;
0x0003d378 mov r3, r4 | r3 = r4;
0x0003d37a ldr r0, [r2] | r0 = *(0x3d3a2);
0x0003d37c ldr r2, [pc, 0x2c] |
0x0003d37e add r2, pc | r2 = 0x7a72e;
0x0003d380 blx 0x15038 | strtok_r ();
0x0003d384 ldr r0, [pc, 0x28] |
0x0003d386 add.w r3, r5, 0x640 | r3 = r5 + 0x640;
0x0003d38a mov r2, r6 | r2 = r6;
0x0003d38c mov r1, r4 | r1 = r4;
0x0003d38e add r0, pc | r0 = 0x7a742;
0x0003d390 blx 0x14728 | fcn_00014728 ();
| label_3:
0x0003d394 mvn r0, 4 | r0 = ~4;
0x0003d398 b 0x3d354 | 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/libnl-route-3.so.200.26.0 @ 0x3d3b4 */
| #include <stdint.h>
|
; (fcn) sym.rtnl_netem_set_delay_distribution () | void rtnl_netem_set_delay_distribution (int16_t arg1, int16_t arg2) {
| int16_t var_0h_6;
| int16_t var_4h_6;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_144h;
| r0 = arg1;
| r1 = arg2;
0x0003d3b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003d3b8 mov r7, r1 | r7 = r1;
0x0003d3ba ldr r1, [pc, 0x188] |
0x0003d3bc sub sp, 0x14c |
0x0003d3be mov.w r3, 0x800 | r3 = 0x800;
0x0003d3c2 add r6, sp, 0x1c | r6 += var_1ch;
0x0003d3c4 ldr r2, [pc, 0x180] | r2 = *(0x3d548);
0x0003d3c6 add.w sb, sp, 0x3c | sb += var_3ch;
0x0003d3ca add r1, pc | r1 = 0x7a914;
0x0003d3cc str r0, [sp, 0x14] | var_14h = r0;
0x0003d3ce ldr r5, [pc, 0x17c] |
0x0003d3d0 add.w r8, sp, 0x28 | r8 += var_28h;
0x0003d3d4 ldr r2, [r1, r2] |
0x0003d3d6 mov ip, r8 |
0x0003d3d8 add r4, sp, 0x20 | r4 += var_20h;
0x0003d3da mov.w sl, 0 | sl = 0;
0x0003d3de add r5, pc | r5 = 0x7a930;
0x0003d3e0 ldr r2, [r2] | r2 = *(0x7a914);
0x0003d3e2 str r2, [sp, 0x144] | var_144h = r2;
0x0003d3e4 mov.w r2, 0 | r2 = 0;
0x0003d3e8 str r3, [r6] | *(r6) = r3;
0x0003d3ea ldr r3, [pc, 0x164] |
0x0003d3ec adds r5, 0x54 | r5 += 0x54;
0x0003d3ee str.w sl, [r4] | __asm ("str.w sl, [r4]");
0x0003d3f2 add r3, pc | r3 = 0x7a948;
0x0003d3f4 ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x0003d3f8 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0003d3fc strh.w r1, [sp, 0x40] | var_40h = r1;
0x0003d400 ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x0003d402 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0003d406 mov r1, sb | r1 = sb;
0x0003d408 ldr r3, [r5] | r3 = *(0x7a930);
0x0003d40a mov r0, r7 | r0 = r7;
0x0003d40c str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x0003d410 blx 0x14e6c | r0 = fcn_00014e6c ();
| if (r0 != 0) {
0x0003d414 cbz r0, 0x3d422 |
0x0003d416 blx 0x14b20 | r0 = fcn_00014b20 ();
0x0003d41a cmp r0, 5 |
0x0003d41c it eq |
| if (r0 == 5) {
0x0003d41e strbeq sl, [sb] | *(sb) = sl;
| goto label_5;
| }
| }
| label_5:
0x0003d422 ldr.w fp, [pc, 0x130] |
0x0003d426 add.w sl, sp, 0x44 | sl += var_44h;
0x0003d42a ldr r3, [pc, 0x12c] |
0x0003d42c add fp, pc | fp = 0x7a986;
0x0003d42e add r3, pc | r3 = 0x7a98c;
0x0003d430 str r3, [sp, 0x10] | var_10h = r3;
| label_4:
0x0003d432 strd r7, sb, [sp, 8] | __asm ("strd r7, sb, [sp, 8]");
0x0003d436 movs r2, 1 | r2 = 1;
0x0003d438 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0003d43c mov r0, sl | r0 = sl;
0x0003d43e ldr.w r3, [r8] | r3 = *(r8);
0x0003d442 str r3, [sp, 4] | var_4h_6 = r3;
0x0003d444 movs r3, 0xff | r3 = 0xff;
0x0003d446 mov r1, r3 | r1 = r3;
0x0003d448 blx 0x14e18 | fcn_00014e18 ();
0x0003d44c ldr r1, [sp, 0x10] | r1 = var_10h;
0x0003d44e mov r0, sl | r0 = sl;
0x0003d450 blx 0x14644 | r0 = fcn_00014644 ();
0x0003d454 mov r5, r0 | r5 = r0;
0x0003d456 cmp r0, 0 |
| if (r0 == 0) {
0x0003d458 beq 0x3d52c | goto label_6;
| }
0x0003d45a movs r1, 2 | r1 = 2;
0x0003d45c mov.w r0, 0x10000 | r0 = 0x10000;
0x0003d460 blx 0x14588 | fcn_00014588 ();
0x0003d464 ldr r1, [r6] | r1 = *(r6);
0x0003d466 mov sl, r0 | sl = r0;
0x0003d468 movs r0, 1 | r0 = 1;
0x0003d46a adds r1, 1 | r1++;
0x0003d46c blx 0x14588 | fcn_00014588 ();
0x0003d470 str r0, [r4] | *(r4) = r0;
0x0003d472 cmp.w sl, 0 |
| if (sl == 0) {
0x0003d476 beq 0x3d520 | goto label_7;
| }
0x0003d478 movs r7, 0 | r7 = 0;
0x0003d47a add.w r8, sp, 0x24 | r8 += var_24h;
0x0003d47e cmp r0, 0 |
| if (r0 == 0) {
0x0003d480 beq 0x3d514 | goto label_8;
| }
| do {
| label_0:
0x0003d482 mov r3, r5 | r3 = r5;
0x0003d484 movs r2, 0xa | r2 = 0xa;
0x0003d486 mov r1, r6 | r1 = r6;
0x0003d488 mov r0, r4 | r0 = r4;
0x0003d48a blx 0x15044 | nl_addr_clone ();
0x0003d48e adds r0, 1 | r0++;
| if (r0 == 1) {
0x0003d490 beq 0x3d4fc | goto label_9;
| }
0x0003d492 ldr.w fp, [r4] | fp = *(r4);
0x0003d496 ldrb.w r3, [fp] | r3 = *(fp);
0x0003d49a cmp r3, 0x23 |
0x0003d49c it ne |
| if (r3 != 0x23) {
0x0003d49e cmpne r3, 0xa | __asm ("cmpne r3, 0xa");
| }
0x0003d4a0 beq 0x3d482 |
| } while (r3 == 0x23);
0x0003d4a2 add.w sb, sl, r7, lsl 1 | sb = sl + (r7 << 1);
0x0003d4a6 b 0x3d4b0 | goto label_10;
| label_1:
0x0003d4a8 adds r7, 1 | r7++;
0x0003d4aa mov fp, r3 |
0x0003d4ac strh r0, [sb], 2 | *(sb) = r0;
| sb += 2;
| label_10:
0x0003d4b0 movs r2, 0 | r2 = 0;
0x0003d4b2 mov r1, r8 | r1 = r8;
0x0003d4b4 mov r0, fp | r0 = fp;
0x0003d4b6 blx 0x14c6c | raise (r0);
0x0003d4ba ldr.w r3, [r8] | r3 = *(r8);
0x0003d4be cmp r3, fp |
| if (r3 == fp) {
0x0003d4c0 beq 0x3d482 | goto label_0;
| }
0x0003d4c2 cmp.w r7, 0x10000 |
| if (r7 < 0x10000) {
0x0003d4c6 blt 0x3d4a8 | goto label_1;
| }
0x0003d4c8 mov r0, r5 | r0 = r5;
0x0003d4ca mvn r5, 6 | r5 = ~6;
0x0003d4ce blx 0x144b0 | printf_chk ()
| do {
| label_2:
0x0003d4d2 mov r0, sl | r0 = sl;
0x0003d4d4 blx 0x14868 | fcn_00014868 ();
| label_3:
0x0003d4d8 ldr r0, [r4] | r0 = *(r4);
| if (r0 != 0) {
0x0003d4da cbz r0, 0x3d4e0 |
0x0003d4dc blx 0x14868 | fcn_00014868 ();
| }
0x0003d4e0 ldr r2, [pc, 0x78] |
0x0003d4e2 ldr r3, [pc, 0x64] | r3 = *(0x3d54a);
0x0003d4e4 add r2, pc | r2 = 0x7aa44;
0x0003d4e6 ldr r3, [r2, r3] | r3 = *(0x7aa44);
0x0003d4e8 ldr r2, [r3] | r2 = *(0x7aa44);
0x0003d4ea ldr r3, [sp, 0x144] | r3 = var_144h;
0x0003d4ec eors r2, r3 | r2 ^= r3;
0x0003d4ee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003d4f2 bne 0x3d510 | goto label_11;
| }
0x0003d4f4 mov r0, r5 | r0 = r5;
0x0003d4f6 add sp, 0x14c |
0x0003d4f8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0003d4fc mov r0, r5 | r0 = r5;
0x0003d4fe blx 0x144b0 | printf_chk ()
0x0003d502 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0003d504 mov r2, r7 | r2 = r7;
0x0003d506 mov r1, sl | r1 = sl;
0x0003d508 blx 0x1469c | r0 = fcn_0001469c ();
0x0003d50c mov r5, r0 | r5 = r0;
0x0003d50e b 0x3d4d2 |
| } while (1);
| label_11:
0x0003d510 blx 0x15004 | fcn_00015004 ();
| label_8:
0x0003d514 mov r0, r5 | r0 = r5;
0x0003d516 mvn r5, 4 | r5 = ~4;
0x0003d51a blx 0x144b0 | printf_chk ()
0x0003d51e b 0x3d4d2 | goto label_2;
| label_7:
0x0003d520 mov r0, r5 | r0 = r5;
0x0003d522 mvn r5, 4 | r5 = ~4;
0x0003d526 blx 0x144b0 | printf_chk ()
0x0003d52a b 0x3d4d8 | goto label_3;
| label_6:
0x0003d52c add.w r8, r8, 4 | r8 += 4;
0x0003d530 cmp r8, sb |
| if (r8 != sb) {
0x0003d532 bne.w 0x3d432 | goto label_4;
| }
0x0003d536 blx 0x15610 | r0 = fcn_00015610 ();
0x0003d53a ldr r0, [r0] | r0 = *(r0);
0x0003d53c blx 0x149dc | r0 = fcn_000149dc ();
0x0003d540 rsbs r5, r0, 0 | r5 = r0 - ;
0x0003d542 b 0x3d4d8 | goto label_3;
| }
[*] Function printf used 7 times libnl-route-3.so.200.26.0