[*] Binary protection state of gcm.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function strcat tear down of gcm.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/gcm.ko @ 0x8000fd0 */
| #include <stdint.h>
|
; (fcn) sym.crypto_gcm_create_common () | void crypto_gcm_create_common (int32_t arg_1ch, int32_t arg_20h, int32_t arg_28h, int32_t arg_a8h, int32_t arg1, int32_t arg2) {
| int32_t var_40h;
| int32_t var_0h;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x08000fd0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08000fd4 mov r6, r0 | r6 = r0;
0x08000fd8 mov r7, r2 | r7 = r2;
0x08000fdc sub sp, sp, 0x14 |
0x08000fe0 mov r0, r1 | r0 = r1;
0x08000fe4 add r2, sp, 0xc | r2 += var_ch;
0x08000fe8 mov r1, 3 | r1 = 3;
0x08000fec mov r5, r3 | r5 = r3;
0x08000ff0 stmdaeq r0, {r0, r1, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r7, sb, sl, fp, ip, sp}");
0x08000ff4 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x08000ff8 beq 0x8001008 |
| label_1:
0x08000ffc mov r0, r4 | r0 = r4;
0x08001000 add sp, sp, 0x14 |
0x08001004 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x08001008 stmdaeq r0, {r0, r1, r2, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r7, sb, sl, fp, ip, sp}");
0x0800100c stmdaeq r0, {r0, r1, r2, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r7, sb, sl, fp, ip, sp}");
0x08001010 mov r1, 0xdc0 | r1 = 0xdc0;
0x08001014 ldr r0, [r3, 0x28] | r0 = *((r3 + 0x28));
0x08001018 stmdaeq r0, {r0, r1, r3, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r3, r7, sb, sl, fp, ip, sp}");
0x0800101c subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x08001020 beq 0x8001200 | goto label_3;
| }
0x08001024 ldr r1, [sp, 0xc] | r1 = var_ch;
0x08001028 mov r2, r5 | r2 = r5;
0x0800102c add sb, r8, 0x80 | sb = r8 + 0x80;
0x08001030 add r5, r8, 0x25c | r5 = r8 + 0x25c;
0x08001034 mov r3, r4 | r3 = r4;
0x08001038 str r1, [sp] | *(sp) = r1;
0x0800103c mov r0, r5 | r0 = r5;
0x08001040 mov r1, sb | r1 = sb;
0x08001044 stmdaeq r0, {r0, r1, r2, r3, r5, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r3, r5, r7, sb, sl, fp, ip, sp}");
0x08001048 add sl, r8, 0x240 | sl = r8 + 0x240;
0x0800104c subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x08001050 bne 0x8001080 | goto label_2;
| }
0x08001054 ldr fp, [r8, 0x264] | fp = *((r8 + 0x264));
0x08001058 stmdaeq r0, {r2, r3, r5, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r3, r5, r7, r8, sb, fp, ip}");
0x0800105c stmdaeq r0, {r2, r3, r5, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r3, r5, r7, r8, sb, fp, ip}");
0x08001060 add r0, fp, 0x28 | r0 += arg_28h;
0x08001064 stmdaeq r0, {r0, r1, r4, r5, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r4, r5, r7, sb, sl, fp, ip, sp}");
0x08001068 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 == r0) {
0x0800106c bne 0x800107c |
0x08001070 ldr r2, [fp, -0x40] | r2 = var_40h;
0x08001074 cmp r2, 0x10 |
| if (r2 == 0x10) {
0x08001078 beq 0x80010a4 | goto label_4;
| }
| }
| label_0:
0x0800107c mvn r4, 0x15 | r4 = ~0x15;
| do {
| label_2:
0x08001080 mov r0, sl | r0 = sl;
0x08001084 stmdaeq r0, {r0, r1, r2, r3, r6, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r3, r6, sb, sl, fp, ip, sp}");
0x08001088 mov r0, r5 | r0 = r5;
0x0800108c stmdaeq r0, {r0, r1, r2, r3, r6, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r3, r6, sb, sl, fp, ip, sp}");
0x08001090 mov r0, r8 | r0 = r8;
0x08001094 stmdaeq r0, {r0, r1, r4, r6, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r4, r6, sb, sl, fp, ip, sp}");
0x08001098 mov r0, r4 | r0 = r4;
0x0800109c add sp, sp, 0x14 |
0x080010a0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x080010a4 ldr r0, [sp, 0xc] | r0 = var_ch;
0x080010a8 mov r2, r7 | r2 = r7;
0x080010ac str r0, [sp] | *(sp) = r0;
0x080010b0 mov r1, sb | r1 = sb;
0x080010b4 mov r0, sl | r0 = sl;
0x080010b8 stmdaeq r0, {r0, r1, r2, r4, r5, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r4, r5, r7, sb, sl, fp, ip, sp}");
0x080010bc subs r4, r0, 0 | r4 = r0 - 0;
0x080010c0 bne 0x8001080 |
| } while (r4 != r0);
0x080010c4 ldr r4, [r8, 0x248] | r4 = *((r8 + 0x248));
0x080010c8 mov r2, 4 | r2 = 4;
0x080010cc stmdaeq r0, {r2, r4, r5, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r4, r5, r7, r8, sb, fp, ip}");
0x080010d0 stmdaeq r0, {r2, r4, r5, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r4, r5, r7, r8, sb, fp, ip}");
0x080010d4 add r0, r4, 0x28 | r0 = r4 + 0x28;
0x080010d8 stmdaeq r0, {r0, r1, r3, r4, r5, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r3, r4, r5, r7, sb, sl, fp, ip, sp}");
0x080010dc cmp r0, 0 |
| if (r0 != 0) {
0x080010e0 bne 0x800107c | goto label_0;
| }
0x080010e4 ldr r3, [r4, -0x24] | r3 = *((r4 - 0x24));
0x080010e8 cmp r3, 0x10 |
| if (r3 != 0x10) {
0x080010ec bne 0x800107c | goto label_0;
| }
0x080010f0 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x080010f4 cmp r3, 1 |
| if (r3 != 1) {
0x080010f8 bne 0x800107c | goto label_0;
| }
0x080010fc add r3, r4, 0x2c | r3 = r4 + 0x2c;
0x08001100 add r0, r8, 0xa8 | r0 = r8 + 0xa8;
0x08001104 stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, fp, ip}");
0x08001108 stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, fp, ip}");
0x0800110c mov r1, 0x80 | r1 = 0x80;
0x08001110 stmdaeq r0, {r0, r1, r2, r4, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r4, r7, sb, sl, fp, ip, sp}");
0x08001114 cmp r0, 0x7f |
| if (r0 > 0x7f) {
0x08001118 bgt 0x8001208 | goto label_5;
| }
0x0800111c add r3, fp, 0xa8 | r3 += arg_a8h;
0x08001120 add r0, r8, 0x128 | r0 = r8 + 0x128;
0x08001124 str r3, [sp] | *(sp) = r3;
0x08001128 stmdaeq r0, {r2, r6, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r6, r7, r8, sb, fp, ip}");
0x0800112c stmdaeq r0, {r2, r6, r7, r8, sb, fp, ip} | __asm ("stmdaeq r0, {r2, r6, r7, r8, sb, fp, ip}");
0x08001130 add r3, r4, 0xa8 | r3 = r4 + 0xa8;
0x08001134 mov r1, 0x80 | r1 = 0x80;
0x08001138 stmdaeq r0, {r0, r1, r2, r4, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r2, r4, r7, sb, sl, fp, ip, sp}");
0x0800113c cmp r0, 0x7f |
| if (r0 > 0x7f) {
0x08001140 bgt 0x8001208 | goto label_5;
| }
0x08001144 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x08001148 mov r0, r6 | r0 = r6;
0x0800114c ldr r3, [fp, 0x20] | r3 = *(arg_20h);
0x08001150 mov r1, r8 | r1 = r8;
0x08001154 add r3, r3, r2 | r3 += r2;
0x08001158 add r3, r3, r3, lsr 31 | r3 += (r3 >> 31);
0x0800115c asr r3, r3, 1 | r3 >>= 1;
0x08001160 str r3, [r8, 0xa0] | *((r8 + 0xa0)) = r3;
0x08001164 mov r3, 1 | r3 = 1;
0x08001168 str r3, [r8, 0x94] | *((r8 + 0x94)) = r3;
0x0800116c ldr r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x08001170 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x08001174 orr r3, r3, r2 | r3 |= r2;
0x08001178 str r3, [r8, 0x9c] | *((r8 + 0x9c)) = r3;
0x0800117c mov r3, 8 | r3 = 8;
0x08001180 str r3, [r8, 0x98] | *((r8 + 0x98)) = r3;
0x08001184 mov r3, 0xc | r3 = 0xc;
0x08001188 str r3, [r8, 0x58] | *((r8 + 0x58)) = r3;
0x0800118c ldr r3, [r4, -0x20] | r3 = *((r4 - 0x20));
0x08001190 str r3, [r8, 0x60] | *((r8 + 0x60)) = r3;
0x08001194 mov r3, 0x10 | r3 = 0x10;
0x08001198 str r3, [r8, 0x5c] | *((r8 + 0x5c)) = r3;
0x0800119c stmdaeq r0, {r5, r6, sl} | __asm ("stmdaeq r0, {r5, r6, sl}");
0x080011a0 stmdaeq r0, {r5, r6, sl} | __asm ("stmdaeq r0, {r5, r6, sl}");
0x080011a4 str r3, [r8, 0x50] | *((r8 + 0x50)) = r3;
0x080011a8 stmdaeq r0, {r2, r3, r5, r6, r8, sb} | __asm ("stmdaeq r0, {r2, r3, r5, r6, r8, sb}");
0x080011ac stmdaeq r0, {r2, r3, r5, r6, r8, sb} | __asm ("stmdaeq r0, {r2, r3, r5, r6, r8, sb}");
0x080011b0 str r3, [r8, 0x54] | *((r8 + 0x54)) = r3;
0x080011b4 stmdaeq r0, {r2, r4, r5, r8, sb, sl} | __asm ("stmdaeq r0, {r2, r4, r5, r8, sb, sl}");
0x080011b8 stmdaeq r0, {r2, r4, r5, r8, sb, sl} | __asm ("stmdaeq r0, {r2, r4, r5, r8, sb, sl}");
0x080011bc str r3, [r8, 0x40] | *((r8 + 0x40)) = r3;
0x080011c0 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x080011c4 stmdaeq r0, {r4, r5, r6} | __asm ("stmdaeq r0, {r4, r5, r6}");
0x080011c8 str r3, [r8, 0x44] | *((r8 + 0x44)) = r3;
0x080011cc stmdaeq r0, {r6, fp, ip} | __asm ("stmdaeq r0, {r6, fp, ip}");
0x080011d0 stmdaeq r0, {r6, fp, ip} | __asm ("stmdaeq r0, {r6, fp, ip}");
0x080011d4 str r3, [r8, 0x48] | *((r8 + 0x48)) = r3;
0x080011d8 stmdaeq r0, {r3, r4, r5, r6, r8, sb, sl, ip} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r8, sb, sl, ip}");
0x080011dc stmdaeq r0, {r3, r4, r5, r6, r8, sb, sl, ip} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r8, sb, sl, ip}");
0x080011e0 str r3, [r8, 0x4c] | *((r8 + 0x4c)) = r3;
0x080011e4 stmdaeq r0, {r3, r8, sl} | __asm ("stmdaeq r0, {r3, r8, sl}");
0x080011e8 stmdaeq r0, {r3, r8, sl} | __asm ("stmdaeq r0, {r3, r8, sl}");
0x080011ec str r3, [r8] | *(r8) = r3;
0x080011f0 stmdaeq r0, {r0, r1, r3, r4, r7, sb, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r0, r1, r3, r4, r7, sb, sl, fp, ip, sp}");
0x080011f4 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x080011f8 beq 0x8000ffc | goto label_1;
| }
0x080011fc b 0x8001080 | goto label_2;
| label_3:
0x08001200 mvn r4, 0xb | r4 = ~0xb;
0x08001204 b 0x8000ffc | goto label_1;
| label_5:
0x08001208 mvn r4, 0x23 | r4 = ~0x23;
0x0800120c b 0x8001080 | goto label_2;
| }
[*] Function strcat used 1 times gcm.ko