elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17
81  Programación / ASM / leave y movl en: 2 Julio 2010, 00:28 am
Estoy empezando a depurar programas con GDB, y hacienod disas main me he encontrado con 2 opcodes que no cononzco. He bsucado por google, pero no he sacado nada en claro

SOn: leave y movl.

Movl me imagino que es algo de mover, por que si conozco Mov, peor no sé que pinta la L ahí.

Sobre leave, decir que me aparece dentro de otra función que no es main.

Código:

Código:
serch@serch-server:~/Escritorio$ gdb -q a.out

Leyendo símbolos desde /home/serch/Escritorio/a.out...(no se encontraron símbolos de depuración)hecho.

(gdb) run

Starting program: /home/serch/Escritorio/a.out

Hi ASM!



Program exited normally.

(gdb) disas main

Dump of assembler code for function main:

   0x08048414 <+0>: push   %ebp

   0x08048415 <+1>: mov    %esp,%ebp

   0x08048417 <+3>: and    $0xfffffff0,%esp

   0x0804841a <+6>: call   0x8048428 <proc>

   0x0804841f <+11>: mov    $0x0,%eax

   0x08048424 <+16>: mov    %ebp,%esp

   0x08048426 <+18>: pop    %ebp

   0x08048427 <+19>: ret   

End of assembler dump.

(gdb) disas proc

Dump of assembler code for function proc:

   0x08048428 <+0>: push   %ebp

   0x08048429 <+1>: mov    %esp,%ebp

   0x0804842b <+3>: sub    $0x18,%esp

   0x0804842e <+6>: mov    0x804a020,%eax

   0x08048433 <+11>: mov    %eax,%edx

   0x08048435 <+13>: mov    $0x8048520,%eax

   0x0804843a <+18>: mov    %edx,0xc(%esp)

   0x0804843e <+22>: movl   $0x8,0x8(%esp)

   0x08048446 <+30>: movl   $0x1,0x4(%esp)

   0x0804844e <+38>: mov    %eax,(%esp)

   0x08048451 <+41>: call   0x8048344 <fwrite@plt>

   0x08048456 <+46>: leave 

   0x08048457 <+47>: ret   

End of assembler dump.

(gdb)
82  Foros Generales / Foro Libre / Mejor guitarrista en: 30 Junio 2010, 23:32 pm
¿Quién os parece el mejor guitarrista de rock y derivados?

Mantenía una conversación con un amigo sobre esto, y se me ocurrió ver las opiniones de los del foro.

Para mi Brian Harold May, el mejor. Tanto por técnica, como por ser el inventor de varios estilos (Como el tapping, que equivocadamente se piensa que fue creado por Van Halen  :-\)






Y por supuesto

83  Foros Generales / Foro Libre / Conversación en: 29 Junio 2010, 23:29 pm
Os dejo una conversación que he tenido hace rato por el chat de Tuenti. Situación, me agregan una persona a la que no conozco y acepto por curiosidad (No tengo nada de que avergonzarme ni nada que se pueda usar contra mi)

Total, ocurre lo siguiente;

Citar
* Guillermo: hola
*
* Yo: Buenas
*
* Guillermo: que tal
* soy desarrollador web
* Yo: Yo bien, ¿Tú?
*
* Guillermo: bien
* que edad tienes?
* yo 17
*
* Yo: 16
*
* Guillermo: yo 17
*
* Yo: Ya me lo has dicho.
*
* Guillermo: que lenguajes dominas?
*
* Yo: C y estoy empezando con asm
* Te puedes pasar por mi blog par para mas info
*
* Guillermo: a ok
* yo soy exporto
* en lenguajes web
* php,javascript,css,xhtml,xml,ajax,json,mysql
*
* Yo: Vale.
*
* Guillermo: no dominas ninguno de la web?
*
* Yo: Sé maquetar HTML, aunque no se considere como lenguaje de programación estructurado.
* Guillermo: php nada
* pues php es mi lenguaje preferido
* es una delicia
* tambien se pascal
*
* Yo: pascal no me gusta, y php deriba de C, pero está muy poco tipeado para mi
* me parece uan desfachated eso de no declarar tipo de variables
* dejas toda la gestión al equipo, es una perdida grande de memoria
*
* Guillermo: ya pero el compilador de php
* esta optimizado para eso
* pero para la web
* es lo mejor
* usar php y mysql
* bajo apache
*
* Yo: ¿De verdad eres experto?
*
* Guillermo: bueno experto
* llevo 3 años
* programando el php
* lo conozco bastante bien
* he hecho varios proyectos
*
* Yo: php no es compilado, no usas compilador, es un lenguaje interpretado
* es básico
*
* Guillermo: el compilador
* es el motor
* es decir
* tu no lo tienes que compilar
* si no que el interprete lo hace por ti digamos
*
* Yo: El intérprete, no el compilador como dijiste
*
* Guillermo: si perdona
* y que quieres estudiar
* yo el año que viene
* empiezo la ingenieria
*
* Yo: Estoy buscando trabajo, por ahora no voy a estudiar.
*
* Guillermo: no acabaste la ESO?
*
* Yo: Eso qué mas dá?
*
* Guillermo: no se tio
* te quieres dedicar a la informatica?
*
* Yo: Me es indiferente
*
* Guillermo: a ok
* yo si
* lo tengo clarisimo
*
* Yo: Vale
*
* Guillermo: y tienes algun proyecto pensado?
*
* Yo: Estoy en ellos.
*
* Guillermo: algo relaccionado con la web?
*
* Yo: No.
*
* Guillermo: java que tal lo llevas?
*
* Yo: No me gusta trabajar en virtual
* me gusta trabajar a bajo nivel
*
* Guillermo: si tanto te gusta linux
* sabras phyton no?
*
* Yo: Me gusta GNU, Linux es el núcleo. Y no, no uso python, te reitero que uso C y estoy aprendiendo asm.
*
* Guillermo: osea que te gusta solo la licencia
* GNU?
*
* Yo: Debes informarte un poco mas de lo que es GNU.
* La licencia es GPL.
* No GNU.
* Guillermo: Bueno chaval
* no vallas de listo
* tienes que ser mas humilde
* hasta luego
* que te valla bien fracasado

***************

Guillermo Pascual

Solo tengo una duda, y es si me equivoqué en la parte PHP, pues es un lenguaje que desconozco.. Pero por lo demás, observen ustedes mismos xD
84  Programación / Programación C/C++ / Ejemplo pila con arreglo (Por nicolas_cof) en: 28 Junio 2010, 04:51 am
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 5
  5.  
  6. void push( int*, int*, int );
  7. int pop( int*, int* );
  8. int altura( int* );
  9.  
  10. int main( void )
  11. {
  12.    int *pila, *tmp, elementos = 0, i;
  13.  
  14.    pila = calloc( MAX, sizeof( int ) );
  15.    tmp = pila;
  16.  
  17.    printf( "altura:%d\n", altura( &elementos ) );
  18.  
  19.    for ( i = 0; i < MAX; ++i )
  20.    {
  21.        printf( "push:%d\n", i + 1 );
  22.        push( &(*pila), &elementos, i + 1 );
  23.        pila++;
  24.    }
  25.  
  26.    printf( "altura:%d\n", altura( &elementos ) );
  27.  
  28.    pila--;
  29.    for ( i = 0; i < MAX; ++i )
  30.    {
  31.        printf( "pop:%d\n", pop( &(*pila), &elementos ) );
  32.        pila--;
  33.    }
  34.  
  35.    printf( "altura:%d\n", altura( &elementos ) );
  36.  
  37.    free( tmp );
  38.  
  39.    return 0;
  40. }
  41.  
  42. void push( int *pila, int *elementos, int num )
  43. {
  44.    *pila = num;
  45.    ++(*elementos);
  46. }
  47.  
  48. int pop( int *pila, int *elementos )
  49. {
  50.    int num;
  51.    num = *pila;
  52.  
  53.    *pila = 0;
  54.  
  55.    --(*elementos);
  56.    return num;
  57. }
  58.  
  59. int altura( int *elementos )
  60. {
  61.    return (*elementos);
  62. }
  63.  

Editado
Littlehorse: Evita el spam a sitios externos a elhacker.net que no sean estrictamente relevantes. Tienes el espacio suficiente para transcribir el contenido de tu blog al post. Gracias.
85  Foros Generales / Foro Libre / Desafío Innocentive en: 28 Junio 2010, 04:41 am
By Ged

Se trata de un punto de reunión entre empresas o instituciones con algún tipo de problema, y gente (inventores, científicos, ingenieros, o cualquiera con conocimientos suficientes para dar una solución.)

Lo interesante es que por resolver el problema ofrecen una cantidad que oscila entre 1.500 $ y 1.000.000 $. Como supondréis no son temas sencillos ni triviales.

Leer mas.. http://www.ikkaro.com/innocentive
86  Informática / Electrónica / Pulsador arduino en: 28 Junio 2010, 02:10 am
Tengo un pulsador (http://www.bricogeek.com/shop/img/p/85-200-large.jpg) y me gustaría que cuando sea pulsado, cambie el valor de una variable dentro de mi programa. He pensado en usar interrupciones, probé con CHANGE, pero nada.

¿Alguna idea?
87  Programación / Programación C/C++ / Pilas (Ejemplo) en: 27 Junio 2010, 06:42 am
Intento aplicar una Lista a un vector (Si, en vez de sacar elementos los dejo a 0) pero no funciona del todo bien. ¿Ideas?

Código
  1. #include <stdio.h>
  2. #define PILA_MAX 5
  3.  
  4. /*
  5.  * Implementación de una pila
  6.  * en un vector de 5 elementos
  7.  * por Sergio L. para
  8.  * daemonfreedom.blogspot.com
  9.  * Compilable bajo GCC
  10.  */
  11.  
  12. void mostrarPila();                                 // Mostrar Pila
  13. void pilaPush(int);                                 // Acción PUSH
  14. void pilaPop(int);                                  // Acción POP
  15. void inicializa();                                  // Inicializar la Pila
  16.  
  17. int pila[PILA_MAX];                                 // Definición de la Pila
  18. int cont;                                           // Contador
  19.  
  20. int main (void)
  21. {
  22. int i2;
  23. cont =0;
  24.  
  25. inicializa();
  26. do
  27. {
  28. for (i2=0;i2<PILA_MAX;i2++)         // Llenamos la pila
  29. {
  30. pilaPush(i2);
  31. }
  32. mostrarPila();
  33.  
  34. for (i2=PILA_MAX;i2>0;i2--)         // Vaciamos la pila tal y como indica LIFO
  35. {
  36. pilaPop(i2);
  37. }
  38. mostrarPila();                      // Mostramos la pila
  39.  
  40. cont++;
  41.  
  42. } while (cont!=6);
  43.  
  44. return 0;
  45. }
  46.  
  47. void inicializa()
  48. {
  49. int i;
  50. for (i=0;i<PILA_MAX;i++)
  51. {
  52. pila[i] =0;
  53. }
  54. }
  55.  
  56. void pilaPop(dnum)
  57. {
  58. pila[dnum] =0;
  59. }
  60.  
  61. void pilaPush(dnum2)
  62. {
  63. pila[dnum2] =cont;
  64. }
  65.  
  66. void mostrarPila()
  67. {
  68. int interior;
  69. for (interior=PILA_MAX;interior>0;interior--)
  70. {
  71. fprintf(stdout, "Elemento %d es %d\n", interior, pila[interior]);
  72. }
  73. }
  74.  
88  Sistemas Operativos / GNU/Linux / openSuSe (Nuevo) en: 26 Junio 2010, 23:15 pm
Buenas

Quiero probar openSuSe (openSUSE-11.2-DVD-i586) Ya tengo el dvd descargado y el VBox preparado. Tengo experiencia en sistemas basados en Debian y en CentOS.

Esto al ser nuevo, no sé con que me voy a encontrar, ¿Alguien me dice las diferencias con los otros sistemas? ¿Algo importante que deba saber?

Gracias
89  Foros Generales / Foro Libre / Me pareció digno ponerlo aquí en: 26 Junio 2010, 23:03 pm
Y no pienso comentar nada mas.  ;-)



Es del 2007, pero lo propongo como canción del verano de este año xD
 ;-)
90  Programación / Programación C/C++ / Interrupciones de ratón bajo DOS en: 26 Junio 2010, 20:17 pm
Os lo dejo aquí, extraído directamente de mi nuevo blog, y anteriormente de mi cuaderno de apuntes.



Este ejemplo se desarrolla con Borland C++ 3.1 (Bajo Windows XP) Podemos manejar las interrupciones del ratón gracias a la interrupción 33h.

Tenemos un programa en modo gráfico bajo C (Utilizando graphics.c) y deseamos programar un botón, que al ser pulsado con el botón izquierdo de nuestro ratón, el programa ejecute una acción.

Tras programar la parte visual, y tras tener dibujado nuestro botón llegamos a programar la interrupción.

Lo primero que debemos hacer es pasar la función al registro AX. Una vez hecho, interrumpimos y 'preguntamos' por los valores registrados en BX, CX,...

Si hacemos esto dentro de una función, nos podrá devolver si se ha hecho click o no.

Antes de empezar a usar el ratón tenemos que inicializarlo. Podemos escribir un procedimiento similar a este:

 
Código
  1.   void iniciarRaton()
  2.    {
  3.    union REGS registro_e, registro_s;
  4.    registro_e.x.ax =0; //Función 00h
  5.    int86 (0x33, &registro_e, &registro_s);
  6.    }
  7.  


Cuando llamemos a este procedimiento, reiniciaremos el ratón. Para mas inri, podemos transformar el procedimiento en función, haciendo que devuelva 0 o 1 dependiendo de si se ha podido reiniciar el ratón o no.

También indicar que en vez de declarar union REGS dentro de cada procedimiento o función, es mas cómodo declararlo fuera de todas las funciones, haciendo que sea común a todas.

Función para los botones del ratón:

Código
  1.    int movRat()
  2.    { //Suponemos que union REGS es común
  3.    registro_e.x.ax =3;
  4.    int86 (0x33, &registro_e, &registro_s);
  5.    if (registro_s.x.bx ==1) return 1;
  6.    if (registro_s.x.bx ==2) return 2;
  7.    }
  8.  


Esta función nos devuelve 1 si se pulsa el botón izquierdo del ratón en cualquier posición de la pantalla, y 2 para el botón derecho.

Si queremos delimitar la zona de actuación de la interrupción, la tenemos que pasar las coordenadas del botón a CX y DX (X y R, respectivamente)

Con esto, solo nos quedaría hacer una comprobación a la función movRat, para comprobar si se ha producido una interrupción.
Código
  1.    if (movRat()==1) fprintf(stdout, "Botón Izquierdo\n");
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines