[*] Binary protection state of mDNSResponderPosix
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function strcat tear down of mDNSResponderPosix
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/mDNSResponderPosix @ 0x7434 */
| #include <stdint.h>
|
; (fcn) fcn.00007434 () | uint32_t fcn_00007434 (int16_t arg1) {
| r0 = arg1;
0x00007434 ldrb r2, [r0] | r2 = *(r0);
0x00007436 uxth r3, r2 | r3 = (int16_t) r2;
| if (r1 == 0) {
0x00007438 cbz r1, 0x7496 | goto label_1;
| }
0x0000743a cmp r3, 3 |
| if (r3 < 3) {
0x0000743c bls 0x74a8 | goto label_2;
| }
0x0000743e ldrb r2, [r0, r2] | r2 = *((r0 + r2));
0x00007440 cmp r2, 0x29 |
| if (r2 != 0x29) {
0x00007442 bne 0x74a8 | goto label_2;
| }
0x00007444 subs r2, r3, 1 | r2 = r3 - 1;
0x00007446 uxth r2, r2 | r2 = (int16_t) r2;
0x00007448 ldrb r2, [r0, r2] | r2 = *((r0 + r2));
0x0000744a subs r2, 0x30 | r2 -= 0x30;
0x0000744c cmp r2, 9 |
| if (r2 > 9) {
0x0000744e bhi 0x74a8 | goto label_2;
| }
0x00007450 subs r3, 2 | r3 -= 2;
0x00007452 push {r4, lr} |
0x00007454 uxth r3, r3 | r3 = (int16_t) r3;
0x00007456 cmp r3, 2 |
| if (r3 == 2) {
0x00007458 beq 0x74e2 | goto label_3;
| }
0x0000745a adds r2, r3, 1 | r2 = r3 + 1;
0x0000745c add r2, r0 | r2 += r0;
0x0000745e b 0x7466 |
| while (ip < 9) {
0x00007460 cmp.w lr, 2 |
| if (lr == 2) {
0x00007464 beq 0x74e2 | goto label_3;
| }
0x00007466 ldrb r1, [r2, -0x1]! | r1 = *((r2 -= 0x1));
0x0000746a mov r4, r3 | r4 = r3;
0x0000746c subs r3, 1 | r3--;
0x0000746e uxth.w lr, r3 | lr = (int16_t) r3;
0x00007472 sub.w ip, r1, 0x30 |
0x00007474 lsrs r0, r6, 0x10 | r0 = r6 >> 0x10;
0x00007476 cmp.w ip, 9 |
0x0000747a bls 0x7460 |
| }
| label_0:
0x0000747c cmp r1, 0x28 |
0x0000747e itett eq |
| if (r1 != 0x28) {
0x00007480 addeq r4, r4, r0 | r4 += r0;
| }
| if (r1 == 0x28) {
0x00007482 movne r0, 0 | r0 = 0;
| }
| if (r1 != 0x28) {
0x00007484 ldrbeq r1, [r4, -0x1] | r1 = *((r4 - 0x1));
| }
| if (r1 == 0x28) {
0x00007488 sub.w r0, r1, 0x20 | r0 = r1 - 0x20;
| }
0x0000748c itt eq |
| if (r1 == 0x28) {
0x0000748e clzeq r0, r0 | __asm ("clzeq r0, r0");
| }
| if (r1 == 0x28) {
0x00007492 lsrs r0, r0, 5 | r0 >>= 5;
| }
0x00007494 pop {r4, pc} |
| label_1:
0x00007496 cmp r3, 1 |
| if (r3 >= 1) {
0x00007498 bls 0x74a8 |
0x0000749a ldrb.w ip, [r0, r2] | ip = *((r0 + r2));
0x0000749e sub.w ip, ip, 0x30 |
0x000074a2 cmp.w ip, 9 |
| if (ip < 9) {
0x000074a6 bls 0x74ac | goto label_4;
| }
| }
| label_2:
0x000074a8 movs r0, 0 | r0 = 0;
0x000074aa bx lr | return r0;
| label_4:
0x000074ac subs r3, 1 | r3--;
0x000074ae uxth r3, r3 | r3 = (int16_t) r3;
0x000074b0 cmp r3, 2 |
0x000074b2 it ls |
| if (r3 > 2) {
0x000074b4 ldrbls r1, [r0, r3] | r1 = *((r0 + r3));
| }
| if (r3 < 2) {
0x000074b6 bls 0x74d2 | goto label_5;
| }
0x000074b8 add r2, r0 | r2 += r0;
0x000074ba b 0x74c0 |
| while (ip < 9) {
0x000074bc cmp r3, 2 |
| if (r3 == 2) {
0x000074be beq 0x74de | goto label_6;
| }
0x000074c0 ldrb r1, [r2, -0x1]! | r1 = *((r2 -= 0x1));
0x000074c4 subs r3, 1 | r3--;
0x000074c6 uxth r3, r3 | r3 = (int16_t) r3;
0x000074c8 sub.w ip, r1, 0x30 |
0x000074cc cmp.w ip, 9 |
0x000074d0 bls 0x74bc |
| }
| do {
| label_5:
0x000074d2 sub.w r0, r1, 0x2d | r0 = r1 - 0x2d;
0x000074d6 clz r0, r0 | r0 &= r0;
0x000074da lsrs r0, r0, 5 | r0 >>= 5;
0x000074dc bx lr | return r0;
| label_6:
0x000074de ldrb r1, [r0, 2] | r1 = *((r0 + 2));
0x000074e0 b 0x74d2 |
| } while (1);
| label_3:
0x000074e2 ldrb r1, [r0, 2] | r1 = *((r0 + 2));
0x000074e4 movs r4, 2 | r4 = 2;
0x000074e6 b 0x747c | goto label_0;
| }
[*] Function strcat used 1 times mDNSResponderPosix