[*] Binary protection state of zabbix_agentd
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of zabbix_agentd
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/zabbix_agentd @ 0x3e96c */
| #include <stdint.h>
|
; (fcn) sym.str_base64_decode () | void str_base64_decode (int16_t arg_84h, uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_6h;
| int16_t var_7h;
| int16_t var_8h;
| int16_t var_9h;
| int16_t var_ah;
| int16_t var_bh;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0003e96c push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0003e970 mov r8, r2 | r8 = r2;
0x0003e972 ldr r2, [pc, 0x2a4] |
0x0003e974 mov r7, r3 | r7 = r3;
0x0003e976 sub sp, 0x14 |
0x0003e978 ldr r3, [pc, 0x2a0] | r3 = *(0x3ec1c);
0x0003e97a add r2, pc | r2 = 0x7d598;
0x0003e97c ldr r3, [r2, r3] |
0x0003e97e ldr r3, [r3] | r3 = *(0x7d598);
0x0003e980 str r3, [sp, 0xc] | var_ch = r3;
0x0003e982 mov.w r3, 0 | r3 = 0;
0x0003e986 cmp r0, 0 |
| if (var_0h_2 == ) {
0x0003e988 beq.w 0x3ebc2 | goto label_6;
| }
0x0003e98c mov sb, r1 | sb = r1;
0x0003e98e cmp r1, 0 |
| if (r1 == 0) {
0x0003e990 beq.w 0x3ec02 | goto label_7;
| }
0x0003e994 cmp r7, 0 |
| if (r7 == 0) {
0x0003e996 beq.w 0x3ebee | goto label_8;
| }
0x0003e99a cmp.w r8, 0 |
0x0003e99e ittt gt |
| if (r8 <= 0) {
0x0003e9a0 movgt r4, 0 | r4 = 0;
| }
| if (r8 <= 0) {
0x0003e9a2 movgt r6, r0 | r6 = r0;
| }
| if (r8 <= 0) {
0x0003e9a4 strgt r4, [r7] | *(r7) = r4;
| }
| if (r8 <= 0) {
0x0003e9a6 ble.w 0x3ebda | goto label_9;
| }
| label_1:
0x0003e9aa mov.w r5, -1 | r5 = -1;
| do {
| label_0:
0x0003e9ae invalid |
0x0003e9b0 cmp r3, 0 |
| if (r3 == 0) {
0x0003e9b2 beq.w 0x3eb98 | goto label_10;
| }
0x0003e9b6 cmp r3, 0x5a |
0x0003e9b8 add.w r6, r6, 1 | r6++;
| if (r3 > 0x5a) {
0x0003e9bc bhi 0x3ea94 | goto label_11;
| }
0x0003e9be cmp r3, 0x2a |
0x0003e9c0 bls 0x3e9ae |
| } while (r3 < 0x2a);
0x0003e9c2 sub.w r2, r3, 0x2b | r2 = r3 - 0x2b;
0x0003e9c6 cmp r2, 0x2f |
| if (r2 > 0x2f) {
0x0003e9c8 bhi 0x3e9ae | goto label_0;
| }
0x0003e9ca adr r1, 8 | r1 = 8;
0x0003e9cc ldr.w r2, [r1, r2, lsl 2] | offset_0 = r2 << 2;
| r2 = *((r1 + offset_0));
0x0003e9d0 add r1, r2 | r1 += r2;
| /* switch table (48 cases) at 0x3e9d4 */
0x0003e9d2 bx r1 | return uint32_t (*r1)() ();
| label_11:
0x0003ea94 sub.w r2, r3, 0x61 | r2 = r3 - 0x61;
0x0003ea98 cmp r2, 0x19 |
| if (r2 > 0x19) {
0x0003ea9a bhi 0x3e9ae | goto label_0;
| }
0x0003ea9c add.w r2, r4, 0x10 | r2 = r4 + 0x10;
0x0003eaa0 cmp r4, 2 |
0x0003eaa2 add r2, sp, r2 | r2 = sp + r2;
0x0003eaa4 mov r5, r4 | r5 = r4;
0x0003eaa6 strb r3, [r2, -0xc] | *((r2 - 0xc)) = r3;
| if (r4 <= 2) {
0x0003eaaa ble.w 0x3ebb4 | goto label_12;
| }
0x0003eaae movs r4, 0 | r4 = 0;
0x0003eab0 mov r0, r4 | r0 = r4;
| label_2:
0x0003eab2 add r2, sp, 8 | r2 += var_8h;
0x0003eab4 add r3, sp, 4 | r3 += var_4h_2;
0x0003eab6 mov r1, r2 | r1 = r2;
| do {
0x0003eab8 ldrb lr, [r3], 1 |
0x0003eabc sub.w ip, lr, 0x41 |
0x0003eac0 uxtb.w ip, ip | ip = (int8_t) ip;
0x0003eac4 cmp.w ip, 0x19 |
| if (ip >= 0x19) {
0x0003eac8 bls 0x3eb00 |
0x0003eaca sub.w ip, lr, 0x61 |
0x0003eace cmp.w ip, 0x19 |
0x0003ead2 itt ls |
| if (ip > 0x19) {
0x0003ead4 subls ip, lr, 0x47 |
| }
| if (ip <= 0x19) {
0x0003ead8 uxtb.w ip, ip | ip = (int8_t) ip;
| }
| if (ip < 0x19) {
0x0003eadc bls 0x3eb00 | goto label_13;
| }
0x0003eade sub.w ip, lr, 0x30 |
0x0003eae2 cmp.w ip, 9 |
0x0003eae6 itt ls |
| if (ip > 9) {
0x0003eae8 addls ip, lr, 4 |
| }
| if (ip <= 9) {
0x0003eaec uxtb.w ip, ip | ip = (int8_t) ip;
| }
| if (ip < 9) {
0x0003eaf0 bls 0x3eb00 | goto label_13;
| }
0x0003eaf2 cmp.w lr, 0x2b |
0x0003eaf6 ite ne |
| if (lr == 0x2b) {
0x0003eaf8 movne ip, 0x3f |
| }
| if (lr != 0x2b) {
0x0003eafc mov.w ip, 0x3e | goto label_13;
| }
| }
| label_13:
0x0003eb00 cmp r1, r3 |
0x0003eb02 strb ip, [r2], 1 | *(r2) = ip;
| r2++;
0x0003eb06 bne 0x3eab8 |
| } while (r1 != r3);
| if (r5 != 0) {
0x0003eb08 cbz r5, 0x3eb78 |
0x0003eb0a ldrb.w r3, [sp, 9] | r3 = var_9h;
0x0003eb0e mov r1, sb | r1 = sb;
0x0003eb10 ldrb.w ip, [sp, 8] | ip = var_8h;
0x0003eb14 lsrs r2, r3, 4 | r2 = r3 >> 4;
0x0003eb16 orr.w r2, r2, ip, lsl 2 | r2 |= (ip << 2);
0x0003eb1a strb r2, [r1], 1 | *(r1) = r2;
| r1++;
0x0003eb1e ldr r2, [r7] | r2 = *(r7);
0x0003eb20 adds r2, 1 | r2++;
0x0003eb22 cmp r2, r8 |
0x0003eb24 str r2, [r7] | *(r7) = r2;
| if (r2 == r8) {
0x0003eb26 beq 0x3eb7e | goto label_3;
| }
0x0003eb28 cmp r5, 1 |
| if (r5 == 1) {
0x0003eb2a beq 0x3ebb8 | goto label_14;
| }
0x0003eb2c ldrb.w r2, [sp, 6] | r2 = var_6h;
0x0003eb30 cmp r2, 0x3d |
| if (r2 != 0x3d) {
0x0003eb32 beq 0x3eb50 |
0x0003eb34 ldrb.w r2, [sp, 0xa] | r2 = var_ah;
0x0003eb38 lsls r3, r3, 4 | r3 <<= 4;
0x0003eb3a add.w r1, sb, 2 | r1 = sb + 2;
0x0003eb3e orr.w r3, r3, r2, lsr 2 | r3 |= (r2 >> 2);
0x0003eb42 strb.w r3, [sb, 1] | *((sb + 1)) = r3;
0x0003eb46 ldr r3, [r7] | r3 = *(r7);
0x0003eb48 adds r3, 1 | r3++;
0x0003eb4a cmp r3, r8 |
0x0003eb4c str r3, [r7] | *(r7) = r3;
| if (r3 == r8) {
0x0003eb4e beq 0x3eb7e | goto label_3;
| }
| }
0x0003eb50 cmp r5, 3 |
| if (r5 != 3) {
0x0003eb52 bne 0x3ebb8 | goto label_14;
| }
0x0003eb54 ldrb.w r3, [sp, 7] | r3 = var_7h;
0x0003eb58 cmp r3, 0x3d |
| if (r3 == 0x3d) {
0x0003eb5a beq 0x3ebb8 | goto label_14;
| }
0x0003eb5c ldrb.w r2, [sp, 0xa] | r2 = var_ah;
0x0003eb60 mov sb, r1 | sb = r1;
0x0003eb62 ldrb.w r3, [sp, 0xb] | r3 = var_bh;
0x0003eb66 orr.w r3, r3, r2, lsl 6 | r3 |= (r2 << 6);
0x0003eb6a strb r3, [sb], 1 | *(sb) = r3;
| sb++;
0x0003eb6e ldr r3, [r7] | r3 = *(r7);
0x0003eb70 adds r3, 1 | r3++;
0x0003eb72 cmp r3, r8 |
0x0003eb74 str r3, [r7] | *(r7) = r3;
| if (r3 == r8) {
0x0003eb76 beq 0x3eb7e | goto label_3;
| }
| }
0x0003eb78 cmp r0, 0 |
| if (r0 == 0) {
0x0003eb7a beq.w 0x3e9aa | goto label_1;
| }
| do {
| label_3:
0x0003eb7e ldr r2, [pc, 0xa0] |
0x0003eb80 ldr r3, [pc, 0x98] | r3 = *(0x3ec1c);
0x0003eb82 add r2, pc | r2 = 0x7d7a8;
0x0003eb84 ldr r3, [r2, r3] | r3 = *(0x7d7a8);
0x0003eb86 ldr r2, [r3] | r2 = *(0x7d7a8);
0x0003eb88 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0003eb8a eors r2, r3 | r2 ^= r3;
0x0003eb8c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003eb90 bne 0x3ebd6 | goto label_15;
| }
0x0003eb92 add sp, 0x14 |
0x0003eb94 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_10:
0x0003eb98 adds r0, r5, 1 | r0 = r5 + 1;
0x0003eb9a cmp r0, 3 |
| if (r0 <= 3) {
0x0003eb9c bgt 0x3ebac |
0x0003eb9e add r3, sp, 4 | r3 += var_4h_2;
0x0003eba0 rsb.w r2, r5, 3 | r2 = 3 - r5;
0x0003eba4 movs r1, 0x41 | r1 = 0x41;
0x0003eba6 add r0, r3 | r0 += r3;
0x0003eba8 blx 0xc1ac | statvfs64 ();
0x0003ebaa invalid |
| }
0x0003ebac adds r3, r5, 1 | r3 = r5 + 1;
0x0003ebae beq 0x3eb7e |
| } while (r3 == r5);
0x0003ebb0 movs r0, 1 | r0 = 1;
0x0003ebb2 b 0x3eab2 | goto label_2;
| label_12:
0x0003ebb4 adds r4, 1 | r4++;
0x0003ebb6 b 0x3e9ae | goto label_0;
| label_14:
0x0003ebb8 mov sb, r1 | sb = r1;
0x0003ebba cmp r0, 0 |
| if (r0 == 0) {
0x0003ebbc beq.w 0x3e9aa | goto label_1;
| }
0x0003ebc0 b 0x3eb7e | goto label_3;
| label_6:
0x0003ebc2 ldr r3, [pc, 0x60] |
0x0003ebc4 movs r2, 0xef | r2 = 0xef;
0x0003ebc6 ldr r1, [pc, 0x60] |
0x0003ebc8 ldr r0, [pc, 0x60] |
0x0003ebca add r3, pc | r3 = 0x7d7f4;
0x0003ebcc add r1, pc | r1 = 0x7d7fa;
0x0003ebce adds r3, 0x70 | r3 += 0x70;
0x0003ebd0 add r0, pc | r0 = 0x7d800;
0x0003ebd2 blx 0xc4a0 | fcn_0000c4a0 ();
| label_15:
0x0003ebd6 blx 0xbe48 | fcn_0000be48 ();
| label_9:
0x0003ebda ldr r3, [pc, 0x54] |
0x0003ebdc movs r2, 0xf2 | r2 = 0xf2;
0x0003ebde ldr r1, [pc, 0x54] |
0x0003ebe0 ldr r0, [pc, 0x54] |
0x0003ebe2 add r3, pc | r3 = 0x7d818;
0x0003ebe4 add r1, pc | r1 = 0x7d81e;
0x0003ebe6 adds r3, 0x70 | r3 += 0x70;
0x0003ebe8 add r0, pc | r0 = 0x7d824;
0x0003ebea blx 0xc4a0 | fcn_0000c4a0 ();
| label_8:
0x0003ebee ldr r3, [pc, 0x4c] |
0x0003ebf0 movs r2, 0xf1 | r2 = 0xf1;
0x0003ebf2 ldr r1, [pc, 0x4c] |
0x0003ebf4 ldr r0, [pc, 0x4c] |
0x0003ebf6 add r3, pc | r3 = 0x7d838;
0x0003ebf8 add r1, pc | r1 = 0x7d83e;
0x0003ebfa adds r3, 0x70 | r3 += 0x70;
0x0003ebfc add r0, pc | r0 = 0x7d844;
0x0003ebfe blx 0xc4a0 | fcn_0000c4a0 ();
| label_7:
0x0003ec02 ldr r3, [pc, 0x44] |
0x0003ec04 movs r2, 0xf0 | r2 = 0xf0;
0x0003ec06 ldr r1, [pc, 0x44] |
0x0003ec08 ldr r0, [pc, 0x44] |
0x0003ec0a add r3, pc | r3 = 0x7d858;
0x0003ec0c add r1, pc | r1 = 0x7d85e;
0x0003ec0e adds r3, 0x70 | r3 += 0x70;
0x0003ec10 add r0, pc | r0 = 0x7d864;
0x0003ec12 blx 0xc4a0 | fcn_0000c4a0 ();
0x0003ec16 nop |
0x0003ec18 b 0x3f100 |
0x0003f100 movt r3, 0xf6bb | r3 = (r3 & 0xFFFF) | 0xNaN0000;
0x0003f104 add.w lr, r2, lr, ror 21 | lr = r2 + (lr >>> 21);
0x0003f108 add r3, sl | r3 += sl;
0x0003f10a add ip, r3 |
0x0003f10c eor.w r3, r1, r2 | r3 = r1 ^ r2;
0x0003f110 eor.w r3, r3, lr | r3 ^= lr;
0x0003f114 add r3, ip | r3 += ip;
0x0003f116 movw ip, 0xbc70 |
0x0003f11a movt ip, 0xbebf |
0x0003f11e add.w r3, lr, r3, ror 16 | r3 = lr + (r3 >>> 16);
0x0003f122 add ip, r0 |
0x0003f124 add r1, ip | r1 += ip;
0x0003f126 eor.w ip, r2, lr |
0x0003f12a eor.w ip, ip, r3 |
0x0003f12e sub.w r0, r0, 0x100000 | r0 -= case.0x3207a.11;
0x0003f132 add ip, r1 |
0x0003f134 movw r1, 0x7ec6 |
0x0003f138 movt r1, 0x289b | r1 = 0xNaN;
0x0003f13c add.w ip, r3, ip, ror 9 |
0x0003f140 add r1, r5 | r1 += r5;
0x0003f142 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0003f144 add r1, r2 | r1 += r2;
0x0003f146 eor.w r2, lr, r3 | r2 = lr ^ r3;
0x0003f14a eor.w r2, r2, ip | r2 ^= ip;
0x0003f14e subw r0, r0, 0xb83 | __asm ("subw r0, r0, case.0x3207a.11");
0x0003f152 add r2, r1 | r2 += r1;
0x0003f154 movw r1, 0x27fa |
0x0003f158 movt r1, 0xeaa1 | r1 = 0xNaN;
0x0003f15c add.w r2, ip, r2, ror 28 | r2 = ip + (r2 >>> 28);
0x0003f160 add r1, r6 | r1 += r6;
0x0003f162 ldr r6, [sp, 0x10] | r6 = var_10h;
0x0003f164 add lr, r1 | lr += r1;
0x0003f166 eor.w r1, r3, ip | r1 = r3 ^ ip;
0x0003f16a eors r1, r2 | r1 ^= r2;
0x0003f16c add r1, lr | r1 += lr;
0x0003f16e movw lr, 0x3085 |
0x0003f172 movt lr, 0xd4ef | lr = 0xNaN;
0x0003f176 add.w r1, r2, r1, ror 21 | r1 = r2 + (r1 >>> 21);
0x0003f17a add lr, r6 | lr += r6;
0x0003f17c ldr r6, [sp, 0xc] | r6 = var_ch;
0x0003f17e add lr, r3 | lr += r3;
0x0003f180 eor.w r3, ip, r2 | r3 = ip ^ r2;
0x0003f184 eors r3, r1 | r3 ^= r1;
0x0003f186 add r3, lr | r3 += lr;
0x0003f188 movw lr, 0x1d05 |
0x0003f18c movt lr, 0x488 | lr = 0xNaN;
0x0003f190 add.w r3, r1, r3, ror 16 | r3 = r1 + (r3 >>> 16);
0x0003f194 add lr, r5 | lr += r5;
0x0003f196 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0003f198 add lr, ip | lr += ip;
0x0003f19a eor.w ip, r2, r1 |
0x0003f19e eor.w ip, ip, r3 |
0x0003f1a2 add ip, lr |
0x0003f1a4 movw lr, 0xd039 |
0x0003f1a8 movt lr, 0xd9d4 | lr = 0xNaN;
0x0003f1ac add.w ip, r3, ip, ror 9 |
0x0003f1b0 add lr, r4 | lr += r4;
0x0003f1b2 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0003f1b4 add lr, r2 | lr += r2;
0x0003f1b6 eor.w r2, r1, r3 | r2 = r1 ^ r3;
0x0003f1ba eor.w r2, r2, ip | r2 ^= ip;
0x0003f1be add r2, lr | r2 += lr;
0x0003f1c0 movw lr, 0x99e5 |
0x0003f1c4 movt lr, 0xe6db | lr = 0xNaN;
0x0003f1c8 add.w r2, ip, r2, ror 28 | r2 = ip + (r2 >>> 28);
0x0003f1cc add lr, r8 | lr += r8;
0x0003f1ce add lr, r1 | lr += r1;
0x0003f1d0 eor.w r1, r3, ip | r1 = r3 ^ ip;
0x0003f1d4 eors r1, r2 | r1 ^= r2;
0x0003f1d6 add r1, lr | r1 += lr;
0x0003f1d8 movw lr, 0x7cf8 |
0x0003f1dc movt lr, 0x1fa2 | lr = 0xNaN;
0x0003f1e0 add.w r1, r2, r1, ror 21 | r1 = r2 + (r1 >>> 21);
0x0003f1e4 add lr, r7 | lr += r7;
0x0003f1e6 add r3, lr | r3 += lr;
0x0003f1e8 eor.w lr, ip, r2 | lr = ip ^ r2;
0x0003f1ec eor.w lr, lr, r1 | lr ^= r1;
0x0003f1f0 add lr, r3 | lr += r3;
0x0003f1f2 movw r3, 0x5665 |
0x0003f1f6 movt r3, 0xc4ac | r3 = 0xNaN;
0x0003f1fa add.w lr, r1, lr, ror 16 | lr = r1 + (lr >>> 16);
0x0003f1fe add r3, r6 | r3 += r6;
0x0003f200 ldr r6, [sp, 4] | r6 = var_4h_2;
0x0003f202 add ip, r3 |
0x0003f204 eor.w r3, r2, r1 | r3 = r2 ^ r1;
0x0003f208 eor.w r3, r3, lr | r3 ^= lr;
0x0003f20c add r3, ip | r3 += ip;
0x0003f20e movw ip, 0x2244 |
0x0003f212 add.w r3, lr, r3, ror 9 | r3 = lr + (r3 >>> 9);
0x0003f216 movt ip, 0xf429 |
0x0003f21a add ip, r6 |
0x0003f21c ldr r6, [sp, 0x10] | r6 = var_10h;
0x0003f21e add ip, r2 |
0x0003f220 orn r2, r3, r1 | r2 = r3 | r1;
| r2 = ~r2;
0x0003f224 eor.w r2, r2, lr | r2 ^= lr;
0x0003f228 add r2, ip | r2 += ip;
0x0003f22a movw ip, 0xff97 |
0x0003f22e add.w r2, r3, r2, ror 26 | r2 = r3 + (r2 >>> 26);
0x0003f232 movt ip, 0x432a |
0x0003f236 add ip, sl |
0x0003f238 add ip, r1 |
0x0003f23a orn r1, r2, lr | r1 = r2 | lr;
| r1 = ~r1;
0x0003f23e eors r1, r3 | r1 ^= r3;
0x0003f240 add r1, ip | r1 += ip;
0x0003f242 movw ip, 0x23a7 |
0x0003f246 add.w r1, r2, r1, ror 22 | r1 = r2 + (r1 >>> 22);
0x0003f24a movt ip, 0xab94 |
0x0003f24e add ip, r4 |
0x0003f250 ldr r4, [sp, 0x34] | r4 = var_4h;
0x0003f252 add ip, lr |
0x0003f254 orn lr, r1, r3 | lr = r1 | r3;
| lr = ~lr;
0x0003f258 eor.w lr, lr, r2 | lr ^= r2;
0x0003f25c add ip, lr |
0x0003f25e movw lr, 0xa039 | lr = (lr & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f262 add.w ip, r1, ip, ror 17 |
0x0003f266 movt lr, 0xfc93 | lr = (lr & 0xFFFF) | 0xNaN0000;
0x0003f26a add lr, r4 | lr += r4;
0x0003f26c ldr r4, [sp, 0x14] | r4 = var_14h;
0x0003f26e add lr, r3 | lr += r3;
0x0003f270 orn r3, ip, r2 | r3 = ip | r2;
| r3 = ~r3;
0x0003f274 eors r3, r1 | r3 ^= r1;
0x0003f276 add r0, ip | r0 += ip;
0x0003f278 add r3, lr | r3 += lr;
0x0003f27a movw lr, 0x59c3 | lr = (lr & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f27e add.w r3, ip, r3, ror 11 | r3 = ip + (r3 >>> 11);
0x0003f282 movt lr, 0x655b | lr = (lr & 0xFFFF) | 0xNaN0000;
0x0003f286 add lr, r8 | lr += r8;
0x0003f288 add lr, r2 | lr += r2;
0x0003f28a orn r2, r3, r1 | r2 = r3 | r1;
| r2 = ~r2;
0x0003f28e eor.w r2, r2, ip | r2 ^= ip;
0x0003f292 add r2, lr | r2 += lr;
0x0003f294 movw lr, 0xcc92 | lr = (lr & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f298 add.w r2, r3, r2, ror 26 | r2 = r3 + (r2 >>> 26);
0x0003f29c movt lr, 0x8f0c | lr = (lr & 0xFFFF) | 0xNaN0000;
0x0003f2a0 add lr, r6 | lr += r6;
0x0003f2a2 ldr r6, [sp, 8] | r6 = var_8h;
0x0003f2a4 orn ip, r2, ip | ip = r2 | ip;
| ip = ~ip;
0x0003f2a8 add lr, r1 | lr += r1;
0x0003f2aa eor.w ip, ip, r3 |
0x0003f2ae movw r1, 0x5dd1 | r1 = (r1 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f2b2 add ip, lr |
0x0003f2b4 movt r1, 0x8584 | r1 = (r1 & 0xFFFF) | 0xNaN0000;
0x0003f2b8 add.w ip, r2, ip, ror 22 |
0x0003f2bc add r1, r6 | r1 += r6;
0x0003f2be add r1, r3 | r1 += r3;
0x0003f2c0 orn r3, ip, r3 | r3 = ip | r3;
| r3 = ~r3;
0x0003f2c4 eors r3, r2 | r3 ^= r2;
0x0003f2c6 add r3, r0 | r3 += r0;
0x0003f2c8 movw r0, 0x7e4f | r0 = (r0 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f2cc add.w r3, ip, r3, ror 17 | r3 = ip + (r3 >>> 17);
0x0003f2d0 movt r0, 0x6fa8 | r0 = (r0 & 0xFFFF) | 0xNaN0000;
0x0003f2d4 add r0, r5 | r0 += r5;
0x0003f2d6 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0003f2d8 add r0, r2 | r0 += r2;
0x0003f2da orn r2, r3, r2 | r2 = r3 | r2;
| r2 = ~r2;
0x0003f2de eor.w r2, r2, ip | r2 ^= ip;
0x0003f2e2 add r2, r1 | r2 += r1;
0x0003f2e4 movw r1, 0xe6e0 | r1 = (r1 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f2e8 add.w r2, r3, r2, ror 11 | r2 = r3 + (r2 >>> 11);
0x0003f2ec movt r1, 0xfe2c | r1 = (r1 & 0xFFFF) | 0xNaN0000;
0x0003f2f0 add r1, r7 | r1 += r7;
0x0003f2f2 ldr r7, [sp, 0x24] | r7 = var_24h;
0x0003f2f4 add r1, ip | r1 += ip;
0x0003f2f6 orn ip, r2, ip | ip = r2 | ip;
| ip = ~ip;
0x0003f2fa eor.w ip, ip, r3 |
0x0003f2fe add ip, r0 |
0x0003f300 movw r0, 0x4314 | r0 = (r0 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f304 add.w ip, r2, ip, ror 26 |
0x0003f308 movt r0, 0xa301 | r0 = (r0 & 0xFFFF) | 0xNaN0000;
0x0003f30c add r0, r5 | r0 += r5;
0x0003f30e ldr r5, [sp, 0x28] | r5 = var_28h;
0x0003f310 add r0, r3 | r0 += r3;
0x0003f312 orn r3, ip, r3 | r3 = ip | r3;
| r3 = ~r3;
0x0003f316 eors r3, r2 | r3 ^= r2;
0x0003f318 add r3, r1 | r3 += r1;
0x0003f31a movw r1, 0x11a1 | r1 = (r1 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f31e add.w r3, ip, r3, ror 22 | r3 = ip + (r3 >>> 22);
0x0003f322 movt r1, 0x4e08 | r1 = (r1 & 0xFFFF) | 0xNaN0000;
0x0003f326 add r1, r5 | r1 += r5;
0x0003f328 add r1, r2 | r1 += r2;
0x0003f32a orn r2, r3, r2 | r2 = r3 | r2;
| r2 = ~r2;
0x0003f32e eor.w r2, r2, ip | r2 ^= ip;
0x0003f332 add r2, r0 | r2 += r0;
0x0003f334 movw r0, 0x7e82 | r0 = (r0 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f338 add.w r2, r3, r2, ror 17 | r2 = r3 + (r2 >>> 17);
0x0003f33c movt r0, 0xf753 | r0 = (r0 & 0xFFFF) | 0xNaN0000;
0x0003f340 add r0, r4 | r0 += r4;
0x0003f342 add r0, ip | r0 += ip;
0x0003f344 orn ip, r2, ip | ip = r2 | ip;
| ip = ~ip;
0x0003f348 eor.w ip, ip, r3 |
0x0003f34c add ip, r1 |
0x0003f34e movw r1, 0xf235 | r1 = (r1 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003f352 add.w ip, r2, ip, ror 11 |
0x0003f356 movt r1, 0xbd3a | r1 = (r1 & 0xFFFF) | 0xNaN0000;
0x0003f35a add r1, r7 | r1 += r7;
0x0003f35c ldr r7, [sp, 0x38] | r7 = var_38h;
0x0003f35e add r1, r3 | r1 += r3;
0x0003f360 orn r3, ip, r3 | r3 = ip | r3;
| r3 = ~r3;
0x0003f364 eors r3, r2 | r3 ^= r2;
0x0003f366 ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x0003f368 add r3, r0 | r3 += r0;
0x0003f36a ldr r6, [sp, 0xc] | r6 = var_ch;
0x0003f36c add.w r3, ip, r3, ror 26 | r3 = ip + (r3 >>> 26);
0x0003f370 ldr r4, [sp] | r4 = *(sp);
0x0003f372 adds r0, r7, r3 | r0 = r7 + r3;
0x0003f374 str r0, [r5, 8] | *((r5 + 8)) = r0;
0x0003f376 orn r0, r3, r2 | r0 = r3 | r2;
| r0 = ~r0;
0x0003f37a eor.w r0, r0, ip | r0 ^= ip;
0x0003f37e add r1, r0 | r1 += r0;
0x0003f380 ldr r0, [sp, 0x30] | r0 = var_0h;
0x0003f382 add.w r1, r3, r1, ror 22 | r1 = r3 + (r1 >>> 22);
0x0003f386 add r0, r1 | r0 += r1;
0x0003f388 str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x0003f38a movw r0, 0xd2bb |
0x0003f38e movt r0, 0x2ad7 | r0 = 0xNaN;
0x0003f392 add r0, r6 | r0 += r6;
0x0003f394 add r0, r2 | r0 += r2;
0x0003f396 orn r2, r1, ip | r2 = r1 | ip;
| r2 = ~r2;
0x0003f39a eors r2, r3 | r2 ^= r3;
0x0003f39c add r2, r0 | r2 += r0;
0x0003f39e add.w r2, r1, r2, ror 17 | r2 = r1 + (r2 >>> 17);
0x0003f3a2 orn r3, r2, r3 | r3 = r2 | r3;
| r3 = ~r3;
0x0003f3a6 add r4, r2 | r4 += r2;
0x0003f3a8 add r2, sb | r2 += sb;
0x0003f3aa eors r3, r1 | r3 ^= r1;
0x0003f3ac str r2, [r5, 0x10] | *((r5 + 0x10)) = r2;
0x0003f3ae mov r1, r5 | r1 = r5;
0x0003f3b0 ldr r5, [sp, 0x20] | r5 = var_20h;
0x0003f3b2 movw r2, 0xd391 |
0x0003f3b6 movt r2, 0xeb86 | r2 = 0xNaN;
0x0003f3ba add r2, r5 | r2 += r5;
0x0003f3bc add r2, ip | r2 += ip;
0x0003f3be add r3, r2 | r3 += r2;
0x0003f3c0 ldr r2, [pc, 0x5c] |
0x0003f3c2 add.w r4, r4, r3, ror 11 | r4 += (r3 >>> 11);
0x0003f3c6 ldr r3, [pc, 0x54] | r3 = *(0x3f41e);
0x0003f3c8 add r2, pc | r2 = 0x7e7ec;
0x0003f3ca str r4, [r1, 0xc] | *((r1 + 0xc)) = r4;
0x0003f3cc ldr r3, [r2, r3] | r3 = *(0x7e7ec);
0x0003f3ce ldr r2, [r3] | r2 = *(0x7e7ec);
0x0003f3d0 ldr r3, [sp, 0x84] | r3 = *(arg_84h);
0x0003f3d2 eors r2, r3 | r2 ^= r3;
0x0003f3d4 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0003f3d8 bne 0x3f412 |
0x0003f3da add sp, 0x8c |
0x0003f3dc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0003f412 blx 0xbe48 | fcn_0000be48 ();
0x0003f416 nop |
0x0003f418 svc 0x8a | __asm ("svc 0x8a");
0x0003f41a movs r1, r0 | r1 = r0;
0x0003f41c lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x0003f41e movs r0, r0 |
| if (r0 <= r0) {
0x0003f420 bhi 0x3f46c |
0x0003f422 movs r1, r0 | r1 = r0;
| }
0x0003f46c ubfx r3, r3, 3, 6 | r3 = (r3 >> 3) & ((1 << 6) - 1);
0x0003f470 add.w r2, r2, r5, asr 29 | r2 += (r5 >> 29);
0x0003f474 str r1, [r0] | *(r0) = r1;
0x0003f476 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0003f478 itt hs |
| if (r1 < r0) {
0x0003f47a addhs r2, 1 | r2++;
| }
| if (r1 < r0) {
0x0003f47c strhs r2, [r0, 4] | *((r0 + 4)) = r2;
| }
| if (r3 != 0) {
0x0003f47e cbnz r3, 0x3f4c4 | goto label_16;
| }
0x0003f480 cmp r5, 0x3f |
| if (r5 <= 0x3f) {
0x0003f482 ble 0x3f50c | goto label_17;
| }
| label_4:
0x0003f484 mov r4, r7 | r4 = r7;
0x0003f486 adds r6, r7, r5 | r6 = r7 + r5;
| do {
0x0003f488 mov r1, r4 | r1 = r4;
0x0003f48a mov r0, r8 | r0 = r8;
0x0003f48c adds r4, 0x40 | r4 += 0x40;
0x0003f48e bl 0x3ec54 | fcn_0003ec54 (r0, r1);
0x0003f492 subs r3, r6, r4 | r3 = r6 - r4;
0x0003f494 cmp r3, 0x3f |
0x0003f496 bgt 0x3f488 |
| } while (r3 > 0x3f);
0x0003f498 sub.w r2, r5, 0x40 | r2 = r5 - 0x40;
0x0003f49c cmp r5, 0x3f |
0x0003f49e lsr.w r5, r2, 6 | r5 = r2 >> 6;
0x0003f4a2 add.w r3, r5, 1 | r3 = r5 + 1;
0x0003f4a6 lsl.w r5, r5, 6 | r5 <<= 6;
0x0003f4aa lsl.w r3, r3, 6 | r3 <<= 6;
0x0003f4ae it le |
| if (r5 > 0x3f) {
0x0003f4b0 movle r3, 0x40 | r3 = 0x40;
| }
0x0003f4b2 rsb.w r5, r5, 0 | r5 -= ;
0x0003f4b6 it le |
| if (r5 > 0x3f) {
0x0003f4b8 movle r5, 0 | r5 = 0;
| }
0x0003f4ba add r7, r3 | r7 += r3;
0x0003f4bc add r5, r2 | r5 += r2;
| if (r5 != 0) {
0x0003f4be cbnz r5, 0x3f50c | goto label_17;
| }
| label_5:
0x0003f4c0 pop.w {r4, r5, r6, r7, r8, pc} |
| label_16:
0x0003f4c4 adds r4, r5, r3 | r4 = r5 + r3;
0x0003f4c6 cmp r4, 0x40 |
| if (r4 <= 0x40) {
0x0003f4c8 ble 0x3f4f0 | goto label_18;
| }
0x0003f4ca add.w r4, r0, 0x18 | r4 = r0 + 0x18;
0x0003f4ce rsb.w r2, r3, 0x40 | r2 = 0x40 - r3;
0x0003f4d2 mov r1, r7 | r1 = r7;
0x0003f4d4 adds r0, r4, r3 | r0 = r4 + r3;
0x0003f4d6 subs r5, r5, r2 | r5 -= r2;
0x0003f4d8 add r7, r2 | r7 += r2;
0x0003f4da blx 0xbd78 | fcn_0000bd78 ();
0x0003f4de mov r1, r4 | r1 = r4;
0x0003f4e0 mov r0, r8 | r0 = r8;
0x0003f4e2 bl 0x3ec54 | fcn_0003ec54 (r0, r1);
0x0003f4e6 cmp r5, 0x3f |
| if (r5 > 0x3f) {
0x0003f4e8 bgt 0x3f484 | goto label_4;
| }
0x0003f4ea cmp r5, 0 |
| if (r5 == 0) {
0x0003f4ec beq 0x3f4c0 | goto label_5;
| }
0x0003f4ee b 0x3f50c | goto label_17;
| label_18:
0x0003f4f0 mov r2, r5 | r2 = r5;
0x0003f4f2 add.w r5, r0, 0x18 | r5 = r0 + 0x18;
0x0003f4f6 mov r1, r7 | r1 = r7;
0x0003f4f8 adds r0, r5, r3 | r0 = r5 + r3;
0x0003f4fa blx 0xbd78 | fcn_0000bd78 ();
0x0003f4fe cmp r4, 0x40 |
| if (r4 != 0x40) {
0x0003f500 bne 0x3f4c0 | goto label_5;
| }
0x0003f502 mov r1, r5 | r1 = r5;
0x0003f504 mov r0, r8 | r0 = r8;
0x0003f506 bl 0x3ec54 | fcn_0003ec54 (r0, r1);
0x0003f50a b 0x3f4c0 | goto label_5;
| label_17:
0x0003f50c mov r2, r5 | r2 = r5;
0x0003f50e mov r1, r7 | r1 = r7;
0x0003f510 add.w r0, r8, 0x18 | r0 = r8 + 0x18;
0x0003f514 pop.w {r4, r5, r6, r7, r8, lr} |
0x0003f518 b.w 0xbd74 | return void (*0xbd74)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/zabbix_agentd @ 0x3af00 */
| #include <stdint.h>
|
; (fcn) sym.zbx_replace_string () | void zbx_replace_string (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0003af00 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003af04 mov r8, r2 | r8 = r2;
0x0003af06 sub sp, 0xc |
0x0003af08 mov r7, r0 | r7 = r0;
0x0003af0a mov r0, r3 | r0 = r3;
0x0003af0c mov r5, r1 | r5 = r1;
0x0003af0e mov r6, r3 | r6 = r3;
0x0003af10 rsb.w fp, r5, 1 |
0x0003af14 blx 0xc114 | r0 = fcn_0000c114 ();
0x0003af18 mov r4, r0 | r4 = r0;
0x0003af1a ldr.w r0, [r8] | r0 = *(r8);
0x0003af1e add.w sb, r0, fp | sb = r0 + fp;
0x0003af22 cmp r4, sb |
| if (r4 == sb) {
0x0003af24 beq 0x3af5e | goto label_0;
| }
0x0003af26 ldr r3, [r7] | r3 = *(r7);
0x0003af28 add.w sl, r5, -1 | sl = r5 + -1;
0x0003af2c add sl, r4 | sl += r4;
0x0003af2e add r0, r3 | r0 += r3;
0x0003af30 str r3, [sp, 4] | var_4h = r3;
0x0003af32 blx 0xc114 | fcn_0000c114 ();
0x0003af36 cmp r4, sb |
0x0003af38 ldr r3, [sp, 4] | r3 = var_4h;
0x0003af3a add sl, r0 | sl += r0;
0x0003af3c bhi 0x3af70 |
| while (1) {
0x0003af3e add.w r1, r5, sb | r1 = r5 + sb;
0x0003af42 sub.w r2, fp, r4 | r2 = fp - r4;
0x0003af46 add.w sb, r4, r5 | sb = r4 + r5;
0x0003af4a add r1, r3 | r1 += r3;
0x0003af4c add.w r0, r3, sb | r0 = r3 + sb;
0x0003af50 add r2, sl | r2 += sl;
0x0003af52 blx 0xbcf8 | fcn_0000bcf8 ();
0x0003af56 add.w r3, sb, -1 | r3 = sb + -1;
0x0003af5a str.w r3, [r8] | __asm ("str.w r3, [r8]");
| label_0:
0x0003af5e ldr r0, [r7] | r0 = *(r7);
0x0003af60 mov r2, r4 | r2 = r4;
0x0003af62 mov r1, r6 | r1 = r6;
0x0003af64 add r0, r5 | r0 += r5;
0x0003af66 add sp, 0xc |
0x0003af68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003af6c b.w 0xbd74 | void (*0xbd74)() ();
0x0003af70 ldr r0, [pc, 0x14] |
0x0003af72 mov r2, r3 | r2 = r3;
0x0003af74 mov.w r1, 0xa60 | r1 = case.0x3207a.11;
0x0003af78 add.w r3, sl, 1 | r3 = sl + 1;
0x0003af7c add r0, pc | r0 = 0x75f08;
0x0003af7e bl 0x35cb8 | r0 = zbx_realloc2 ();
0x0003af82 mov r3, r0 | r3 = r0;
0x0003af84 str r0, [r7] | *(r7) = r0;
0x0003af86 b 0x3af3e |
| }
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/zabbix_agentd @ 0x3cc0c */
| #include <stdint.h>
|
; (fcn) sym.zbx_strsplit () | void zbx_strsplit (int16_t arg1, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x0003cc0c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0003cc10 mov r6, r0 | r6 = r0;
0x0003cc12 mov r5, r2 | r5 = r2;
0x0003cc14 mov r7, r3 | r7 = r3;
0x0003cc16 blx 0xc138 | r0 = fcn_0000c138 ();
0x0003cc1a mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0003cc1c cbz r0, 0x3cc74 |
0x0003cc1e ldr.w sl, [pc, 0x6c] |
0x0003cc22 sub.w r8, r0, r6 | r8 = r0 - r6;
0x0003cc26 mov r0, r6 | r0 = r6;
0x0003cc28 blx 0xc114 | fcn_0000c114 ();
0x0003cc2c add sl, pc | sl = 0x798be;
0x0003cc2e sub.w sb, r0, r8 | sb = r0 - r8;
0x0003cc32 add.w r3, r8, 1 | r3 = r8 + 1;
0x0003cc36 movs r2, 0 | r2 = 0;
0x0003cc38 movw r1, 0x160d | r1 = (r1 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003cc3c mov r0, sl | r0 = sl;
0x0003cc3e bl 0x35c28 | zbx_malloc2 ();
0x0003cc42 mov r3, sb | r3 = sb;
0x0003cc44 str r0, [r5] | *(r5) = r0;
0x0003cc46 movs r2, 0 | r2 = 0;
0x0003cc48 mov r0, sl | r0 = sl;
0x0003cc4a movw r1, 0x160e | r1 = (r1 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003cc4e bl 0x35c28 | zbx_malloc2 ();
0x0003cc52 mov r1, r6 | r1 = r6;
0x0003cc54 mov r2, r8 | r2 = r8;
0x0003cc56 str r0, [r7] | *(r7) = r0;
0x0003cc58 ldr r0, [r5] | r0 = *(r5);
0x0003cc5a blx 0xbd78 | fcn_0000bd78 ();
0x0003cc5e ldr r3, [r5] | r3 = *(r5);
0x0003cc60 movs r0, 0 | r0 = 0;
0x0003cc62 mov r2, sb | r2 = sb;
0x0003cc64 adds r1, r4, 1 | r1 = r4 + 1;
0x0003cc66 strb.w r0, [r3, r8] | *((r3 + r8)) = r0;
0x0003cc6a ldr r0, [r7] | r0 = *(r7);
0x0003cc6c pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0003cc70 b.w 0xbd74 | void (*0xbd74)() ();
| }
0x0003cc74 mov r2, r0 | r2 = r0;
0x0003cc76 ldr r0, [pc, 0x18] |
0x0003cc78 mov r3, r6 | r3 = r6;
0x0003cc7a movw r1, 0x1602 | r1 = (r1 & 0xFFFF0000) | (case.0x3207a.11 & 0xFFFF);
0x0003cc7e add r0, pc | r0 = 0x79914;
0x0003cc80 bl 0x35d28 | zbx_strdup2 ();
0x0003cc84 str r0, [r5] | *(r5) = r0;
0x0003cc86 str r4, [r7] | *(r7) = r4;
0x0003cc88 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
[*] Function mmap used 1 times zabbix_agentd