[*] Binary protection state of eeprom_93cx6.ko
No RELRO Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function strcat tear down of eeprom_93cx6.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/modules/4.19.56-linux4sam-6.1/kernel/drivers/misc/eeprom/eeprom_93cx6.ko @ 0x80003e0 */
| #include <stdint.h>
|
; (fcn) sym.eeprom_93cx6_readb () | void eeprom_93cx6_readb (int32_t arg1, int32_t arg2) {
| int32_t var_2h;
| int32_t var_4h_2;
| int32_t var_2h_2;
| int32_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x080003e0 push {r4, r5, r6, r7, lr} |
0x080003e4 ldr r6, [pc, 0x84] | r6 = *(0x800046c);
0x080003e8 mov r4, r0 | r4 = r0;
0x080003ec ldr r3, [r6] | r3 = *(0x800046c);
0x080003f0 sub sp, sp, 0xc |
0x080003f4 mov r5, r1 | r5 = r1;
0x080003f8 mov r7, r2 | r7 = r2;
0x080003fc str r3, [sp, 4] | var_4h_2 = r3;
0x08000400 bl 0x8000058 | eeprom_93cx6_startup ();
0x08000404 mov r3, 6 | r3 = 6;
0x08000408 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0800040c mov r0, r4 | r0 = r4;
0x08000410 add r1, r2, 1 | r1 = r2 + 1;
0x08000414 orr r1, r5, r3, lsl r1 | r1 = r5 | (r3 << r1);
0x08000418 add r2, r2, 4 | r2 += 4;
0x0800041c lsl r2, r2, 0x10 | r2 <<= 0x10;
0x08000420 lsl r1, r1, 0x10 | r1 <<= 0x10;
0x08000424 lsr r2, r2, 0x10 | r2 >>= 0x10;
0x08000428 lsr r1, r1, 0x10 | r1 >>= 0x10;
0x0800042c bl 0x8000170 | eeprom_93cx6_write_bits ();
0x08000430 mov r2, 8 | r2 = 8;
0x08000434 mov r0, r4 | r0 = r4;
0x08000438 add r1, sp, 2 | r1 += var_2h;
0x0800043c bl 0x800023c | eeprom_93cx6_read_bits ();
0x08000440 ldrh r3, [sp, 2] | r3 = var_2h;
0x08000444 mov r0, r4 | r0 = r4;
0x08000448 strb r3, [r7] | *(r7) = r3;
0x0800044c bl 0x80000e4 | eeprom_93cx6_cleanup ();
0x08000450 ldr r2, [sp, 4] | r2 = var_4h_2;
0x08000454 ldr r3, [r6] | r3 = *(0x800046c);
0x08000458 cmp r2, r3 |
| if (r2 == r3) {
0x0800045c bne 0x800046c |
0x08000460 add sp, sp, 0xc |
0x08000464 pop {r4, r5, r6, r7, lr} |
0x08000468 stmdaeq r0, {r1, r2, r3, r5, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r3, r5, sb, sl, ip}");
| }
0x0800046c stmdaeq r0, {r1, r2, r5, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r5, sb, sl, ip}");
0x08000470 stmdaeq r0, {r1, r3, r5, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r3, r5, sb, sl, ip}");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/modules/4.19.56-linux4sam-6.1/kernel/drivers/misc/eeprom/eeprom_93cx6.ko @ 0x80004b8 */
| #include <stdint.h>
|
; (fcn) sym.eeprom_93cx6_wren () | void eeprom_93cx6_wren (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x080004b8 push {r4, r5, r6, lr} |
0x080004bc mov r5, r1 | r5 = r1;
0x080004c0 mov r4, r0 | r4 = r0;
0x080004c4 bl 0x8000058 | eeprom_93cx6_startup ();
0x080004c8 cmp r5, 0 |
| if (r5 != 0) {
0x080004cc moveq r1, 0x10 | r1 = 0x10;
| }
| if (r5 == 0) {
0x080004d0 movne r1, 0x13 | r1 = 0x13;
| }
0x080004d4 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x080004d8 mov r0, r4 | r0 = r4;
0x080004dc sub r3, r2, 2 | r3 = r2 - 2;
0x080004e0 lsl r1, r1, r3 | r1 <<= r3;
0x080004e4 add r2, r2, 3 | r2 += 3;
0x080004e8 lsl r1, r1, 0x10 | r1 <<= 0x10;
0x080004ec lsl r2, r2, 0x10 | r2 <<= 0x10;
0x080004f0 lsr r1, r1, 0x10 | r1 >>= 0x10;
0x080004f4 lsr r2, r2, 0x10 | r2 >>= 0x10;
0x080004f8 bl 0x8000170 | eeprom_93cx6_write_bits ();
0x080004fc mov r0, r4 | r0 = r4;
0x08000500 pop {r4, r5, r6, lr} |
0x08000504 b 0x80000e4 | return void (*0x80000e4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/modules/4.19.56-linux4sam-6.1/kernel/drivers/misc/eeprom/eeprom_93cx6.ko @ 0x8000170 */
| #include <stdint.h>
|
; (fcn) sym.eeprom_93cx6_write_bits () | void eeprom_93cx6_write_bits (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08000170 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08000174 mov r5, r2 | r5 = r2;
0x08000178 mov r4, r0 | r4 = r0;
0x0800017c mov sb, 1 | sb = 1;
0x08000180 mov r8, 0 | r8 = 0;
0x08000184 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x08000188 mov sl, r1 | sl = r1;
0x0800018c mov lr, pc | lr = pc;
0x08000190 stmdaeq r0, {r1, r3, r5, r6, r7, r8, sl, ip} | __asm ("stmdaeq r0, {r1, r3, r5, r6, r7, r8, sl, ip}");
0x08000194 cmp r5, 0 |
0x08000198 strh sb, [r4, 0x10] | *((r4 + 0x10)) = sb;
0x0800019c strb r8, [r4, 0x12] | *((r4 + 0x12)) = r8;
| if (r5 == 0) {
0x080001a0 beq 0x800021c | goto label_0;
| }
0x080001a4 ldr r7, [pc, 0x88] | r7 = *(0x8000230);
0x080001a8 ldr r6, [pc, 0x88] | r6 = *(0x8000234);
| do {
0x080001ac sub r5, r5, 1 | r5--;
0x080001b0 asr r3, sl, r5 | r3 = sl >> r5;
0x080001b4 and r3, r3, 1 | r3 &= 1;
0x080001b8 strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x080001bc mov r0, r4 | r0 = r4;
0x080001c0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x080001c4 mov lr, pc | lr = pc;
0x080001c8 stmdaeq r0, {r1, r2, r3, r5, r6, r7, r8, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r3, r5, r6, r7, r8, sl, ip}");
0x080001cc ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x080001d0 mov r0, r4 | r0 = r4;
0x080001d4 strb sb, [r4, 0x13] | *((r4 + 0x13)) = sb;
0x080001d8 mov lr, pc | lr = pc;
0x080001dc stmdaeq r0, {r1, r4, r5, r6, r7, r8, sl, ip} | __asm ("stmdaeq r0, {r1, r4, r5, r6, r7, r8, sl, ip}");
0x080001e0 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x080001e4 mov r0, r6 | r0 = r6;
0x080001e8 mov lr, pc | lr = pc;
0x080001ec stmdaeq r0, {r1, r2, r4, r5, r6, r7, r8, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r4, r5, r6, r7, r8, sl, ip}");
0x080001f0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x080001f4 mov r0, r4 | r0 = r4;
0x080001f8 strb r8, [r4, 0x13] | *((r4 + 0x13)) = r8;
0x080001fc mov lr, pc | lr = pc;
0x08000200 stmdaeq r0, {r1, r3, r4, r5, r6, r7, r8, sl, ip} | __asm ("stmdaeq r0, {r1, r3, r4, r5, r6, r7, r8, sl, ip}");
0x08000204 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x08000208 mov r0, r6 | r0 = r6;
0x0800020c mov lr, pc | lr = pc;
0x08000210 stmdaeq r0, {r1, r2, r3, r4, r5, r6, r7, r8, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r3, r4, r5, r6, r7, r8, sl, ip}");
0x08000214 cmp r5, 0 |
0x08000218 bne 0x80001ac |
| } while (r5 != 0);
| label_0:
0x0800021c mov r2, 0 | r2 = 0;
0x08000220 strb r2, [r4, 0x11] | *((r4 + 0x11)) = r2;
0x08000224 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08000228 mov r0, r4 | r0 = r4;
0x0800022c pop {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08000230 stmdaeq r0, {r1, sb, sl, ip} | __asm ("stmdaeq r0, {r1, sb, sl, ip}");
0x08000234 stmdaeq r0, {r1, r2, r3, r6, r7, r8, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r3, r6, r7, r8, sl, ip}");
0x08000238 mlaeq r0, fp, r4, ip | __asm ("mlaeq r0, fp, r4, ip");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/modules/4.19.56-linux4sam-6.1/kernel/drivers/misc/eeprom/eeprom_93cx6.ko @ 0x8000508 */
| #include <stdint.h>
|
; (fcn) sym.eeprom_93cx6_write () | void eeprom_93cx6_write (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x08000508 push {r4, r5, r6, lr} |
0x0800050c mov r4, r0 | r4 = r0;
0x08000510 mov r5, r2 | r5 = r2;
0x08000514 mov r6, r1 | r6 = r1;
0x08000518 bl 0x8000058 | eeprom_93cx6_startup ();
0x0800051c mov r3, 0x50000 | r3 = 0x50000;
0x08000520 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x08000524 mov r0, r4 | r0 = r4;
0x08000528 lsl r3, r3, r2 | r3 <<= r2;
0x0800052c add r2, r2, 3 | r2 += 3;
0x08000530 lsl r2, r2, 0x10 | r2 <<= 0x10;
0x08000534 orr r1, r6, r3, lsr 16 | r1 = r6 | (r3 >> 16);
0x08000538 lsr r2, r2, 0x10 | r2 >>= 0x10;
0x0800053c bl 0x8000170 | eeprom_93cx6_write_bits ();
0x08000540 mov r1, r5 | r1 = r5;
0x08000544 mov r0, r4 | r0 = r4;
0x08000548 mov r2, 0x10 | r2 = 0x10;
0x0800054c bl 0x8000170 | eeprom_93cx6_write_bits ();
0x08000550 mov r2, 0 | r2 = 0;
0x08000554 mov r3, 1 | r3 = 1;
0x08000558 strb r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0800055c strb r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x08000560 mov r0, r4 | r0 = r4;
0x08000564 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x08000568 mov lr, pc | lr = pc;
0x0800056c stmdaeq r0, {r1, r2, r4, r5, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r4, r5, sb, sl, ip}");
0x08000570 mov r1, 0x7d0 | r1 = 0x7d0;
0x08000574 mov r0, 0x3e8 | r0 = 0x3e8;
0x08000578 stmdaeq r0, {r1, r3, r4, r5, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r3, r4, r5, sb, sl, ip}");
0x0800057c mov r5, 0x64 | r5 = 0x64;
0x08000580 b 0x8000598 |
| while (r3 == 0) {
0x08000584 mov r1, 0x7d0 | r1 = 0x7d0;
0x08000588 mov r0, 0x3e8 | r0 = 0x3e8;
0x0800058c stmdaeq r0, {r1, r3, r4, r5, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r3, r4, r5, sb, sl, ip}");
0x08000590 subs r5, r5, 1 | r5--;
| if (r5 == r5) {
0x08000594 beq 0x80005c0 | goto label_0;
| }
0x08000598 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0800059c mov r0, r4 | r0 = r4;
0x080005a0 mov lr, pc | lr = pc;
0x080005a4 stmdaeq r0, {r1, r2, r3, r4, r5, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r2, r3, r4, r5, sb, sl, ip}");
0x080005a8 ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x080005ac cmp r3, 0 |
0x080005b0 beq 0x8000584 |
| }
0x080005b4 mov r0, r4 | r0 = r4;
0x080005b8 pop {r4, r5, r6, lr} |
0x080005bc b 0x80000e4 | void (*0x80000e4)() ();
| label_0:
0x080005c0 ldr r1, [pc, 0x10] | r1 = *(0x80005d4);
0x080005c4 ldr r0, [pc, 0x10] | r0 = "eeprom_93cx6_write";
0x080005c8 stmdaeq r0, {r1, r6, sb, sl, ip} | __asm ("stmdaeq r0, {r1, r6, sb, sl, ip}");
0x080005cc mov r0, r4 | r0 = r4;
0x080005d0 pop {r4, r5, r6, lr} |
0x080005d4 b 0x80000e4 | return void (*0x80000e4)() ();
| }
[*] Function strcat used 1 times eeprom_93cx6.ko