Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: xv0 en 19 Marzo 2014, 19:02 pm



Título: Movimiento de mascara
Publicado por: xv0 en 19 Marzo 2014, 19:02 pm
Hola

Tengo que mover los byte que tengan el bit 7 en 1, ya tengo una funcion aplicada con maskmovq que hace precisamente lo que quiero, pero lo malo de esa instruccion es que a la CPU le cuesta 32 OPS.

Código
  1. ; %mm0 = 0x8001018080010180
  2.  
  3. maskmovq %mm0, %mm0  ; (%rdi) = 0x8000008080000080

Hay otra instruccion llamada pmovmskb es 1 OPS, que copia el bit 7 en un registro de 32 bits haciendo un octeo con los registros que tienen ese bit en 1.

Código
  1. ; %mm0 = 0x8001018080010180
  2.  
  3. pmovmskb %mm0, %esi  ; %esi = 0x99

Bien alguien me da alguna idea de como construir una mascara, a partir de ese octeo para copiar los byte tal y como lo hace maskmovq?

Un saludo.


Título: Re: Movimiento de mascara
Publicado por: x64core en 22 Marzo 2014, 16:29 pm
He visto varios temas tuyos acerca de cómo optimizar con extensiones asi que te recomiendo este foro:
http://www.masm32.com/board/index.php
Usuarios con bastante conocimiento en ensamblador en general.


Título: Re: Movimiento de mascara
Publicado por: xv0 en 22 Marzo 2014, 18:37 pm
Si por lo que he visto hay buenas preguntas, aun estoy con AES tengo todas las funciones menos la mixcolumns, multiplico el registro xmm por 2 y 3, ahora solo me queda ordenarlo corriendo los bits.

Código:
https://www.ecs.csus.edu/csc/iac/docs/students/Vinit_Azad_MS_Report.pdf

Si miran ese pdf en la pagina 29 veran una tabla con los ciclos de cada funcion, no se de donde sera esa tabla pero la he visto por muchos lados, sumando todas las funciones 1 ronda cuesta unos 222, yo calculo que mi ronda estara en unos 170 - 180.

Tambien cree una funcion strlen con los xmm para el mismo AES, no he calculado la potencia porque no se hacerlo, pero segurisimo que peta mil veces a la de C/C++.

Pero todo esto son para mis proyectos, me gustaria compartirlos, pero no, a no ser que se conbinen con algun code como puede ser un malware.

Un saludo.


Título: Re: Movimiento de mascara
Publicado por: x64core en 22 Marzo 2014, 19:53 pm
Si por lo que he visto hay buenas preguntas, aun estoy con AES tengo todas las funciones menos la mixcolumns, multiplico el registro xmm por 2 y 3, ahora solo me queda ordenarlo corriendo los bits.

Código:
https://www.ecs.csus.edu/csc/iac/docs/students/Vinit_Azad_MS_Report.pdf

Si miran ese pdf en la pagina 29 veran una tabla con los ciclos de cada funcion, no se de donde sera esa tabla pero la he visto por muchos lados, sumando todas las funciones 1 ronda cuesta unos 222, yo calculo que mi ronda estara en unos 170 - 180.
Mira esta clase hecha por MichaelW:
http://masm32.com/board/index.php?topic=49.msg10832;topicseen#msg10832
Sirve para calcular los ciclos que require el procesador para ejecutar un bloque de código.

Tambien cree una funcion strlen con los xmm para el mismo AES, no he calculado la potencia porque no se hacerlo, pero segurisimo que peta mil veces a la de C/C++.
Pues habria de ver si activamos las extensiones en el compilador y a comparar.

Pero todo esto son para mis proyectos, me gustaria compartirlos, pero no, a no ser que se conbinen con algun code como puede ser un malware.

Un saludo.
Pues si lo vas a compartir, compartelo, de ninguna manera podes controlar que tu código sea sólo usado para aplicaciónes legitimas y no para
malware, es como decir que los creadores que compiladores, ensambladores sólo los programaron para crear aplicaciónes legitimas y no para malware.
Pero para que despreocuparte te doy mi punto de vista, nunca usaria un código que utilizaria extensiones tan recientes para malware ya que
estaria sujeto a funcionar sólo en cierto tipo de procesadores, además de dejarle bastante facil el trabajo a las compañias de AV de agregar
sus firmas en mi ejecutable, etc. ellos no van de la mano



Título: Re: Movimiento de mascara
Publicado por: xv0 en 22 Marzo 2014, 21:28 pm
No, me referia en compartir el codigo para algun proyecto como puede ser en malware, o en otro y sacar algo de dinero.

Las extensiones son de la SSE a la SSE2, son compatibles, no estoy usando las AVX.

Por lo que veo aqui hay muchos desarrolladores, pero por lo que veo a nadie le interesa las implementaciones que creo, bueno como hay muchas strlen por hay comparto la mia, si alguien quiere hacer algo pues que me comente.

Código:
http://foro.elhacker.net/asm/aporte_strlen_xmm-t411158.0.html

Ya puedes analizarla si quieres x64Core, pero las funciones AES no digo nada.

Un saludo.


Título: Re: Movimiento de mascara
Publicado por: x64core en 22 Marzo 2014, 23:46 pm
No, me referia en compartir el codigo para algun proyecto como puede ser en malware, o en otro y sacar algo de dinero.

Las extensiones son de la SSE a la SSE2, son compatibles, no estoy usando las AVX.

Por lo que veo aqui hay muchos desarrolladores, pero por lo que veo a nadie le interesa las implementaciones que creo, bueno como hay muchas strlen por hay comparto la mia, si alguien quiere hacer algo pues que me comente.

Código:
http://foro.elhacker.net/asm/aporte_strlen_xmm-t411158.0.html

Ya puedes analizarla si quieres x64Core, pero las funciones AES no digo nada.

Un saludo.
No es que a nadie le interese, sino que estas en el foro incorrecto, conozco a muchos programadores amantes del
lenguaje ensamblador como tú, ellos que se toman un tiempo para optimizar un bloque de código, que toman el lenguaje
ensamblador como un 'arte' y aquí hay muy pocas personas o ninguna. Ve al foro que te mencione ellos tomaran más
interes y aprenderas mucho más cosas con ellos ^^. no digo que un foro es mejor que otro, simplemente son diferentes.


Título: Re: Movimiento de mascara
Publicado por: xv0 en 23 Marzo 2014, 23:16 pm
Bueno ya la optimize, de 64 OPS que consume maskmovdqu yo lo hice en 4 OPS jeje.

Código
  1. .section .data
  2.  
  3. bts0_: .quad 0x8080808080808080,0x8080808080808080
  4.  
  5. .section .text
  6. .globl _start
  7.  
  8. _start:
  9.  
  10. movdqa %xmm0, %xmm1
  11.  
  12. pand bts0_, %xmm0
  13. pcmpeqb bts0_, %xmm0
  14. pand %xmm0, %xmm1

Por cierto, deje la respuesta en este foro y en el otro, buen foro tienes razon, pero lo saque todo yo jeje.

Un saludo.