Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Adri124 en 28 Junio 2016, 14:28 pm



Título: Duda urgente en NASM, ayuda por favor
Publicado por: Adri124 en 28 Junio 2016, 14:28 pm
Duda resuelta


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: AlbertoBSD en 28 Junio 2016, 14:39 pm
Y cual es tu duda?

Si tienes alguna duda en especifico preguntala y te responderemos

Si no sabes programar en ASM hay varios tutoriales en los temas pegados en este subforo.

Por lo demas me parece deshonesto que alguien consiga su titulo universitario de esa forma. Podria resolver ese problema facilmente pero no tengo titulo universitario.

Saludos


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: Adri124 en 28 Junio 2016, 15:10 pm
La duda que tengo es por qué produce violación de segmento. Llevo horas trackeando el error y no logro encontrarlo, por eso pido ayuda ya desesperadamente a alguien que sea capaz de encontrarlo, disculpa si te he molestado.


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: AlbertoBSD en 28 Junio 2016, 15:43 pm
El detalle que si te da un segment fault quiere decir que estas tratando de escribir en memoria no inicializada..
 posiblemente uno de tus mov a alguna de las direcciones absolutas que manejas entre corchetes..

Ya que tu instruccion solo detecta un overflow a nivel de registro el cual solo se activa si el segundo numero es mas grande que el primero y resutado seria negativo si el overflow flag esta encendido.

Código
  1. jo near error_4

La resta como tal esta bien pero el problema esta en alguno de los mov ya que te da segment fault y es distinto al overflow a nivel de registro.

La otra es que veo muchas instrucciones redundantes como

Código
  1. push dword eax
  2. pop dword eax

Código
  1. mov dword [ebp-4], eax
  2. lea eax, [ebp-4]

Como dices que generaste ese codigo asm?

Saludos


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: xv0 en 28 Junio 2016, 16:06 pm
Tienes alguna direccion de la violacion de segmento? Me gustaria depurarlo pero estoy fuera.

Pero como dice el compañero, el codigo esta lleno de instrucciones sin sentido alguno, de hay posibles errores.

Código
  1. sub esp , 4*1
  2.  
  3. ///////////////
  4.  
  5. push dword 2147483647
  6. pop dword eax
  7. mov dword [_x],eax
  8.  
  9. ////////////////////////
  10.  
  11. push dword eax
  12. pop dword eax
  13. mov dword [_ressuma],eax
  14. push dword _ressuma
  15. pop dword eax
  16. mov dword eax , [eax]
  17. push dword eax

Por que todo eso? Dime mas datos sobre el error, y podre decirte algo, pero yo depuraria el codigo no el error, todas esas cosas sobran y te ahorras problemas.

Un saludo.


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: Adri124 en 28 Junio 2016, 18:31 pm
Muchas gracias por vuestras respuestas, respondiendo:

AlbertoBSD, el código lo genero con flex y bison, es un compilador de un lenguaje inventado muy similar a C, pero en este caso me está volviendo loco para detectar el fallo... me dice "Violación de segmento ("core" generado), y la verdad es que no sé cual es el mov que puede dar el fallo... he intentado depurarlos todos. Al menos la suma si que la realiza correctamente (30), después revienta.

No entiendo bien lo que me comentas del jo a nivel de registro, que es lo que debería fallar?

cpu2, el código puede ser algo caótico porque es generado en bison detectando expresiones, es un compilador que genera NASM dependiendo del código.

En cuanto a más detalles del error... llevo un buen rato intentando encontrar más información pero no doy con nada... solo sé que falla tras ejecutar la suma e imprimir el 30. Tras imprimir el 30, debería saltar a ****Error de ejecucion: overflow en resta

ACTUALIZACIÓN: Acabo de ver (intentando depurar a mi manera) que muy posiblemente la línea 126 sea la que provoca la violación de segmento. Esa instrucción es la que me carga en la variable x el valor 9999999999 para hacer la resta -9999999999 - 9999999999 que en lugar de provocar violación de segmento, debería ser detectada por jo y saltar, mostrando el código de error ****Error de ejecucion: overflow en resta

Por tanto, creo que podría ser un fallo en el jo, o en la carga del operando por ser demasiado grande... la verdad es que no sé realmente que es lo que falla ya


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: AlbertoBSD en 28 Junio 2016, 19:16 pm
El máximo valor dado por un entero de 32 bits sin signo es de hasta 4 mil millones y pasado...
No puedes simplemente asignar ese valor a una variable eax... Eso te va a dar un overflow en el registro.
Que es cuando se activa la bandera de overflow (Cosa que validas con tu jo

Pero es totalmente Diferente a un segment fault Este ultimo se da por que estas tratando de leer o escribir en una direccion de memoria inexistente.

Saludos


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: Adri124 en 28 Junio 2016, 19:45 pm
DSuda resuelta


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: xv0 en 28 Junio 2016, 22:34 pm
Pero no seria mejor ,utilizar algun debugger pata saber de donde procede el segmentation fault?

Y a partir de hay arreglsr el problema, es lo que intente decir antes,  depuralo y sabras el fallo.

Un saludo.


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: Adri124 en 29 Junio 2016, 00:31 am
Hay algún buen debugger que me recomendéis?


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: AlbertoBSD en 29 Junio 2016, 01:20 am
En linux esta el GDB y en windows podrias probar con olly debug o con IDA.

Saludos


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: Adri124 en 29 Junio 2016, 17:48 pm
Una duda, cuando intento cargar el numero 9999999999 se me desborda, hay algún registro más grande que dword eax?


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: AlbertoBSD en 29 Junio 2016, 18:00 pm
Y porque cargas ese numero?

Mas grande? si es de 32 bits tu plataforma no.

Que procesador estan usando?.

Las operaciones con numeros de mas longitud requieren otro tipo de operaciones.

Edito.

Segun leo:

Citar
With the Pentium MMX, eight 64-bit MMX integer registers were added (MMX0 to MMX7, which share lower bits with the 80-bit-wide FPU stack).[18] With the Pentium III, a 32-bit Streaming SIMD Extensions (SSE) control/status register (MXCSR) and eight 128-bit SSE floating point registers (XMM0 to XMM7) were added.

Si hay registros mas grandes, pero no se usarlos!! xD

Saludos!


Título: Re: Duda urgente en NASM, ayuda por favor
Publicado por: xv0 en 29 Junio 2016, 18:10 pm
Si tu plataforma soporta SSE2 tienes de 128 bits sin necesidad de 64 bits, pero son otras instrucciones las que los manejan.

Pero depuraste ya el code con un debbuger?

Un saludo.