[*] Binary protection state of macsec.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function fprintf tear down of macsec.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/drivers/net/macsec.ko @ 0x8000328 */
| #include <stdint.h>
|
; (fcn) sym.macsec_changelink_common () | void macsec_changelink_common (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x08000328 push {r4, lr} |
0x0800032c mov r4, r0 | r4 = r0;
0x08000330 ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x08000334 sub sp, sp, 8 |
0x08000338 cmp r3, 0 |
| if (r3 != 0) {
0x0800033c beq 0x800035c |
0x08000340 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x08000344 strb r3, [r0, 0x561] | *((r0 + 0x561)) = r3;
0x08000348 add r3, r0, r3, lsl 2 | r3 = r0 + (r3 << 2);
0x0800034c ldr r3, [r3, 0x568] | r3 = *((r3 + 0x568));
0x08000350 cmp r3, 0 |
| if (r3 == 0) {
0x08000354 ldrbne r3, [r3, 0x34] | r3 = *((r3 + 0x34));
| }
0x08000358 strb r3, [r0, 0x559] | *((r0 + 0x559)) = r3;
| }
0x0800035c ldr r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x08000360 cmp r3, 0 |
| if (r3 == 0) {
0x08000364 ldrne r3, [r3, 4] | r3 = *((r3 + 4));
| }
| if (r3 == 0) {
0x08000368 strne r3, [r4, 0x55c] | *((r4 + 0x55c)) = r3;
| }
0x0800036c ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x08000370 cmp r3, 0 |
| if (r3 != 0) {
0x08000374 beq 0x8000388 |
0x08000378 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0800037c subs r3, r3, 0 |
| if (r3 == r3) {
0x08000380 movne r3, 1 | r3 = 1;
| }
0x08000384 strb r3, [r4, 0x562] | *((r4 + 0x562)) = r3;
| }
0x08000388 ldr r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x0800038c cmp r3, 0 |
| if (r3 != 0) {
0x08000390 beq 0x80003a4 |
0x08000394 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x08000398 subs r3, r3, 0 |
| if (r3 == r3) {
0x0800039c movne r3, 1 | r3 = 1;
| }
0x080003a0 strb r3, [r4, 0x55a] | *((r4 + 0x55a)) = r3;
| }
0x080003a4 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x080003a8 cmp r3, 0 |
| if (r3 != 0) {
0x080003ac beq 0x80003c0 |
0x080003b0 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x080003b4 subs r3, r3, 0 |
| if (r3 == r3) {
0x080003b8 movne r3, 1 | r3 = 1;
| }
0x080003bc strb r3, [r4, 0x563] | *((r4 + 0x563)) = r3;
| }
0x080003c0 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x080003c4 cmp r3, 0 |
| if (r3 != 0) {
0x080003c8 beq 0x80003dc |
0x080003cc ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x080003d0 subs r3, r3, 0 |
| if (r3 == r3) {
0x080003d4 movne r3, 1 | r3 = 1;
| }
0x080003d8 strb r3, [r4, 0x564] | *((r4 + 0x564)) = r3;
| }
0x080003dc ldr r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x080003e0 cmp r3, 0 |
| if (r3 != 0) {
0x080003e4 beq 0x80003f8 |
0x080003e8 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x080003ec subs r3, r3, 0 |
| if (r3 == r3) {
0x080003f0 movne r3, 1 | r3 = 1;
| }
0x080003f4 strb r3, [r4, 0x565] | *((r4 + 0x565)) = r3;
| }
0x080003f8 ldr r3, [r1, 0x30] | r3 = *((r1 + 0x30));
0x080003fc cmp r3, 0 |
| if (r3 != 0) {
0x08000400 beq 0x8000414 |
0x08000404 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x08000408 subs r3, r3, 0 |
| if (r3 == r3) {
0x0800040c movne r3, 1 | r3 = 1;
| }
0x08000410 strb r3, [r4, 0x55b] | *((r4 + 0x55b)) = r3;
| }
0x08000414 ldr r3, [r1, 0x34] | r3 = *((r1 + 0x34));
0x08000418 cmp r3, 0 |
| if (r3 == 0) {
0x0800041c ldrbne r3, [r3, 4] | r3 = *((r3 + 4));
| }
| if (r3 == 0) {
0x08000420 strne r3, [r4, 0x554] | *((r4 + 0x554)) = r3;
| }
0x08000424 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x08000428 cmp r1, 0 |
| if (r1 == 0) {
0x0800042c beq 0x80004c8 | goto label_1;
| }
0x08000430 mov r2, 8 | r2 = 8;
0x08000434 mov r0, sp | r0 = sp;
0x08000438 stmdaeq r0, {r1, r3, r4, r5, r6, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r4, r5, r6, r8, sp, pc}");
0x0800043c ldr r3, [sp] | r3 = *(sp);
0x08000440 ldr r2, [sp, 4] | r2 = var_4h;
0x08000444 mov r0, 1 |
0x08000448 movt r0, 0x100 | r0 = 0x1000001;
0x0800044c mov r1, 0x200 |
0x08000450 movt r1, 0x80 | r1 = 0x800200;
0x08000454 cmp r2, r1 |
0x08000458 cmpeq r3, r0 | __asm ("cmpeq r3, r0");
| if (r2 == r1) {
0x0800045c beq 0x8000504 | goto label_2;
| }
0x08000460 mvn r1, 0x1000000 | r1 = ~0x1000000;
0x08000464 movw r0, 0x3dff |
0x08000468 movt r0, 0xff7f | r0 = 0xff7f3dff;
0x0800046c adds r1, r3, r1 | r1 = r3 + r1;
0x08000470 adc ip, r2, r0 | __asm ("adc ip, r2, r0");
0x08000474 cmp r1, 4 |
0x08000478 sbcs ip, ip, 0 | __asm ("sbcs ip, ip, 0");
| if (r1 >= 4) {
0x0800047c bhs 0x800051c | goto label_3;
| }
0x08000480 movw r1, 0xfffe |
0x08000484 movt r1, 0xfeff | r1 = 0xfefffffe;
0x08000488 adds r3, r3, r1 | r3 += r1;
0x0800048c adc r2, r2, r0 | __asm ("adc r2, r2, r0");
0x08000490 cmp r3, 3 |
0x08000494 sbcs r2, r2, 0 | __asm ("sbcs r2, r2, 0");
| if (r3 >= 3) {
0x08000498 bhs 0x8000504 | goto label_2;
| }
0x0800049c cmp r3, 2 |
| if (r3 > 2) {
| /* switch table (3 cases) at 0x80004a8 */
0x080004a0 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x080004a4 b 0x8000504 |
| while (1) {
| label_1:
0x080004c8 mov r0, 0 | r0 = 0;
| label_0:
0x080004cc add sp, sp, 8 |
0x080004d0 pop {r4, pc} |
| label_2:
0x08000504 add r2, r4, 0x540 | r2 = r4 + 0x540;
0x08000508 mov r1, 0x10 | r1 = 0x10;
0x0800050c mov r3, 0 | r3 = 0;
0x08000510 strh r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
0x08000514 strb r3, [r4, 0x558] | *((r4 + 0x558)) = r3;
0x08000518 b 0x80004c8 |
| }
| label_3:
0x0800051c mvn r0, 0x15 | r0 = ~0x15;
0x08000520 b 0x80004cc | 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/modules/5.10.52-axis9/kernel/drivers/net/macsec.ko @ 0x8002474 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.macsec_newlink () | void macsec_newlink (int32_t arg1, int32_t arg2) {
| int32_t var_d0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_eh;
| int32_t var_10h;
| r0 = arg1;
| r1 = arg2;
0x08002474 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08002478 mov r6, r3 | r6 = r3;
0x0800247c ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x08002480 sub sp, sp, 0xac |
0x08002484 cmp r3, 0 |
| if (r3 == 0) {
0x08002488 beq 0x8002834 | goto label_9;
| }
0x0800248c mov r4, r1 | r4 = r1;
0x08002490 add sb, r1, 0x540 | sb = r1 + 0x540;
0x08002494 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x08002498 stmdaeq r0, {r1, r2, r3, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, sb, sp, pc}");
0x0800249c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x080024a0 beq 0x8002844 | goto label_10;
| }
0x080024a4 add r3, r5, 0x14c | r3 = r5 + 0x14c;
0x080024a8 ldrh r3, [r3] | r3 = *(r3);
0x080024ac cmp r3, 1 |
| if (r3 != 1) {
0x080024b0 bne 0x8002834 | goto label_9;
| }
0x080024b4 ldr r3, [r4, 0x134] | r3 = *((r4 + 0x134));
0x080024b8 cmp r6, 0 |
0x080024bc str r5, [r4, 0x580] | *((r4 + 0x580)) = r5;
0x080024c0 orr r3, r3, 0x2000000 | r3 |= 0x2000000;
0x080024c4 str r3, [r4, 0x134] | *((r4 + 0x134)) = r3;
| if (r6 == 0) {
0x080024c8 beq 0x8002720 | goto label_11;
| }
0x080024cc ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x080024d0 cmp r3, 0 |
| if (r3 == 0) {
0x080024d4 beq 0x8002604 | goto label_12;
| }
0x080024d8 ldrb r0, [r3, 4] | r0 = *((r3 + 4));
0x080024dc str r0, [r4, 0x594] | *((r4 + 0x594)) = r0;
0x080024e0 cmp r0, 0 |
| if (r0 != 0) {
0x080024e4 beq 0x80024f8 |
0x080024e8 mov r1, sb | r1 = sb;
0x080024ec bl 0x8000070 | r0 = macsec_check_offload ();
0x080024f0 cmp r0, 0 |
| if (r0 == 0) {
0x080024f4 beq 0x800284c | goto label_13;
| }
| }
| label_0:
0x080024f8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x080024fc cmp r3, 0 |
| if (r3 == 0) {
0x08002500 ldrbne sl, [r3, 4] | sl = *((r3 + 4));
| }
| if (r3 == 0) {
0x08002504 movne r2, sl | r2 = sl;
| }
| if (r3 == 0) {
0x08002508 beq 0x8002724 | goto label_14;
| }
| label_1:
0x0800250c ldr r3, [r5, 0x140] | r3 = *((r5 + 0x140));
0x08002510 sub r3, r3, 0x10 | r3 -= 0x10;
0x08002514 sub r3, r3, r2 | r3 -= r2;
0x08002518 bic r3, r3, r3, asr 31 | r3 = BIT_MASK (r3, r3);
0x0800251c str r3, [r4, 0x140] | *((r4 + 0x140)) = r3;
0x08002520 stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr}");
0x08002524 stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr}");
0x08002528 ldr r8, [r5, 0x1e4] | r8 = *((r5 + 0x1e4));
0x0800252c cmp r8, r3 |
0x08002530 cmpne r8, 0 | __asm ("cmpne r8, 0");
| if (r8 != r3) {
0x08002534 bne 0x800283c | goto label_15;
| }
0x08002538 mov r0, r4 | r0 = r4;
0x0800253c stmdaeq r0, {r1, r4, r5, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r4, r5, sb, sp, pc}");
0x08002540 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 < r0) {
0x08002544 blt 0x80025f8 | goto label_8;
| }
0x08002548 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0800254c mov r1, r4 | r1 = r4;
0x08002550 mov r0, r5 | r0 = r5;
0x08002554 stmdaeq r0, {r2, r6, r8, sb, sl, fp, sp, lr} | __asm ("stmdaeq r0, {r2, r6, r8, sb, sl, fp, sp, lr}");
0x08002558 stmdaeq r0, {r2, r6, r8, sb, sl, fp, sp, lr} | __asm ("stmdaeq r0, {r2, r6, r8, sb, sl, fp, sp, lr}");
0x0800255c str r3, [r4, 0x4fc] | *((r4 + 0x4fc)) = r3;
0x08002560 str r3, [r4, 0x500] | *((r4 + 0x500)) = r3;
0x08002564 stmdaeq r0, {r1, r2, r4, r5, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r4, r5, sb, sp, pc}");
0x08002568 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 < r0) {
0x0800256c blt 0x80025ec | goto label_16;
| }
0x08002570 cmp r6, 0 |
| if (r6 == 0) {
0x08002574 beq 0x80027a8 | goto label_17;
| }
0x08002578 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0800257c cmp r1, 0 |
| if (r1 == 0) {
0x08002580 beq 0x800276c | goto label_18;
| }
0x08002584 add r0, sp, 8 | r0 += var_8h;
0x08002588 mov r2, 8 | r2 = 8;
0x0800258c str r0, [sp, 4] | var_4h = r0;
0x08002590 stmdaeq r0, {r1, r3, r4, r5, r6, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r4, r5, r6, r8, sp, pc}");
0x08002594 ldr fp, [sp, 8] | fp = var_8h;
0x08002598 ldr r7, [sp, 0xc] | r7 = var_ch;
| label_4:
0x0800259c cmp r8, 0 |
| if (r8 == 0) {
0x080025a0 beq 0x800260c | goto label_19;
| }
0x080025a4 ldr ip, [r5, 0x1e8] | ip = *((r5 + 0x1e8));
0x080025a8 ldr r2, [ip] | r2 = *(ip);
0x080025ac cmp ip, r2 |
0x080025b0 sub r2, r2, 0x48 | r2 -= 0x48;
| if (ip != r2) {
0x080025b4 bne 0x80025cc | goto label_20;
| }
0x080025b8 b 0x800260c | goto label_19;
| do {
0x080025bc ldr r1, [r2, 0x48] | r1 = *((r2 + 0x48));
0x080025c0 sub r2, r1, 0x48 | r2 = r1 - 0x48;
0x080025c4 cmp ip, r1 |
| if (ip == r1) {
0x080025c8 beq 0x800260c | goto label_19;
| }
| label_20:
0x080025cc ldrd r0, r1, [r2, 8] | __asm ("ldrd r0, r1, [r2, 8]");
0x080025d0 cmp r7, r1 |
0x080025d4 cmpeq fp, r0 | __asm ("cmpeq fp, r0");
0x080025d8 bne 0x80025bc |
| } while (r7 != r1);
0x080025dc mvn r7, 0xf | r7 = ~0xf;
| label_3:
0x080025e0 mov r1, r4 | r1 = r4;
0x080025e4 mov r0, r5 | r0 = r5;
0x080025e8 stmdaeq r0, {r1, r2, r3, r5, r6, r7, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, r5, r6, r7, r8, sp, pc}");
| label_16:
0x080025ec mov r0, r4 | r0 = r4;
0x080025f0 mov r1, 0 | r1 = 0;
0x080025f4 stmdaeq r0, {r1, r3, r5, r6, r7, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r5, r6, r7, r8, sp, pc}");
| label_8:
0x080025f8 mov r0, r7 | r0 = r7;
0x080025fc add sp, sp, 0xac |
0x08002600 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x08002604 str r3, [r4, 0x594] | *((r4 + 0x594)) = r3;
0x08002608 b 0x80024f8 | goto label_0;
| label_19:
0x0800260c mov r2, 0xcc0 | r2 = 0xcc0;
0x08002610 mov r1, 8 | r1 = 8;
0x08002614 mov r0, 0x40 | r0 = 0x40;
0x08002618 stmdaeq r0, {r1, r2, r3, r6, r7, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, r6, r7, r8, sp, pc}");
0x0800261c cmp r0, 0 |
0x08002620 str r0, [r4, 0x584] | *((r4 + 0x584)) = r0;
| if (r0 == 0) {
0x08002624 beq 0x800285c | goto label_21;
| }
0x08002628 mov r2, 0xcc0 | r2 = 0xcc0;
0x0800262c mov r1, 8 | r1 = 8;
0x08002630 mov r0, 0x20 | r0 = 0x20;
0x08002634 stmdaeq r0, {r1, r2, r3, r6, r7, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, r6, r7, r8, sp, pc}");
0x08002638 cmp r0, 0 |
0x0800263c str r0, [r4, 0x578] | *((r4 + 0x578)) = r0;
| if (r0 == 0) {
0x08002640 beq 0x8002854 | goto label_22;
| }
0x08002644 cmn r7, 1 |
0x08002648 cmneq fp, 1 | __asm ("cmneq fp, 1");
| if (r7 == 1) {
0x0800264c beq 0x80027b4 | goto label_23;
| }
| label_5:
0x08002650 movw r2, 0x564 | r2 = 0x564;
0x08002654 str r4, [r4, 0x540] | *((r4 + 0x540)) = r4;
0x08002658 mov r3, 2 | r3 = 2;
0x0800265c strh sl, [sb, 0x12] | *((sb + 0x12)) = sl;
0x08002660 mov r1, 0x10 | r1 = 0x10;
0x08002664 cmp r6, 0 |
0x08002668 strh r1, [sb, 0x10] | *((sb + 0x10)) = r1;
0x0800266c str r3, [r4, 0x554] | *((r4 + 0x554)) = r3;
0x08002670 mov r3, 0x100 |
0x08002674 movt r3, 1 | r3 = 0x10100;
0x08002678 str fp, [r4, 0x548] | *((r4 + 0x548)) = fp;
0x0800267c str r3, [r4, 0x558] | *((r4 + 0x558)) = r3;
0x08002680 mov r3, 1 |
0x08002684 movt r3, 0x100 | r3 = 0x1000001;
0x08002688 str r7, [r4, 0x54c] | *((r4 + 0x54c)) = r7;
0x0800268c str r3, [r4, 0x560] | *((r4 + 0x560)) = r3;
0x08002690 mov r3, 0 | r3 = 0;
0x08002694 strh r3, [r4, r2] | *((r4 + r2)) = r3;
| if (r6 != 0) {
0x08002698 beq 0x80026b0 |
0x0800269c mov r1, r6 | r1 = r6;
0x080026a0 mov r0, r4 | r0 = r4;
0x080026a4 bl 0x8000328 | r0 = macsec_changelink_common ();
0x080026a8 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 != r0) {
0x080026ac bne 0x8002760 | goto label_7;
| }
| }
0x080026b0 ldr r3, [r4, 0x594] | r3 = *((r4 + 0x594));
0x080026b4 sub r3, r3, 1 | r3--;
0x080026b8 cmp r3, 1 |
0x080026bc bls 0x8002730 |
| while (r0 == 0) {
| label_2:
0x080026c0 ldr r6, [r5, 0x1e8] | r6 = *((r5 + 0x1e8));
0x080026c4 cmp r6, 0 |
| if (r6 == 0) {
0x080026c8 movne r1, r6 | r1 = r6;
| }
| if (r6 == 0) {
0x080026cc beq 0x80027e0 | goto label_24;
| }
| label_6:
0x080026d0 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x080026d4 add sb, sb, 0x48 | sb += 0x48;
0x080026d8 str r1, [r4, 0x588] | *((r4 + 0x588)) = r1;
0x080026dc str r3, [r4, 0x58c] | *((r4 + 0x58c)) = r3;
0x080026e0 str sb, [r3] | *(r3) = sb;
0x080026e4 mov r1, r4 | r1 = r4;
0x080026e8 mov r0, r5 | r0 = r5;
0x080026ec str sb, [r6, 4] | *((r6 + 4)) = sb;
0x080026f0 stmdaeq r0, {r1, r5, r6, r7, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r5, r6, r7, r8, sp, pc}");
0x080026f4 mov r0, r4 | r0 = r4;
0x080026f8 stmdaeq r0, {r1, r3, r4, r5, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r4, r5, sb, sp, pc}");
0x080026fc stmdaeq r0, {r3, r6, sl, fp, sp, lr} | __asm ("stmdaeq r0, {r3, r6, sl, fp, sp, lr}");
0x08002700 stmdaeq r0, {r3, r6, sl, fp, sp, lr} | __asm ("stmdaeq r0, {r3, r6, sl, fp, sp, lr}");
0x08002704 mov r7, 0 | r7 = 0;
0x08002708 mov r0, r7 | r0 = r7;
0x0800270c ldr r2, [r3] | r2 = *(r3);
0x08002710 add r2, r2, 1 | r2++;
0x08002714 str r2, [r3] | *(r3) = r2;
0x08002718 add sp, sp, 0xac |
0x0800271c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x08002720 str r6, [r4, 0x594] | *((r4 + 0x594)) = r6;
| label_14:
0x08002724 mov r2, 0x10 | r2 = 0x10;
0x08002728 mov sl, r2 | sl = r2;
0x0800272c b 0x800250c | goto label_1;
0x08002730 ldr r6, [sp, 4] | r6 = var_4h;
0x08002734 mov r0, sb | r0 = sb;
0x08002738 mov r1, r6 | r1 = r6;
0x0800273c bl 0x80017ec | r0 = macsec_get_ops ();
0x08002740 cmp r0, 0 |
0x08002744 beq 0x80026c0 |
| }
0x08002748 str sb, [sp, 0x10] | var_10h = sb;
0x0800274c mov r1, r6 | r1 = r6;
0x08002750 ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x08002754 bl 0x800025c | r0 = macsec_offload ();
0x08002758 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 == r0) {
0x0800275c beq 0x80026c0 | goto label_2;
| }
| label_7:
0x08002760 mov r0, sb | r0 = sb;
0x08002764 bl 0x8001298 | macsec_del_dev ();
0x08002768 b 0x80025e0 | goto label_3;
| label_18:
0x0800276c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x08002770 cmp r3, 0 |
| if (r3 == 0) {
0x08002774 beq 0x80027a8 | goto label_17;
| }
0x08002778 ldrh r2, [r3, 4] | r2 = *((r3 + 4));
0x0800277c ldr r3, [r4, 0x1c8] | r3 = *((r4 + 0x1c8));
| do {
0x08002780 add r1, sp, 8 | r1 += var_8h;
0x08002784 str r1, [sp, 4] | var_4h = r1;
0x08002788 ldr r0, [r3] | r0 = *(r3);
0x0800278c str r0, [sp, 8] | var_8h = r0;
0x08002790 mov fp, r0 |
0x08002794 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x08002798 strh r3, [sp, 0xc] | var_ch = r3;
0x0800279c strh r2, [sp, 0xe] | var_eh = r2;
0x080027a0 ldr r7, [sp, 0xc] | r7 = var_ch;
0x080027a4 b 0x800259c | goto label_4;
| label_17:
0x080027a8 ldr r3, [r4, 0x1c8] | r3 = *((r4 + 0x1c8));
0x080027ac mov r2, 0x100 | r2 = 0x100;
0x080027b0 b 0x8002780 |
| } while (1);
| label_23:
0x080027b4 ldr r3, [r4, 0x1c8] | r3 = *((r4 + 0x1c8));
0x080027b8 mov r2, 0x100 | r2 = 0x100;
0x080027bc ldr r1, [sp, 4] | r1 = var_4h;
0x080027c0 ldr r0, [r3] | r0 = *(r3);
0x080027c4 str r0, [sp, 8] | var_8h = r0;
0x080027c8 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x080027cc strh r3, [r1, 4] | *((r1 + 4)) = r3;
0x080027d0 strh r2, [sp, 0xe] | var_eh = r2;
0x080027d4 ldr fp, [sp, 8] | fp = var_8h;
0x080027d8 ldr r7, [sp, 0xc] | r7 = var_ch;
0x080027dc b 0x8002650 | goto label_5;
| label_24:
0x080027e0 stmdaeq r0, {r1, r2, r3, r4, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, r4, sb, sp, pc}");
0x080027e4 stmdaeq r0, {r1, r2, r3, r4, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, r4, sb, sp, pc}");
0x080027e8 mov r1, 0xcc0 | r1 = 0xcc0;
0x080027ec ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x080027f0 stmdaeq r0, {r1, r5, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r5, sb, sp, pc}");
0x080027f4 mov r8, r0 | r8 = r0;
0x080027f8 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x080027fc beq 0x8002864 | goto label_25;
| }
0x08002800 mov r2, r0 | r2 = r0;
0x08002804 str r0, [r0] | *(r0) = r0;
0x08002808 str r0, [r0, 4] | *((r0 + 4)) = r0;
0x0800280c stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr}");
0x08002810 stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr}");
0x08002814 mov r0, r5 | r0 = r5;
0x08002818 stmdaeq r0, {r1, r2, r3, r4, r5, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, r4, r5, sb, sp, pc}");
0x0800281c mov r1, r8 | r1 = r8;
0x08002820 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 >= r0) {
0x08002824 bge 0x80026d0 | goto label_6;
| }
0x08002828 mov r0, r8 | r0 = r8;
0x0800282c stmdaeq r0, {r1, r7, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r7, r8, sp, pc}");
0x08002830 b 0x8002760 | goto label_7;
| label_9:
0x08002834 mvn r7, 0x15 | r7 = ~0x15;
0x08002838 b 0x80025f8 | goto label_8;
| label_15:
0x0800283c mvn r7, 0xf | r7 = ~0xf;
0x08002840 b 0x80025f8 | goto label_8;
| label_10:
0x08002844 mvn r7, 0x12 | r7 = ~0x12;
0x08002848 b 0x80025f8 | goto label_8;
| label_13:
0x0800284c mvn r7, 0x5e | r7 = ~0x5e;
0x08002850 b 0x80025f8 | goto label_8;
| label_22:
0x08002854 ldr r0, [r4, 0x584] | r0 = *((r4 + 0x584));
0x08002858 stmdaeq r0, {r1, r2, r3, r4, r5, r6, r8, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, r4, r5, r6, r8, sp, pc}");
| label_21:
0x0800285c mvn r7, 0xb | r7 = ~0xb;
0x08002860 b 0x80025e0 | goto label_3;
| label_25:
0x08002864 mvn r7, 0xb | r7 = ~0xb;
0x08002868 b 0x8002760 | 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/modules/5.10.52-axis9/kernel/drivers/net/macsec.ko @ 0x8001338 */
| #include <stdint.h>
|
; (fcn) sym.macsec_notify () | void macsec_notify (uint32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| r1 = arg2;
0x08001338 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0800133c stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr}");
0x08001340 stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r8, sl, lr}");
0x08001344 ldr r5, [r2] | r5 = *(r2);
0x08001348 sub sp, sp, 8 |
0x0800134c ldr r2, [r5, 0x1e4] | r2 = *((r5 + 0x1e4));
0x08001350 str sp, [sp] | *(sp) = sp;
0x08001354 cmp r2, r3 |
0x08001358 str sp, [sp, 4] | var_4h = sp;
| if (r2 == r3) {
0x0800135c movne r0, 0 | r0 = 0;
| }
| if (r2 != r3) {
0x08001360 beq 0x800136c |
0x08001364 add sp, sp, 8 |
0x08001368 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x0800136c sub r1, r1, 1 | r1--;
0x08001370 cmp r1, 6 |
| if (r1 > 6) {
| /* switch table (7 cases) at 0x800137c */
0x08001374 ldrls pc, [pc, r1, lsl 2] | offset_0 = r1 << 2;
| pc = *((pc + offset_0));
| }
0x08001378 b 0x80013d4 |
0x080013d4 mov r0, 1 | r0 = 1;
0x080013d8 add sp, sp, 8 |
0x080013dc pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/drivers/net/macsec.ko @ 0x80031f8 */
| #include <stdint.h>
|
; (fcn) sym.macsec_upd_offload () | void macsec_upd_offload (int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_c0h;
| r1 = arg2;
0x080031f8 push {r4, r5, r6, lr} |
0x080031fc ldr r5, [r1, 0x14] | r5 = *((r1 + 0x14));
0x08003200 sub sp, sp, 0xc0 |
0x08003204 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x08003208 cmp r3, 0 |
| if (r3 == 0) {
0x0800320c beq 0x80033c4 | goto label_3;
| }
0x08003210 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x08003214 cmp r2, 0 |
| if (r2 == 0) {
0x08003218 beq 0x80033c4 | goto label_3;
| }
0x0800321c ldrh r3, [r2], 4 | r3 = *(r2);
| r2 += 4;
0x08003220 mov r4, r1 | r4 = r1;
0x08003224 ldr r1, [pc, 0x1a8] | r1 = *(0x80033d0);
0x08003228 mov r0, 0 | r0 = 0;
0x0800322c str r1, [sp] | *(sp) = r1;
0x08003230 sub r3, r3, 4 | r3 -= 4;
0x08003234 str r0, [sp, 8] | var_8h = r0;
0x08003238 mov r1, 2 | r1 = 2;
0x0800323c str r0, [sp, 4] | var_4h = r0;
0x08003240 add r0, sp, 0x14 | r0 += var_14h;
0x08003244 stmdaeq r0, {r1, r2, r4, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r4, sb, sp, pc}");
0x08003248 cmp r0, 0 |
| if (r0 != 0) {
0x0800324c bne 0x80033c4 | goto label_3;
| }
0x08003250 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x08003254 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x08003258 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0800325c stmdaeq r0, {r1, r2, r3, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r2, r3, sb, sp, pc}");
0x08003260 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x08003264 beq 0x8003398 | goto label_4;
| }
0x08003268 ldr r3, [r4, 0x134] | r3 = *((r4 + 0x134));
0x0800326c tst r3, 0x2000000 |
| if ((r3 & 0x2000000) == 0) {
0x08003270 beq 0x8003398 | goto label_4;
| }
0x08003274 cmn r4, 0x1000 |
| if (r4 <= 0x1000) {
0x08003278 movhi r5, r4 | r5 = r4;
| }
| if (r4 > 0x1000) {
0x0800327c bhi 0x8003358 | goto label_1;
| }
0x08003280 ldr r3, [sp, 0x18] | r3 = var_18h;
0x08003284 cmp r3, 0 |
| if (r3 == 0) {
0x08003288 beq 0x80033c4 | goto label_3;
| }
0x0800328c ldrb r5, [r3, 4] | r5 = *((r3 + 4));
0x08003290 ldr r3, [r4, 0x594] | r3 = *((r4 + 0x594));
0x08003294 cmp r3, r5 |
| if (r3 == r5) {
0x08003298 beq 0x8003354 | goto label_5;
| }
0x0800329c cmp r5, 0 |
| if (r5 != 0) {
0x080032a0 bne 0x8003364 | goto label_6;
| }
| label_0:
0x080032a4 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x080032a8 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x080032ac bne 0x80033cc | goto label_7;
| }
0x080032b0 stmdaeq r0, {r1, r3, r4, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r4, sb, sp, pc}");
0x080032b4 ldr r3, [r4, 0x544] | r3 = *((r4 + 0x544));
0x080032b8 ldr r6, [r4, 0x594] | r6 = *((r4 + 0x594));
0x080032bc cmp r3, 0 |
0x080032c0 str r5, [r4, 0x594] | *((r4 + 0x594)) = r5;
| if (r3 != 0) {
0x080032c4 bne 0x8003380 | goto label_8;
| }
0x080032c8 add r3, r4, 0x560 | r3 = r4 + 0x560;
0x080032cc add r2, r4, 0x570 | r2 = r4 + 0x570;
0x080032d0 add r3, r3, 4 | r3 += 4;
0x080032d4 add r2, r2, 4 | r2 += 4;
| do {
0x080032d8 ldr r1, [r3, 4]! | r1 = *((r3 += 4));
0x080032dc cmp r1, 0 |
| if (r1 != 0) {
0x080032e0 bne 0x8003380 | goto label_8;
| }
0x080032e4 cmp r3, r2 |
0x080032e8 bne 0x80032d8 |
| } while (r3 != r2);
0x080032ec cmp r5, 0 |
0x080032f0 add r0, sp, 0x20 | r0 += var_20h;
| if (r5 != 0) {
0x080032f4 moveq r5, r6 | r5 = r6;
| }
0x080032f8 mov r2, 0xa0 | r2 = 0xa0;
0x080032fc stmdaeq r0, {r1, r4, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r4, sb, sp, pc}");
0x08003300 cmp r5, 1 |
0x08003304 str r5, [sp, 0x24] | var_24h = r5;
| if (r5 == 1) {
0x08003308 beq 0x80033a8 | goto label_9;
| }
0x0800330c ldr r3, [r4, 0x580] | r3 = *((r4 + 0x580));
0x08003310 cmp r5, 2 |
| if (r5 != 2) {
0x08003314 streq r3, [sp, 0x20] | var_20h = r3;
| }
0x08003318 ldr r3, [r3, 0x510] | r3 = *((r3 + 0x510));
| label_2:
0x0800331c cmp r3, 0 |
| if (r3 == 0) {
0x08003320 beq 0x80033bc | goto label_10;
| }
0x08003324 cmp r6, 0 |
0x08003328 add r1, sp, 0x20 | r1 += var_20h;
| if (r6 != 0) {
0x0800332c ldreq r0, [r3, 8] | r0 = *((r3 + 8));
| }
| if (r6 == 0) {
0x08003330 ldrne r0, [r3, 0x10] | r0 = *((r3 + 0x10));
| }
0x08003334 add r3, r4, 0x540 | r3 = r4 + 0x540;
0x08003338 str r3, [sp, 0x28] | var_28h = r3;
0x0800333c bl 0x800025c | r0 = macsec_offload ();
0x08003340 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x08003344 bne 0x8003384 | goto label_11;
| }
0x08003348 mov r0, r4 | r0 = r4;
0x0800334c stmdaeq r0, {r1, r3, r4, r5, r6, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r4, r5, r6, sb, sp, pc}");
0x08003350 stmdaeq r0, {r1, r3, r5, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r5, sb, sp, pc}");
| label_5:
0x08003354 mov r5, 0 | r5 = 0;
| label_1:
0x08003358 mov r0, r5 | r0 = r5;
0x0800335c add sp, sp, 0xc0 |
0x08003360 pop {r4, r5, r6, pc} |
| label_6:
0x08003364 add r1, r4, 0x540 | r1 = r4 + 0x540;
0x08003368 mov r0, r5 | r0 = r5;
0x0800336c bl 0x8000070 | r0 = macsec_check_offload ();
0x08003370 cmp r0, 0 |
| if (r0 != 0) {
0x08003374 bne 0x80032a4 | goto label_0;
| }
0x08003378 mvn r5, 0x5e | r5 = ~0x5e;
0x0800337c b 0x8003358 | goto label_1;
| label_8:
0x08003380 mvn r5, 0xf | r5 = ~0xf;
| do {
| label_11:
0x08003384 str r6, [r4, 0x594] | *((r4 + 0x594)) = r6;
0x08003388 stmdaeq r0, {r1, r3, r5, sb, sp, pc} | __asm ("stmdaeq r0, {r1, r3, r5, sb, sp, pc}");
0x0800338c mov r0, r5 | r0 = r5;
0x08003390 add sp, sp, 0xc0 |
0x08003394 pop {r4, r5, r6, pc} |
| label_4:
0x08003398 mvn r5, 0x12 | r5 = ~0x12;
0x0800339c mov r0, r5 | r0 = r5;
0x080033a0 add sp, sp, 0xc0 |
0x080033a4 pop {r4, r5, r6, pc} |
| label_9:
0x080033a8 ldr r3, [r4, 0x580] | r3 = *((r4 + 0x580));
0x080033ac ldr r3, [r3, 0x4f4] | r3 = *((r3 + 0x4f4));
0x080033b0 str r3, [sp, 0x20] | var_20h = r3;
0x080033b4 ldr r3, [r3, 0x35c] | r3 = *((r3 + 0x35c));
0x080033b8 b 0x800331c | goto label_2;
| label_10:
0x080033bc mvn r5, 0x5e | r5 = ~0x5e;
0x080033c0 b 0x8003384 |
| } while (1);
| label_3:
0x080033c4 mvn r5, 0x15 | r5 = ~0x15;
0x080033c8 b 0x8003358 | goto label_1;
| label_7:
0x080033cc mvn r5, 0xf | r5 = ~0xf;
0x080033d0 b 0x8003358 | goto label_1;
| }
[*] Function fprintf used 1 times macsec.ko