[*] Binary protection state of hmac.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function strcat tear down of hmac.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/crypto/hmac.ko @ 0x8000170 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.hmac_create () | void hmac_create (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_ch;
| int32_t var_10h;
| r0 = arg1;
| r1 = arg2;
0x08000170 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08000174 mov r7, r0 | r7 = r0;
0x08000178 mov r5, r1 | r5 = r1;
0x0800017c sub sp, sp, 0x10 |
0x08000180 mov r0, r1 | r0 = r1;
0x08000184 add r2, sp, 0xc | r2 += var_ch;
0x08000188 mov r1, 0xe | r1 = 0xe;
0x0800018c stmdaeq r0, {r3, r5, r6, sl, ip} | __asm ("stmdaeq r0, {r3, r5, r6, sl, ip}");
0x08000190 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x08000194 beq 0x80001a4 |
| label_2:
0x08000198 mov r0, r4 | r0 = r4;
0x0800019c add sp, sp, 0x10 |
0x080001a0 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x080001a4 stmdaeq r0, {r2, r3, r5, r6, sl, ip} | __asm ("stmdaeq r0, {r2, r3, r5, r6, sl, ip}");
0x080001a8 stmdaeq r0, {r2, r3, r5, r6, sl, ip} | __asm ("stmdaeq r0, {r2, r3, r5, r6, sl, ip}");
0x080001ac mov r1, 0xdc0 | r1 = 0xdc0;
0x080001b0 ldr r0, [r3, 0x28] | r0 = *((r3 + 0x28));
0x080001b4 stmdaeq r0, {r4, r5, r6, sl, ip} | __asm ("stmdaeq r0, {r4, r5, r6, sl, ip}");
0x080001b8 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x080001bc beq 0x800032c | goto label_3;
| }
0x080001c0 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x080001c4 add r8, r6, 0xc0 | r8 = r6 + 0xc0;
0x080001c8 stmdaeq r0, {r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r0, {r2, r4, r5, r6, sl, ip}");
0x080001cc ldr r1, [sp, 0xc] | r1 = var_ch;
0x080001d0 mov r2, r0 | r2 = r0;
0x080001d4 mov r3, r4 | r3 = r4;
0x080001d8 str r1, [sp] | *(sp) = r1;
0x080001dc add r0, r6, 0x280 | r0 = r6 + 0x280;
0x080001e0 mov r1, r8 | r1 = r8;
0x080001e4 stmdaeq r0, {r3, r4, r5, r6, sl, ip} | __asm ("stmdaeq r0, {r3, r4, r5, r6, sl, ip}");
0x080001e8 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x080001ec bne 0x8000230 | goto label_1;
| }
0x080001f0 ldr r5, [r6, 0x288] | r5 = *((r6 + 0x288));
0x080001f4 sub r0, r5, 0x80 | r0 = r5 - 0x80;
0x080001f8 stmdaeq r0, {r2, r3, r4, r5, r6, sl, ip} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r6, sl, ip}");
0x080001fc cmp r0, 0 |
| if (r0 != 0) {
0x08000200 bne 0x8000244 | goto label_4;
| }
| label_0:
0x08000204 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x08000208 ldr sl, [r5, -0x40] | sl = *((r5 - 0x40));
0x0800020c ldr sb, [r5, -0x3c] | sb = *((r5 - 0x3c));
0x08000210 cmp sl, r2 |
| if (sl > r2) {
0x08000214 movls r3, 0 | r3 = 0;
| }
| if (sl <= r2) {
0x08000218 movhi r3, 1 | r3 = 1;
| }
0x0800021c cmp sb, r2 |
| if (sb >= r2) {
0x08000220 orrlo r3, r3, 1 | r3 |= 1;
| }
0x08000224 cmp r3, 0 |
| if (r3 == 0) {
0x08000228 beq 0x8000254 | goto label_5;
| }
| do {
0x0800022c mvn r4, 0x15 | r4 = ~0x15;
| label_1:
0x08000230 mov r0, r6 | r0 = r6;
0x08000234 stmdaeq r0, {r7, sl, ip} | __asm ("stmdaeq r0, {r7, sl, ip}");
0x08000238 mov r0, r4 | r0 = r4;
0x0800023c add sp, sp, 0x10 |
0x08000240 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_4:
0x08000244 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x08000248 tst r3, 0x4000 |
0x0800024c beq 0x800022c |
| } while ((r3 & 0x4000) == 0);
0x08000250 b 0x8000204 | goto label_0;
| label_5:
0x08000254 mov r0, r8 | r0 = r8;
0x08000258 mov r2, r5 | r2 = r5;
0x0800025c add r1, r7, 0x14 | r1 = r7 + 0x14;
0x08000260 stmdaeq r0, {r2, r7, sl, ip} | __asm ("stmdaeq r0, {r2, r7, sl, ip}");
0x08000264 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x08000268 bne 0x8000230 | goto label_1;
| }
0x0800026c ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x08000270 mov r0, r7 | r0 = r7;
0x08000274 str r3, [r6, 0xe0] | *((r6 + 0xe0)) = r3;
0x08000278 mov r1, r6 | r1 = r6;
0x0800027c stmdaeq r0, {r2, r4, r6, r8, sl} | __asm ("stmdaeq r0, {r2, r4, r6, r8, sl}");
0x08000280 stmdaeq r0, {r2, r4, r6, r8, sl} | __asm ("stmdaeq r0, {r2, r4, r6, r8, sl}");
0x08000284 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x08000288 str r3, [r6, 0xd4] | *((r6 + 0xd4)) = r3;
0x0800028c ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x08000290 str r3, [r6, 0xdc] | *((r6 + 0xdc)) = r3;
0x08000294 add sb, sb, r3 | sb += r3;
0x08000298 str r2, [r6, 0x40] | *((r6 + 0x40)) = r2;
0x0800029c bic sb, sb, r3 | sb = BIT_MASK (sb, r3);
0x080002a0 str sl, [r6, 0x80] | *((r6 + 0x80)) = sl;
0x080002a4 str sb, [r6, 0x84] | *((r6 + 0x84)) = sb;
0x080002a8 stmdaeq r0, {r2, r3, r4, r6, r7} | __asm ("stmdaeq r0, {r2, r3, r4, r6, r7}");
0x080002ac stmdaeq r0, {r2, r3, r4, r6, r7} | __asm ("stmdaeq r0, {r2, r3, r4, r6, r7}");
0x080002b0 lsl r3, sb, 1 | r3 = sb << 1;
0x080002b4 add r3, r3, 0x3f | r3 += 0x3f;
0x080002b8 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080002bc add r3, r3, 4 | r3 += 4;
0x080002c0 str r3, [r6, 0xd8] | *((r6 + 0xd8)) = r3;
0x080002c4 stmdaeq r0, {r4, r5, r6, r8, sl} | __asm ("stmdaeq r0, {r4, r5, r6, r8, sl}");
0x080002c8 stmdaeq r0, {r4, r5, r6, r8, sl} | __asm ("stmdaeq r0, {r4, r5, r6, r8, sl}");
0x080002cc strd r2, r3, [r6, 0x44] | __asm ("strd r2, r3, [r6, 0x44]");
0x080002d0 stmdaeq r0, {r2, r5, r6, r7} | __asm ("stmdaeq r0, {r2, r5, r6, r7}");
0x080002d4 stmdaeq r0, {r2, r5, r6, r7} | __asm ("stmdaeq r0, {r2, r5, r6, r7}");
0x080002d8 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x080002dc stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x080002e0 str r2, [r6, 0x4c] | *((r6 + 0x4c)) = r2;
0x080002e4 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x080002e8 stmdaeq r0, {r3, r4, r5, r6, r7, sl} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl}");
0x080002ec stmdaeq r0, {r3, r4, r5, r6, r7, sl} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, sl}");
0x080002f0 stmdaeq r0, {r2, r5, r6, r8, sb} | __asm ("stmdaeq r0, {r2, r5, r6, r8, sb}");
0x080002f4 stmdaeq r0, {r2, r5, r6, r8, sb} | __asm ("stmdaeq r0, {r2, r5, r6, r8, sb}");
0x080002f8 strd r2, r3, [r6, 0x58] | __asm ("strd r2, r3, [r6, 0x58]");
0x080002fc stmdaeq r0, {r3, r7} | __asm ("stmdaeq r0, {r3, r7}");
0x08000300 stmdaeq r0, {r3, r7} | __asm ("stmdaeq r0, {r3, r7}");
0x08000304 stmdaeq r0, {r2, r4, r5, r8, sb} | __asm ("stmdaeq r0, {r2, r4, r5, r8, sb}");
0x08000308 stmdaeq r0, {r2, r4, r5, r8, sb} | __asm ("stmdaeq r0, {r2, r4, r5, r8, sb}");
0x0800030c strd r2, r3, [r6, 0x60] | __asm ("strd r2, r3, [r6, 0x60]");
0x08000310 stmdaeq r0, {r7, sl, ip} | __asm ("stmdaeq r0, {r7, sl, ip}");
0x08000314 stmdaeq r0, {r7, sl, ip} | __asm ("stmdaeq r0, {r7, sl, ip}");
0x08000318 str r3, [r6] | *(r6) = r3;
0x0800031c stmdaeq r0, {r3, r7, sl, ip} | __asm ("stmdaeq r0, {r3, r7, sl, ip}");
0x08000320 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x08000324 beq 0x8000198 | goto label_2;
| }
0x08000328 b 0x8000230 | goto label_1;
| label_3:
0x0800032c mvn r4, 0xb | r4 = ~0xb;
0x08000330 b 0x8000198 | goto label_2;
| }
[*] Function strcat used 1 times hmac.ko