Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php class ArrayIntersectCount extends Handler { use ScalarAddressMode, TernaryOperato..

Decoded Output download

<?php

class ArrayIntersectCount extends Handler {

	use ScalarAddressMode, TernaryOperator, ArrayComparison;
	
	public function getOperandType($i) {
		switch($i) {
			case 1: return $this->operandType;
			case 2: return $this->operandType;
			case 3: return "U32";
			case 4: return "U32";
		}
	}
	
	public function getOperandAddressMode($i) {
		switch($i) {
			case 1: return "ARR";
			case 2: return "ARR";
			case 3: return "SCA";
			case 4: return "SCA";
		}
	}
		
	public function getOperandSize($i) {
		switch($i) {
			case 1: return "op1_count";
			case 2: return "op2_count";
			case 3: return 1;
			case 4: return 1;
		}
	}
	
	public function getActionOnUnitData() {
		$type = $this->getOperandType(1);
		$cType = $this->getOperandCType(1);
		if($type[0] == 'I') {
			$signedType = 'S' . substr($type, 1);
		} else {
			$signedType = $type;
		}
		$lines = array();
		$lines[] = "$cType *op1_end = op1_ptr + op1_count;";
		$lines[] = "$cType *op2_end = op2_ptr + op2_count, *op2_start = op2_ptr;";
		$lines[] = "uint32_t count = 0;";
		$lines[] = "if(op3 == 1) {";
		$lines[] = 		"while(op1_ptr < op1_end) {";
		$lines[] = 			"int32_t found = FALSE;";
		$lines[] = 			"for(op2_ptr = op2_start; op2_ptr < op2_end; op2_ptr++) {";							
		$lines[] = 				"if(*op2_ptr == *op1_ptr) {";
		$lines[] = 					"found = TRUE;";
		$lines[] = 						"break;";
		$lines[] = 				"}";
		$lines[] = 			"}";
		$lines[] = 			"if(found) {";
		$lines[] = 				"count++;";
		$lines[] = 			"}";
		$lines[] = 			"op1_ptr++;";
		$lines[] = 		"}";
		$lines[] = "} else {";
		$lines[] = 		"while(op1_ptr < op1_end) {";
		$lines[] = 			"int32_t found = FALSE;";
		$lines[] = 			"for(op2_ptr = op2_start; op2_ptr < op2_end; op2_ptr += op3) {";
		$lines[] = 				"if(qb_compare_array_$signedType(op1_ptr, op3, op2_ptr, op3) == 0) {";
		$lines[] = 					"found = TRUE;";
		$lines[] = 					"break;";
		$lines[] = 				"}";
		$lines[] = 			"}";
		$lines[] = 			"if(found) {";
		$lines[] = 				"count++;";
		$lines[] = 			"}";
		$lines[] = 			"op1_ptr += op3;";
		$lines[] = 		"}";
		$lines[] = "}";
		$lines[] = "res = count;";
		return $lines;
	}
}

?>

Did this file decode correctly?

Original Code

<?php

class ArrayIntersectCount extends Handler {

	use ScalarAddressMode, TernaryOperator, ArrayComparison;
	
	public function getOperandType($i) {
		switch($i) {
			case 1: return $this->operandType;
			case 2: return $this->operandType;
			case 3: return "U32";
			case 4: return "U32";
		}
	}
	
	public function getOperandAddressMode($i) {
		switch($i) {
			case 1: return "ARR";
			case 2: return "ARR";
			case 3: return "SCA";
			case 4: return "SCA";
		}
	}
		
	public function getOperandSize($i) {
		switch($i) {
			case 1: return "op1_count";
			case 2: return "op2_count";
			case 3: return 1;
			case 4: return 1;
		}
	}
	
	public function getActionOnUnitData() {
		$type = $this->getOperandType(1);
		$cType = $this->getOperandCType(1);
		if($type[0] == 'I') {
			$signedType = 'S' . substr($type, 1);
		} else {
			$signedType = $type;
		}
		$lines = array();
		$lines[] = "$cType *op1_end = op1_ptr + op1_count;";
		$lines[] = "$cType *op2_end = op2_ptr + op2_count, *op2_start = op2_ptr;";
		$lines[] = "uint32_t count = 0;";
		$lines[] = "if(op3 == 1) {";
		$lines[] = 		"while(op1_ptr < op1_end) {";
		$lines[] = 			"int32_t found = FALSE;";
		$lines[] = 			"for(op2_ptr = op2_start; op2_ptr < op2_end; op2_ptr++) {";							
		$lines[] = 				"if(*op2_ptr == *op1_ptr) {";
		$lines[] = 					"found = TRUE;";
		$lines[] = 						"break;";
		$lines[] = 				"}";
		$lines[] = 			"}";
		$lines[] = 			"if(found) {";
		$lines[] = 				"count++;";
		$lines[] = 			"}";
		$lines[] = 			"op1_ptr++;";
		$lines[] = 		"}";
		$lines[] = "} else {";
		$lines[] = 		"while(op1_ptr < op1_end) {";
		$lines[] = 			"int32_t found = FALSE;";
		$lines[] = 			"for(op2_ptr = op2_start; op2_ptr < op2_end; op2_ptr += op3) {";
		$lines[] = 				"if(qb_compare_array_$signedType(op1_ptr, op3, op2_ptr, op3) == 0) {";
		$lines[] = 					"found = TRUE;";
		$lines[] = 					"break;";
		$lines[] = 				"}";
		$lines[] = 			"}";
		$lines[] = 			"if(found) {";
		$lines[] = 				"count++;";
		$lines[] = 			"}";
		$lines[] = 			"op1_ptr += op3;";
		$lines[] = 		"}";
		$lines[] = "}";
		$lines[] = "res = count;";
		return $lines;
	}
}

?>

Function Calls

None

Variables

None

Stats

MD5 a6f055215c525b8a93fa410fe620edc3
Eval Count 0
Decode Time 100 ms