[*] Binary protection state of libxt_conntrack.so
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libxt_conntrack.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/libxt_conntrack.so @ 0x1034 */
| #include <stdint.h>
|
; (fcn) fcn.00001034 () | void fcn_00001034 (uint32_t arg1) {
| r0 = arg1;
0x00001034 tst r0, 1 |
0x00001038 push {r4, lr} |
0x0000103c mov r4, r0 | r4 = r0;
| if ((r0 & 1) == 0) {
0x00001040 beq 0x1104 | goto label_0;
| }
0x00001044 ldr r1, [pc, 0xc4] | r1 = *(0x110c);
0x00001048 ldr r0, [pc, 0xc4] | r0 = *(0x1110);
0x0000104c add r1, pc, r1 | r1 = pc + r1;
0x00001050 add r0, pc, r0 | r0 = pc + r0;
0x00001054 bl 0xacc | printf (r0, r1)
0x00001058 ldr r1, [pc, 0xb8] | r1 = *(0x1114);
0x0000105c add r1, pc, r1 | r1 = pc + r1;
| do {
0x00001060 tst r4, 8 |
| if ((r4 & 8) != 0) {
0x00001064 beq 0x107c |
0x00001068 ldr r0, [pc, 0xac] | r0 = *(0x1118);
0x0000106c add r0, pc, r0 | r0 = pc + r0;
0x00001070 bl 0xacc | printf (r0)
0x00001074 ldr r1, [pc, 0xa4] | r1 = *(0x111c);
0x00001078 add r1, pc, r1 | r1 = pc + r1;
| }
0x0000107c tst r4, 4 |
| if ((r4 & 4) != 0) {
0x00001080 beq 0x1098 |
0x00001084 ldr r0, [pc, 0x98] | r0 = *(0x1120);
0x00001088 add r0, pc, r0 | r0 = pc + r0;
0x0000108c bl 0xacc | printf (r0)
0x00001090 ldr r1, [pc, 0x90] | r1 = *(0x1124);
0x00001094 add r1, pc, r1 | r1 = pc + r1;
| }
0x00001098 tst r4, 2 |
| if ((r4 & 2) != 0) {
0x0000109c beq 0x10b4 |
0x000010a0 ldr r0, [pc, 0x84] | r0 = *(0x1128);
0x000010a4 add r0, pc, r0 | r0 = pc + r0;
0x000010a8 bl 0xacc | printf (r0)
0x000010ac ldr r1, [pc, 0x7c] | r1 = *(0x112c);
0x000010b0 add r1, pc, r1 | r1 = pc + r1;
| }
0x000010b4 tst r4, 0x100 |
| if ((r4 & 0x100) != 0) {
0x000010b8 beq 0x10d0 |
0x000010bc ldr r0, [pc, 0x70] | r0 = *(0x1130);
0x000010c0 add r0, pc, r0 | r0 = pc + r0;
0x000010c4 bl 0xacc | printf (r0)
0x000010c8 ldr r1, [pc, 0x68] | r1 = *(0x1134);
0x000010cc add r1, pc, r1 | r1 = pc + r1;
| }
0x000010d0 tst r4, 0x40 |
| if ((r4 & 0x40) != 0) {
0x000010d4 beq 0x10ec |
0x000010d8 ldr r0, [pc, 0x5c] | r0 = *(0x1138);
0x000010dc add r0, pc, r0 | r0 = pc + r0;
0x000010e0 bl 0xacc | printf (r0)
0x000010e4 ldr r1, [pc, 0x54] | r1 = *(0x113c);
0x000010e8 add r1, pc, r1 | r1 = pc + r1;
| }
0x000010ec tst r4, 0x80 |
0x000010f0 popeq {r4, pc} |
0x000010f4 ldr r0, [pc, 0x48] | r0 = *(0x1140);
0x000010f8 pop {r4, lr} |
0x000010fc add r0, pc, r0 | r0 = pc + r0;
0x00001100 b 0xacc | void (*0xacc)() ();
| label_0:
0x00001104 ldr r1, [pc, 0x3c] | r1 = *(0x1144);
0x00001108 add r1, pc, r1 | r1 = pc + r1;
0x0000110c b 0x1060 |
| } while (1);
| }
; 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/libxt_conntrack.so @ 0x114c */
| #include <stdint.h>
|
; (fcn) fcn.0000114c () | void fcn_0000114c (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x0000114c cmp r3, r2 |
0x00001150 cmpne r3, 0 | __asm ("cmpne r3, 0");
0x00001154 push {r0, r1, r2, lr} |
| if (r3 == r2) {
0x00001158 bne 0x117c |
0x0000115c mov r3, r2 | r3 = r2;
0x00001160 mov r2, r1 | r2 = r1;
0x00001164 mov r1, r0 | r1 = r0;
0x00001168 ldr r0, [pc, 0x34] | r0 = *(0x11a0);
0x0000116c add r0, pc, r0 | r0 = pc + r0;
0x00001170 add sp, sp, 0xc |
0x00001174 pop {lr} |
0x00001178 b 0xacc | void (*0xacc)() ();
| }
0x0000117c mov ip, r3 |
0x00001180 mov r3, r2 | r3 = r2;
0x00001184 mov r2, r1 | r2 = r1;
0x00001188 mov r1, r0 | r1 = r0;
0x0000118c ldr r0, [pc, 0x14] | r0 = *(0x11a4);
0x00001190 str ip, [sp] | *(sp) = ip;
0x00001194 add r0, pc, r0 | r0 = pc + r0;
0x00001198 bl 0xacc | printf (r0, r1, r2, r3)
0x0000119c add sp, sp, 0xc |
0x000011a0 pop {pc} |
| }
; 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/libxt_conntrack.so @ 0x11ac */
| #include <stdint.h>
|
; (fcn) fcn.000011ac () | void fcn_000011ac (uint32_t arg1) {
| r0 = arg1;
0x000011ac tst r0, 1 |
0x000011b0 push {r4, lr} |
0x000011b4 mov r4, r0 | r4 = r0;
| if ((r0 & 1) == 0) {
0x000011b8 beq 0x1228 | goto label_1;
| }
0x000011bc ldr r1, [pc, 0x84] | r1 = *(0x1244);
0x000011c0 ldr r0, [pc, 0x84] | r0 = *(0x1248);
0x000011c4 add r1, pc, r1 | r1 = pc + r1;
0x000011c8 add r0, pc, r0 | r0 = pc + r0;
0x000011cc bl 0xacc | printf (r0, r1)
0x000011d0 ldr r1, [pc, 0x78] | r1 = *(0x124c);
0x000011d4 add r1, pc, r1 | r1 = pc + r1;
| do {
0x000011d8 tst r4, 2 |
| if ((r4 & 2) != 0) {
0x000011dc beq 0x11f4 |
0x000011e0 ldr r0, [pc, 0x6c] | r0 = *(0x1250);
0x000011e4 add r0, pc, r0 | r0 = pc + r0;
0x000011e8 bl 0xacc | printf (r0)
0x000011ec ldr r1, [pc, 0x64] | r1 = *(0x1254);
0x000011f0 add r1, pc, r1 | r1 = pc + r1;
| }
0x000011f4 tst r4, 4 |
| if ((r4 & 4) != 0) {
0x000011f8 beq 0x1210 |
0x000011fc ldr r0, [pc, 0x58] | r0 = *(0x1258);
0x00001200 add r0, pc, r0 | r0 = pc + r0;
0x00001204 bl 0xacc | printf (r0)
0x00001208 ldr r1, [pc, 0x50] | r1 = *(0x125c);
0x0000120c add r1, pc, r1 | r1 = pc + r1;
| }
0x00001210 tst r4, 8 |
| if ((r4 & 8) == 0) {
0x00001214 beq 0x1234 | goto label_2;
| }
0x00001218 ldr r0, [pc, 0x44] | r0 = *(0x1260);
0x0000121c add r0, pc, r0 | r0 = pc + r0;
| label_0:
0x00001220 pop {r4, lr} |
0x00001224 b 0xacc | void (*0xacc)() ();
| label_1:
0x00001228 ldr r1, [pc, 0x38] | r1 = *(0x1264);
0x0000122c add r1, pc, r1 | r1 = pc + r1;
0x00001230 b 0x11d8 |
| } while (1);
| label_2:
0x00001234 cmp r4, 0 |
0x00001238 popne {r4, pc} |
0x0000123c ldr r0, [pc, 0x28] | r0 = *(0x1268);
0x00001240 add r0, pc, r0 | r0 = pc + r0;
0x00001244 b 0x1220 | goto label_0;
| }
; 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/libxt_conntrack.so @ 0x24a8 */
| #include <stdint.h>
|
; (fcn) fcn.000024a8 () | void fcn_000024a8 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000024a8 cmp r2, 2 |
0x000024ac push {r4, r5, r6, lr} |
0x000024b0 mov ip, r0 |
0x000024b4 mov r4, r1 | r4 = r1;
| if (r2 != 2) {
0x000024b8 bne 0x252c | goto label_2;
| }
0x000024bc cmp r3, 0 |
| if (r3 == 0) {
0x000024c0 bne 0x24e0 |
0x000024c4 ldr r3, [r0] | r3 = *(r0);
0x000024c8 cmp r3, 0 |
| if (r3 != 0) {
0x000024cc bne 0x2508 | goto label_3;
| }
| label_0:
0x000024d0 ldr r0, [pc, 0xe0] | r0 = *(0x25b4);
0x000024d4 pop {r4, r5, r6, lr} |
0x000024d8 add r0, pc, r0 | r0 = pc + r0;
0x000024dc b 0xacc | void (*0xacc)() ();
| }
0x000024e0 bl 0xb08 | r0 = xtables_ipaddr_to_numeric ();
0x000024e4 mov r5, r0 | r5 = r0;
0x000024e8 mov r0, r4 | r0 = r4;
0x000024ec bl 0xb68 | xtables_ipmask_to_numeric ();
0x000024f0 mov r1, r5 | r1 = r5;
0x000024f4 mov r2, r0 | r2 = r0;
0x000024f8 ldr r0, [pc, 0xbc] | r0 = *(0x25b8);
0x000024fc add r0, pc, r0 | r0 = pc + r0;
| do {
| label_1:
0x00002500 pop {r4, r5, r6, lr} |
0x00002504 b 0xacc | void (*0xacc)() ();
| label_3:
0x00002508 bl 0xb74 | r0 = xtables_ipaddr_to_anyname ();
0x0000250c mov r5, r0 | r5 = r0;
0x00002510 mov r0, r4 | r0 = r4;
0x00002514 bl 0xb68 | xtables_ipmask_to_numeric ();
0x00002518 mov r1, r5 | r1 = r5;
0x0000251c mov r2, r0 | r2 = r0;
0x00002520 ldr r0, [pc, 0x98] | r0 = *(0x25bc);
0x00002524 add r0, pc, r0 | r0 = pc + r0;
0x00002528 b 0x2500 |
| } while (1);
| label_2:
0x0000252c cmp r2, 0xa |
0x00002530 popne {r4, r5, r6, pc} |
0x00002534 cmp r3, 0 |
| if (r3 != 0) {
0x00002538 bne 0x2594 | goto label_4;
| }
0x0000253c ldr r3, [r0] | r3 = *(r0);
0x00002540 cmp r3, 0 |
| if (r3 != 0) {
0x00002544 bne 0x256c | goto label_5;
| }
0x00002548 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0000254c cmp r3, 0 |
| if (r3 != 0) {
0x00002550 bne 0x256c | goto label_5;
| }
0x00002554 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00002558 cmp r3, 0 |
| if (r3 != 0) {
0x0000255c bne 0x256c | goto label_5;
| }
0x00002560 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00002564 cmp r3, 0 |
| if (r3 == 0) {
0x00002568 beq 0x24d0 | goto label_0;
| }
| label_5:
0x0000256c mov r0, ip | r0 = ip;
0x00002570 bl 0xb44 | r0 = xtables_ip6addr_to_anyname ();
0x00002574 mov r5, r0 | r5 = r0;
0x00002578 mov r0, r4 | r0 = r4;
0x0000257c bl 0xac0 | xtables_ip6mask_to_numeric ();
0x00002580 mov r1, r5 | r1 = r5;
0x00002584 mov r2, r0 | r2 = r0;
0x00002588 ldr r0, [pc, 0x34] | r0 = *(0x25c0);
0x0000258c add r0, pc, r0 | r0 = pc + r0;
0x00002590 b 0x2500 | goto label_1;
| label_4:
0x00002594 bl 0xafc | r0 = xtables_ip6addr_to_numeric ();
0x00002598 mov r5, r0 | r5 = r0;
0x0000259c mov r0, r4 | r0 = r4;
0x000025a0 bl 0xac0 | xtables_ip6mask_to_numeric ();
0x000025a4 mov r1, r5 | r1 = r5;
0x000025a8 mov r2, r0 | r2 = r0;
0x000025ac ldr r0, [pc, 0x14] | r0 = *(0x25c4);
0x000025b0 add r0, pc, r0 | r0 = pc + r0;
0x000025b4 b 0x2500 | goto label_1;
| }
; 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/libxt_conntrack.so @ 0x25cc */
| #include <stdint.h>
|
; (fcn) fcn.000025cc () | void fcn_000025cc (int32_t arg_18h, int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000025cc push {r4, r5, r6, r7, r8, lr} |
0x000025d0 ldrb r6, [sp, 0x18] | r6 = *(arg_18h);
0x000025d4 mov r8, r3 | r8 = r3;
0x000025d8 ldrh r3, [r0, 0x92] | r3 = *(arg_18hx92);
0x000025dc mov r4, r0 | r4 = r0;
0x000025e0 tst r3, 1 |
0x000025e4 mov r5, r1 | r5 = r1;
0x000025e8 mov r7, r2 | r7 = r2;
| if ((r3 & 1) == 0) {
0x000025ec beq 0x2634 | goto label_2;
| }
0x000025f0 ldrh r3, [r0, 0x94] | r3 = *((r0 + 0x94));
0x000025f4 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x000025f8 beq 0x2608 |
0x000025fc ldr r0, [pc, 0x3bc] | r0 = *(0x29bc);
0x00002600 add r0, pc, r0 | r0 = pc + r0;
0x00002604 bl 0xacc | printf (r0)
| }
0x00002608 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x0000260c tst r3, 0x2000 |
| if ((r3 & 0x2000) == 0) {
0x00002610 beq 0x2998 | goto label_3;
| }
0x00002614 ldr r2, [pc, 0x3a8] | r2 = *(0x29c0);
0x00002618 add r2, pc, r2 | r2 = pc + r2;
| do {
0x0000261c ldr r0, [pc, 0x3a4] | r0 = *(0x29c4);
0x00002620 mov r1, r5 | r1 = r5;
0x00002624 add r0, pc, r0 | r0 = pc + r0;
0x00002628 bl 0xacc | printf (r0, r1, r2)
0x0000262c ldrh r0, [r4, 0x96] | r0 = *((r4 + 0x96));
0x00002630 bl 0x1034 | fcn_00001034 (r0);
| label_2:
0x00002634 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x00002638 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x0000263c beq 0x266c |
0x00002640 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x00002644 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x00002648 beq 0x2658 |
0x0000264c ldr r0, [pc, 0x378] | r0 = *(0x29c8);
0x00002650 add r0, pc, r0 | r0 = pc + r0;
0x00002654 bl 0xacc | printf (r0)
| }
0x00002658 ldr r0, [pc, 0x370] | r0 = *(0x29cc);
0x0000265c ldrh r2, [r4, 0x88] | r2 = *((r4 + 0x88));
0x00002660 mov r1, r5 | r1 = r5;
0x00002664 add r0, pc, r0 | r0 = pc + r0;
0x00002668 bl 0xacc | printf (r0, r1, r2)
| }
0x0000266c ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x00002670 tst r3, 4 |
| if ((r3 & 4) != 0) {
0x00002674 beq 0x26b4 |
0x00002678 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x0000267c tst r3, 4 |
| if ((r3 & 4) != 0) {
0x00002680 beq 0x2690 |
0x00002684 ldr r0, [pc, 0x348] | r0 = *(0x29d0);
0x00002688 add r0, pc, r0 | r0 = pc + r0;
0x0000268c bl 0xacc | printf (r0)
| }
0x00002690 ldr r0, [pc, 0x340] | r0 = *(0x29d4);
0x00002694 mov r1, r5 | r1 = r5;
0x00002698 add r0, pc, r0 | r0 = pc + r0;
0x0000269c bl 0xacc | printf (r0, r1)
0x000026a0 mov r3, r8 | r3 = r8;
0x000026a4 mov r2, r7 | r2 = r7;
0x000026a8 add r1, r4, 0x10 | r1 = r4 + 0x10;
0x000026ac mov r0, r4 | r0 = r4;
0x000026b0 bl 0x24a8 | fcn_000024a8 (r0, r1);
| }
0x000026b4 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x000026b8 tst r3, 8 |
| if ((r3 & 8) != 0) {
0x000026bc beq 0x26fc |
0x000026c0 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x000026c4 tst r3, 8 |
| if ((r3 & 8) != 0) {
0x000026c8 beq 0x26d8 |
0x000026cc ldr r0, [pc, 0x308] | r0 = *(0x29d8);
0x000026d0 add r0, pc, r0 | r0 = pc + r0;
0x000026d4 bl 0xacc | printf (r0)
| }
0x000026d8 ldr r0, [pc, 0x300] | r0 = *(0x29dc);
0x000026dc mov r1, r5 | r1 = r5;
0x000026e0 add r0, pc, r0 | r0 = pc + r0;
0x000026e4 bl 0xacc | printf (r0, r1)
0x000026e8 mov r3, r8 | r3 = r8;
0x000026ec mov r2, r7 | r2 = r7;
0x000026f0 add r1, r4, 0x30 | r1 = r4 + 0x30;
0x000026f4 add r0, r4, 0x20 | r0 = r4 + 0x20;
0x000026f8 bl 0x24a8 | fcn_000024a8 (r0, r1);
| }
0x000026fc ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x00002700 tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x00002704 beq 0x2744 |
0x00002708 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x0000270c tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x00002710 beq 0x2720 |
0x00002714 ldr r0, [pc, 0x2c8] | r0 = *(0x29e0);
0x00002718 add r0, pc, r0 | r0 = pc + r0;
0x0000271c bl 0xacc | printf (r0)
| }
0x00002720 ldr r0, [pc, 0x2c0] | r0 = *(0x29e4);
0x00002724 mov r1, r5 | r1 = r5;
0x00002728 add r0, pc, r0 | r0 = pc + r0;
0x0000272c bl 0xacc | printf (r0, r1)
0x00002730 mov r3, r8 | r3 = r8;
0x00002734 mov r2, r7 | r2 = r7;
0x00002738 add r1, r4, 0x50 | r1 = r4 + 0x50;
0x0000273c add r0, r4, 0x40 | r0 = r4 + 0x40;
0x00002740 bl 0x24a8 | fcn_000024a8 (r0, r1);
| }
0x00002744 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x00002748 tst r3, 0x20 |
| if ((r3 & 0x20) != 0) {
0x0000274c beq 0x278c |
0x00002750 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x00002754 tst r3, 0x20 |
| if ((r3 & 0x20) != 0) {
0x00002758 beq 0x2768 |
0x0000275c ldr r0, [pc, 0x288] | r0 = *(0x29e8);
0x00002760 add r0, pc, r0 | r0 = pc + r0;
0x00002764 bl 0xacc | printf (r0)
| }
0x00002768 ldr r0, [pc, 0x280] | r0 = *(0x29ec);
0x0000276c mov r1, r5 | r1 = r5;
0x00002770 add r0, pc, r0 | r0 = pc + r0;
0x00002774 bl 0xacc | printf (r0, r1)
0x00002778 mov r3, r8 | r3 = r8;
0x0000277c mov r2, r7 | r2 = r7;
0x00002780 add r1, r4, 0x70 | r1 = r4 + 0x70;
0x00002784 add r0, r4, 0x60 | r0 = r4 + 0x60;
0x00002788 bl 0x24a8 | fcn_000024a8 (r0, r1);
| }
0x0000278c ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x00002790 tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x00002794 beq 0x27e0 |
0x00002798 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x0000279c tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x000027a0 beq 0x27b0 |
0x000027a4 ldr r0, [pc, 0x248] | r0 = *(0x29f0);
0x000027a8 add r0, pc, r0 | r0 = pc + r0;
0x000027ac bl 0xacc | printf (r0)
| }
0x000027b0 ldrh r2, [r4, 0x8a] | r2 = *((r4 + 0x8a));
0x000027b4 cmp r6, 0 |
| if (r6 != 0) {
0x000027b8 lsreq r3, r2, 8 | r3 = r2 >> 8;
| }
0x000027bc ldr r1, [pc, 0x234] | r1 = *(0x29f4);
| if (r6 != 0) {
0x000027c0 orreq r2, r3, r2, lsl 8 | r2 = r3 | (r2 << 8);
| }
| if (r6 != 0) {
0x000027c4 lsleq r2, r2, 0x10 | r2 <<= 0x10;
| }
0x000027c8 ldrhne r3, [r4, 0x9a] | __asm ("ldrhne r3, [r4, 0x9a]");
| if (r6 != 0) {
0x000027cc lsreq r2, r2, 0x10 | r2 >>= 0x10;
| }
| if (r6 != 0) {
0x000027d0 moveq r3, r6 | r3 = r6;
| }
0x000027d4 add r1, pc, r1 | r1 = pc + r1;
0x000027d8 mov r0, r5 | r0 = r5;
0x000027dc bl 0x114c | fcn_0000114c (r0, r1);
| }
0x000027e0 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x000027e4 tst r3, 0x200 |
| if ((r3 & 0x200) != 0) {
0x000027e8 beq 0x2834 |
0x000027ec ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x000027f0 tst r3, 0x200 |
| if ((r3 & 0x200) != 0) {
0x000027f4 beq 0x2804 |
0x000027f8 ldr r0, [pc, 0x1fc] | r0 = *(0x29f8);
0x000027fc add r0, pc, r0 | r0 = pc + r0;
0x00002800 bl 0xacc | printf (r0)
| }
0x00002804 ldrh r2, [r4, 0x8c] | r2 = *((r4 + 0x8c));
0x00002808 cmp r6, 0 |
| if (r6 != 0) {
0x0000280c lsreq r3, r2, 8 | r3 = r2 >> 8;
| }
0x00002810 ldr r1, [pc, 0x1e8] | r1 = *(0x29fc);
| if (r6 != 0) {
0x00002814 orreq r2, r3, r2, lsl 8 | r2 = r3 | (r2 << 8);
| }
| if (r6 != 0) {
0x00002818 lsleq r2, r2, 0x10 | r2 <<= 0x10;
| }
0x0000281c ldrhne r3, [r4, 0x9c] | __asm ("ldrhne r3, [r4, 0x9c]");
| if (r6 != 0) {
0x00002820 lsreq r2, r2, 0x10 | r2 >>= 0x10;
| }
| if (r6 != 0) {
0x00002824 moveq r3, r6 | r3 = r6;
| }
0x00002828 add r1, pc, r1 | r1 = pc + r1;
0x0000282c mov r0, r5 | r0 = r5;
0x00002830 bl 0x114c | fcn_0000114c (r0, r1);
| }
0x00002834 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x00002838 tst r3, 0x400 |
| if ((r3 & 0x400) != 0) {
0x0000283c beq 0x2888 |
0x00002840 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x00002844 tst r3, 0x400 |
| if ((r3 & 0x400) != 0) {
0x00002848 beq 0x2858 |
0x0000284c ldr r0, [pc, 0x1b0] | r0 = *(0x2a00);
0x00002850 add r0, pc, r0 | r0 = pc + r0;
0x00002854 bl 0xacc | printf (r0)
| }
0x00002858 ldrh r2, [r4, 0x8e] | r2 = *((r4 + 0x8e));
0x0000285c cmp r6, 0 |
| if (r6 != 0) {
0x00002860 lsreq r3, r2, 8 | r3 = r2 >> 8;
| }
0x00002864 ldr r1, [pc, 0x19c] | r1 = *(0x2a04);
| if (r6 != 0) {
0x00002868 orreq r2, r3, r2, lsl 8 | r2 = r3 | (r2 << 8);
| }
| if (r6 != 0) {
0x0000286c lsleq r2, r2, 0x10 | r2 <<= 0x10;
| }
0x00002870 ldrhne r3, [r4, 0x9e] | __asm ("ldrhne r3, [r4, 0x9e]");
| if (r6 != 0) {
0x00002874 lsreq r2, r2, 0x10 | r2 >>= 0x10;
| }
| if (r6 != 0) {
0x00002878 moveq r3, r6 | r3 = r6;
| }
0x0000287c add r1, pc, r1 | r1 = pc + r1;
0x00002880 mov r0, r5 | r0 = r5;
0x00002884 bl 0x114c | fcn_0000114c (r0, r1);
| }
0x00002888 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x0000288c tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x00002890 beq 0x28dc |
0x00002894 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x00002898 tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x0000289c beq 0x28ac |
0x000028a0 ldr r0, [pc, 0x164] | r0 = *(0x2a08);
0x000028a4 add r0, pc, r0 | r0 = pc + r0;
0x000028a8 bl 0xacc | printf (r0)
| }
0x000028ac ldrh r2, [r4, 0x90] | r2 = *((r4 + 0x90));
0x000028b0 cmp r6, 0 |
| if (r6 != 0) {
0x000028b4 lsreq r3, r2, 8 | r3 = r2 >> 8;
| }
0x000028b8 ldr r1, [pc, 0x150] | r1 = *(0x2a0c);
| if (r6 != 0) {
0x000028bc orreq r2, r3, r2, lsl 8 | r2 = r3 | (r2 << 8);
| }
| if (r6 != 0) {
0x000028c0 lsleq r2, r2, 0x10 | r2 <<= 0x10;
| }
0x000028c4 ldrhne r3, [r4, 0xa0] | __asm ("ldrhne r3, [r4, 0xa0]");
| if (r6 != 0) {
0x000028c8 lsreq r2, r2, 0x10 | r2 >>= 0x10;
| }
| if (r6 != 0) {
0x000028cc moveq r3, r6 | r3 = r6;
| }
0x000028d0 add r1, pc, r1 | r1 = pc + r1;
0x000028d4 mov r0, r5 | r0 = r5;
0x000028d8 bl 0x114c | fcn_0000114c (r0, r1);
| }
0x000028dc ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x000028e0 tst r3, 0x40 |
| if ((r3 & 0x40) != 0) {
0x000028e4 beq 0x2918 |
0x000028e8 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x000028ec tst r3, 0x40 |
| if ((r3 & 0x40) != 0) {
0x000028f0 beq 0x2900 |
0x000028f4 ldr r0, [pc, 0x118] | r0 = *(0x2a10);
0x000028f8 add r0, pc, r0 | r0 = pc + r0;
0x000028fc bl 0xacc | printf (r0)
| }
0x00002900 ldr r0, [pc, 0x110] | r0 = *(0x2a14);
0x00002904 mov r1, r5 | r1 = r5;
0x00002908 add r0, pc, r0 | r0 = pc + r0;
0x0000290c bl 0xacc | printf (r0, r1)
0x00002910 ldrh r0, [r4, 0x98] | r0 = *((r4 + 0x98));
0x00002914 bl 0x11ac | fcn_000011ac (r0);
| }
0x00002918 ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x0000291c tst r3, 0x80 |
| if ((r3 & 0x80) != 0) {
0x00002920 beq 0x296c |
0x00002924 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x00002928 tst r3, 0x80 |
| if ((r3 & 0x80) != 0) {
0x0000292c beq 0x293c |
0x00002930 ldr r0, [pc, 0xe4] | r0 = *(0x2a18);
0x00002934 add r0, pc, r0 | r0 = pc + r0;
0x00002938 bl 0xacc | printf (r0)
| }
0x0000293c ldr r0, [pc, 0xdc] | r0 = *(0x2a1c);
0x00002940 mov r1, r5 | r1 = r5;
0x00002944 add r0, pc, r0 | r0 = pc + r0;
0x00002948 bl 0xacc | printf (r0, r1)
0x0000294c ldr r2, [r4, 0x84] | r2 = *((r4 + 0x84));
0x00002950 ldr r1, [r4, 0x80] | r1 = *((r4 + 0x80));
0x00002954 cmp r2, r1 |
| if (r2 != r1) {
0x00002958 bne 0x29a4 | goto label_4;
| }
0x0000295c ldr r0, [pc, 0xc0] | r0 = *(0x2a20);
0x00002960 mov r1, r2 | r1 = r2;
0x00002964 add r0, pc, r0 | r0 = pc + r0;
0x00002968 bl 0xacc | printf (r0, r1)
| }
| label_0:
0x0000296c ldrh r3, [r4, 0x92] | r3 = *((r4 + 0x92));
0x00002970 tst r3, 0x1000 |
0x00002974 popeq {r4, r5, r6, r7, r8, pc} |
0x00002978 ldrh r3, [r4, 0x94] | r3 = *((r4 + 0x94));
0x0000297c mov r1, r5 | r1 = r5;
0x00002980 tst r3, 0x1000 |
| if ((r3 & 0x1000) == 0) {
0x00002984 beq 0x29b4 | goto label_5;
| }
0x00002988 ldr r0, [pc, 0x98] | r0 = *(0x2a24);
0x0000298c add r0, pc, r0 | r0 = pc + r0;
| label_1:
0x00002990 pop {r4, r5, r6, r7, r8, lr} |
0x00002994 b 0xacc | void (*0xacc)() ();
| label_3:
0x00002998 ldr r2, [pc, 0x8c] | r2 = *(0x2a28);
0x0000299c add r2, pc, r2 | r2 = pc + r2;
0x000029a0 b 0x261c |
| } while (1);
| label_4:
0x000029a4 ldr r0, [pc, 0x84] | r0 = *(0x2a2c);
0x000029a8 add r0, pc, r0 | r0 = pc + r0;
0x000029ac bl 0xacc | printf (r0)
0x000029b0 b 0x296c | goto label_0;
| label_5:
0x000029b4 ldr r0, [pc, 0x78] | r0 = *(0x2a30);
0x000029b8 add r0, pc, r0 | r0 = pc + r0;
0x000029bc b 0x2990 | goto label_1;
| }
; 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/libxt_conntrack.so @ 0x34b4 */
| #include <stdint.h>
|
; (fcn) fcn.000034b4 () | void fcn_000034b4 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000034b4 push {r4, r5, r6, lr} |
0x000034b8 mov r4, r1 | r4 = r1;
0x000034bc ldr r1, [r1] | r1 = *(r1);
0x000034c0 mov r3, r0 | r3 = r0;
0x000034c4 cmp r1, 0 |
| if (r1 == 0) {
0x000034c8 bne 0x34e4 |
0x000034cc cmp r2, 0 |
| if (r2 != 0) {
0x000034d0 bne 0x34ec | goto label_0;
| }
0x000034d4 ldr r0, [pc, 0x60] | r0 = *(0x3538);
0x000034d8 pop {r4, r5, r6, lr} |
0x000034dc add r0, pc, r0 | r0 = pc + r0;
0x000034e0 b 0xacc | void (*0xacc)() ();
| }
0x000034e4 cmp r2, 0 |
| if (r2 == 0) {
0x000034e8 beq 0x3518 | goto label_1;
| }
| label_0:
0x000034ec mov r0, r3 | r0 = r3;
0x000034f0 bl 0xb08 | r0 = xtables_ipaddr_to_numeric ();
0x000034f4 mov r5, r0 | r5 = r0;
0x000034f8 mov r0, r4 | r0 = r4;
0x000034fc bl 0xb68 | xtables_ipmask_to_numeric ();
0x00003500 mov r1, r5 | r1 = r5;
0x00003504 mov r2, r0 | r2 = r0;
0x00003508 ldr r0, [pc, 0x30] | r0 = *(0x353c);
0x0000350c add r0, pc, r0 | r0 = pc + r0;
| do {
0x00003510 pop {r4, r5, r6, lr} |
0x00003514 b 0xacc | void (*0xacc)() ();
| label_1:
0x00003518 bl 0xb74 | r0 = xtables_ipaddr_to_anyname ();
0x0000351c mov r5, r0 | r5 = r0;
0x00003520 mov r0, r4 | r0 = r4;
0x00003524 bl 0xb68 | xtables_ipmask_to_numeric ();
0x00003528 mov r1, r5 | r1 = r5;
0x0000352c mov r2, r0 | r2 = r0;
0x00003530 ldr r0, [pc, 0xc] | r0 = *(0x3540);
0x00003534 add r0, pc, r0 | r0 = pc + r0;
0x00003538 b 0x3510 |
| } while (1);
| }
[*] Function printf used 33 times libxt_conntrack.so