Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - cpu2

#561
ASM / Re: Comandos puertos I/O
22 Julio 2013, 21:16 PM
Ya e leido el datasheet de mi tarjeta, una imagen del chip con los pins enumerados, y al lado su simbolo, despues hay tablas con los pins su simbolo y la descripcion.

Cita de: eferion en 21 Julio 2013, 00:29 AMLo que está claro que a no ser que el fabricante te proporcione el datasheet de la tarjeta, donde se detallará toda la información que necesitas, te toca patearte foros en inglés para ir recabando información.

Aunque no te dediques a esta programacion, sabes de algun buen foro especializado en estos temas?

Un saludo.
#562
ASM / Re: logre un socket en nasm jeje
21 Julio 2013, 00:25 AM
Cita de: Belial & Grimoire en 20 Julio 2013, 23:46 PMpor eso me confundo, porque ya no seria concatenar, seria copiar y veo que muchos usan

push esi
push edi

e incluso veo que lo usan mucho con ecx

push esi
push edi
push ecx

por eso quisiera saber cual es el proposito, de esi y edi

Estas cargando los valores de dichos registros al stack, eso se acerca mas a concatenar.

Ejemplo, si esi vale 0x02 y edi 0x03.

Código (asm) [Seleccionar]
push esi
push edi


Concatenas esto 0x0000000200000003, espero que lo entiendas.

Cita de: Belial & Grimoire en 20 Julio 2013, 23:46 PMpor eso quisiera saber cual es el proposito, de esi y edi

Te invito a la chincheta de documentacion, y que te mires el manual de AMD o Intel, yo tengo a mano el de AMD, en la pagina 31 y 32 del tomo numero 1, estan escritos los usos que tiene cada registro, esi y edi tienen el mismo proposito solo que tienen una diferencia.



Un saludo.

#563
ASM / Re: logre un socket en nasm jeje
20 Julio 2013, 23:11 PM
Pues nada, me alegro de que lo hayas conseguido.

Cita de: Belial & Grimoire en 20 Julio 2013, 22:05 PMy gracias al consejo de cpu2 de usar direcciones en vez de usar estructuras logre hacerlo

Me parece que no entiendes muy bien lo que te explique, se nota que vienes de un lenguaje de alto nivel. Bueno ya lo entenderas.

Sobre esi y edi no se concatenan de esa forma de donde sacaste eso? simplemente copiaria 0x00000002 a eax.
Donde si tabrajan juntas esi y edi son con instrucciones especiales de manejo de cadenas.

Y sobre source index y destination index no te entendi muy bien, te refieres al stack?

Un saludo
#564
No se si lo conoceran, un documento sobre las latencias de la instrucciones sobre distintos procesadores, si quieres mejorar el rendimiento de tus codigos esto sera muy util, lo fue para mi.

http://www.agner.org/optimize/instruction_tables.pdf

Código (asm) [Seleccionar]
movl %eax, 0x6001c8 ; mucha gente hace esto.
movnti %eax, 0x6001c8  ; pero es muchisimo mejor este, miren la tabla.


Un saludo.
#565
ASM / Re: Comandos puertos I/O
18 Julio 2013, 20:16 PM
Cita de: eferion en 18 Julio 2013, 13:34 PM
Eso es algo que te tiene que proporcionar el fabricante... el que fabrica la tarjeta es el que conoce todos los entresijos de dicha tarjeta.

Buscare en la web del fabricante, en algunos codigos se hace referencia de algunos documentos sobre eso mismo.

Cita de: eferion en 18 Julio 2013, 13:34 PMOtra opción es usar ( si la tarjeta dispone de esta posibilidad ) del protocolo estándar para el caso, por ejemplo el de comunicación por usb o el de las tarjetas gráficas... no podrás obtener toda la potencia del hardware usando este mecanismo pero desde luego la programación será más sencilla y estará mejor documentada.

Pues no lose, si con estandar te refieras a dispositivos como el teclado que todos se controlan a traves de los puertos 0x60 y 0x64, buscare documentacion sobre la tarjeta grafica y el usb, si tienes algo pasalo pero que no sea un link de la primera pagina de google. Pero esta claro de que esa funcion no esta hecha con ese estandar que comentas.

Como dije anteriormente el codigo lo entiendo bastante, ya que es un C muy puro, lo que no entiendo son los puertos y los valores que usa, para comunicarse, es esa la informacion que busco.

Un saludo.
#566
ASM / Re: como usar estructuras en nasm?
18 Julio 2013, 05:54 AM
Si quieres un ejemplo en linux dimelo, no me cuesta nada, la maquina de linux y el sistema es de 64 bits? Tambien tienes que decirme el valor de las syscalls socket y connect de tu nucleo, ya que el nucleo de linux cambia cada dos por tres y los valores de las syscall tambien.

Un saludo.
#567
ASM / Re: como usar estructuras en nasm?
18 Julio 2013, 04:35 AM
Cita de: Belial & Grimoire en 18 Julio 2013, 03:58 AMse reserva doble word a esp, donde en los primeros 4 words se pone el primer push y en el segundo word el segundo push

sub esp, 8
word1 -> push 0x00010000
word2 -> push 7fb82202

No, subl $0x8, %esp reserva ocho byte, que son el mienbro sin_zero de la estructura sockaddr_in. Los push lo que hacen es decrementar cuatro byte y luego copia el valor que le pasaste como argumento. Pero tambien podrias reservar siete byte, ya que el cero del primer push cuenta. Y tendrias los quince byte que son la estrucutra sockaddr_in.

En la memoria con mi ejemplo tendrias esto cargado. Son dieciseis byte, el ultimo cero se ignora ya que son quince la estructura.

Código (asm) [Seleccionar]
0x0000000000000000000100007fb82202

El segundo push seria el principio.

Cita de: Belial & Grimoire en 18 Julio 2013, 03:58 AMdespues se meten los bytes de la estructura "sin_por, sin_addr"

Te olvidas de sin_family es el 02 del segundo push.

Sobre el codigo, no programo en Windows, pero podrias hacer un socket y connect y dejar por ejemplo netcat ala escucha, no te lies tanto.

Un saludo.
#568
ASM / Re: Comandos puertos I/O
18 Julio 2013, 03:09 AM
Este fragmento de codigo es una funcion de un controlador, sacado de ipxe.

/**************************************************************************
ETH_TRANSMIT - Transmit a frame
***************************************************************************/
static char padmap[] = {
0, 3, 2, 1};

static void t595_transmit(
struct nic *nic,
const char *d, /* Destination */
unsigned int t, /* Type */
unsigned int s, /* size */
const char *p) /* Packet */
{
register int len;
int pad;
int status;

#ifdef EDEBUG
printf("{l=%d,t=%hX}",s+ETH_HLEN,t);
#endif

/* swap bytes of type */
t= htons(t);

len=s+ETH_HLEN; /* actual length of packet */
pad = padmap[len & 3];

/*
* The 3c595 automatically pads short packets to minimum ethernet length,
* but we drop packets that are too large. Perhaps we should truncate
* them instead?
*/
if (len + pad > ETH_FRAME_LEN) {
return;
}

/* drop acknowledgements */
while(( status=inb(BASE + VX_W1_TX_STATUS) )& TXS_COMPLETE ) {
if(status & (TXS_UNDERRUN|TXS_MAX_COLLISION|TXS_STATUS_OVERFLOW)) {
outw(TX_RESET, BASE + VX_COMMAND);
outw(TX_ENABLE, BASE + VX_COMMAND);
}

outb(0x0, BASE + VX_W1_TX_STATUS);
}

while (inw(BASE + VX_W1_FREE_TX) < len + pad + 4) {
/* no room in FIFO */
}

outw(len, BASE + VX_W1_TX_PIO_WR_1);
outw(0x0, BASE + VX_W1_TX_PIO_WR_1); /* Second dword meaningless */

/* write packet */
outsw(BASE + VX_W1_TX_PIO_WR_1, d, ETH_ALEN/2);
outsw(BASE + VX_W1_TX_PIO_WR_1, nic->node_addr, ETH_ALEN/2);
outw(t, BASE + VX_W1_TX_PIO_WR_1);
outsw(BASE + VX_W1_TX_PIO_WR_1, p, s / 2);
if (s & 1)
outb(*(p+s - 1), BASE + VX_W1_TX_PIO_WR_1);

while (pad--)
outb(0, BASE + VX_W1_TX_PIO_WR_1); /* Padding */

        /* wait for Tx complete */
        while((inw(BASE + VX_STATUS) & S_COMMAND_IN_PROGRESS) != 0)
                ;
}


Las definiciones son en hex estan en un .h, como puedo saber todas esas especificaciones de mi tarjeta, hay algun libro o algo completo sobre esta programacion?

Algo entiendo, pero me gustaria saber como funciona del todo, estoy algo quemado.

Un saludo.
#569
ASM / Re: como usar estructuras en nasm?
17 Julio 2013, 17:49 PM
Cita de: Belial & Grimoire en 17 Julio 2013, 17:20 PM
vi los links y lei que no era necesario usar la estructura, tan solo con poner las direcciones era mas que suficiente, entonces tuve una duda

en C para usar connect se usa

struct sockaddr_in cli;

connect(socket, (struct sockaddr*)&cli, sizeof(struct sockaddr))

en asm entonces solo tendria que poner, por ejemplo

sockaddr_in resb 16

push 0x2  -->AF_INET
push 0xb822 --> sin_port
push 0x0100007f --> sin_addr
push dword [sockaddr_in] --> sizeof(struct sockaddr_in)
push [direccion de sock] --> descriptor socket
push [direccion de connect] --> funcion connect()

asi seria entonces?, o estoy equivocado?

salu2

Si, estas equivocado, ese procedimiento se lo explique al usuario de algunos de esos links, una estructura no es mas que otro puntero, es lo mismo en nasm, fasm o gas, mira te dejo un ejemplo.

AT&T espero que no tengas problemas, estructura sacada del MSDN.

Código (asm) [Seleccionar]
subl $0x8, %esp
pushl $0x00010000
pushl $0x7fb82202


Ahora esp apunta a la estructura sockaddr_in, y lo siguente es cargar los parametros, como estas haciendo, pero de esa forma estabas dejando bytes nulos la estructura estaba mal. Y estaba al reves.

Un saludo.
#570
ASM / Re: Opcodes,informacion Indocumentada
17 Julio 2013, 01:35 AM
Si, los probe en un i686 y en un amd64, no funcionan tienen que ser solo para la i386, las que mencione si son validas.

Un saludo.