Título: Ofuscación Publicado por: Caster en 9 Noviembre 2013, 22:22 pm Buenas, he estado leyendo sobre ofuscación del código y lo único que he leído es lo que viene en la wikipedia, que supongo que será lo más básico sobre esto, según la wikipedia:
Código
Estaríamos definiendo una variable entera, hasta ahí bien. Código
Esto sería = 0 Código Y esto sería = 1, y aqui llega lo que no entiendo, por qué el resultado de la siguiente línea es 10: Código
Saludos. Título: Re: Ofuscación Publicado por: $trunk en 9 Noviembre 2013, 22:31 pm Porque el operador << lo que hace es desplazar bits a la izquierda. Tiene la siguiente sintaxis:
Código: variable << num_bits_a_desplazar Esa sentencia en primer lugar lo que hace es desplazar 4 bits a la izquierda: 1 << 1 << 1 << 1. O sea que lo que está haciendo es: 0001 -> 0010 -> 0100 -> 1000. El resultado es 8 (1000). Luego, a ese resultado le aplica un OR (|). 1000 | 0010 sería 1010. En resumen, hace lo siguiente: (1 << 1 << 1 << 1) | (1 << 1) (1000) | (0010) = 8 | 2 1010 = 10 Título: Re: Ofuscación Publicado por: Caster en 9 Noviembre 2013, 22:41 pm Vale, el desplazamiento de bits lo entiendo, y por lógica supongo que el operador que utiliza OR (|) no tendrá nada que ver con el operador de comparación sino que este será a nivel de bits, ¿qué función tiene?
Saludos y gracias. Título: Re: Ofuscación Publicado por: rir3760 en 10 Noviembre 2013, 02:44 am Es un operador de bits donde el bit resultante es 1 si los bits son distintos y 0 si son iguales. Una pagina con una explicación a detalle de esos operadores (en general, no especifico de C) es Wikipedia: Bitwise operation (http://en.wikipedia.org/wiki/Bitwise_operation).
Un saludo Título: Re: Ofuscación Publicado por: csp en 10 Noviembre 2013, 08:57 am Buenas,
Te explico según lo entiendo. La primera parte del código (antes del OR), lo que hace es desplazar 3 bits a la derecha. Entonces, la parte de la línea (Puede que esté mal la cantidad de paréntesis): Código
Sería lo mismo que poner: Código
Código: 1 Código Sería: Código
Código: 1 Y ahora realiza la operación OR. Está es una operación lógica que devuelve verdadero (en este caso 1) cuando uno de los operandos o ambos, sean verdaderos (o 1). Entonces: Código
Hace la siguiente comparación (bit a bit): 1 OR 1 = 1 0 OR 0 = 0 0 OR 1 = 1 0 OR 0 = 0 Dando como resultado 1010. 10 en decimal. Un saludo. Título: Re: Ofuscación Publicado por: Caster en 10 Noviembre 2013, 11:22 am Es un operador de bits donde el bit resultante es 1 si los bits son distintos y 0 si son iguales. Una pagina con una explicación a detalle de esos operadores (en general, no especifico de C) es Wikipedia: Bitwise operation (http://en.wikipedia.org/wiki/Bitwise_operation). Un saludo Según la explicación que ha dado csp el resultado es 1 si alguno de los dos bits es 1, no tienen porque ser los dos, y asi si que ya tiene sentido la operación, ya lo he entendido todo. Gracias. Título: Re: Ofuscación Publicado por: rir3760 en 10 Noviembre 2013, 15:16 pm Cierto, la definición que di fue la del operador XOR '^'. Mea culpa.
Un saludo |