[*] Binary protection state of libip6t_SNAT.so
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libip6t_SNAT.so
; 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/usr/lib/xtables/libip6t_SNAT.so @ 0xe88 */
| #include <stdint.h>
|
; (fcn) fcn.00000e88 () | void fcn_00000e88 (int32_t arg1) {
| r0 = arg1;
0x00000e88 ldr r3, [r0] | r3 = *(r0);
0x00000e8c push {r4, r5, r6, lr} |
0x00000e90 tst r3, 1 |
0x00000e94 mov r4, r0 | r4 = r0;
| if ((r3 & 1) != 0) {
0x00000e98 beq 0xf10 |
0x00000e9c tst r3, 2 |
| if ((r3 & 2) != 0) {
0x00000ea0 beq 0xeac |
0x00000ea4 mov r0, 0x5b | r0 = 0x5b;
0x00000ea8 bl 0x5f0 | putchar (r0);
| }
0x00000eac add r6, r4, 4 | r6 = r4 + 4;
0x00000eb0 mov r0, r6 | r0 = r6;
0x00000eb4 bl 0x620 | xtables_ip6addr_to_numeric ();
0x00000eb8 add r5, r4, 0x14 | r5 = r4 + 0x14;
0x00000ebc mov r1, r0 | r1 = r0;
0x00000ec0 ldr r0, [pc, 0xac] | r0 = *(0xf70);
0x00000ec4 add r0, pc, r0 | r0 = pc + r0;
0x00000ec8 bl 0x5fc | printf (r0, r1, r2, r3, r4, r5)
0x00000ecc mov r2, 0x10 | r2 = 0x10;
0x00000ed0 mov r1, r5 | r1 = r5;
0x00000ed4 mov r0, r6 | r0 = r6;
0x00000ed8 bl 0x650 | r0 = memcmp (r0, r1, r2);
0x00000edc cmp r0, 0 |
| if (r0 != 0) {
0x00000ee0 beq 0xefc |
0x00000ee4 mov r0, r5 | r0 = r5;
0x00000ee8 bl 0x620 | r0 = xtables_ip6addr_to_numeric ();
0x00000eec mov r1, r0 | r1 = r0;
0x00000ef0 ldr r0, [pc, 0x80] | r0 = *(0xf74);
0x00000ef4 add r0, pc, r0 | r0 = pc + r0;
0x00000ef8 bl 0x5fc | printf (r0, r1)
| }
0x00000efc ldr r3, [r4] | r3 = *(r4);
0x00000f00 tst r3, 2 |
0x00000f04 popeq {r4, r5, r6, pc} |
0x00000f08 mov r0, 0x5d | r0 = 0x5d;
0x00000f0c bl 0x5f0 | putchar (r0);
| }
0x00000f10 ldr r3, [r4] | r3 = *(r4);
0x00000f14 tst r3, 2 |
0x00000f18 popeq {r4, r5, r6, pc} |
0x00000f1c mov r0, 0x3a | r0 = 0x3a;
0x00000f20 bl 0x5f0 | putchar (r0);
0x00000f24 ldrh r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00000f28 ldr r0, [pc, 0x4c] | r0 = "_";
0x00000f2c lsr r1, r3, 8 | r1 = r3 >> 8;
0x00000f30 orr r1, r1, r3, lsl 8 | r1 |= (r3 << 8);
0x00000f34 lsl r1, r1, 0x10 | r1 <<= 0x10;
0x00000f38 lsr r1, r1, 0x10 | r1 >>= 0x10;
0x00000f3c add r0, pc, r0 | r0 = pc + r0;
0x00000f40 bl 0x5fc | printf ("_", r1, r2, r3)
0x00000f44 ldrh r3, [r4, 0x26] | r3 = *((r4 + 0x26));
0x00000f48 ldrh r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x00000f4c cmp r2, r3 |
0x00000f50 popeq {r4, r5, r6, pc} |
0x00000f54 lsr r1, r3, 8 | r1 = r3 >> 8;
0x00000f58 ldr r0, [pc, 0x20] | r0 = *(0xf7c);
0x00000f5c orr r1, r1, r3, lsl 8 | r1 |= (r3 << 8);
0x00000f60 lsl r1, r1, 0x10 | r1 <<= 0x10;
0x00000f64 lsr r1, r1, 0x10 | r1 >>= 0x10;
0x00000f68 add r0, pc, r0 | r0 = pc + r0;
0x00000f6c pop {r4, r5, r6, lr} |
0x00000f70 b 0x5fc | return void (*0x5fc)() ();
| }
[*] Function printf used 4 times libip6t_SNAT.so