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 - Eternal Idol

#791
Si, es asi, debido a que pasas el parametro por referencia, digamos que cuando lo modificas en inicializarNaves estas trabajando con un alias (el parametro nave) que apunta a naveAzul, naveRoja o el nombre que le des a la variable que pasas.
#792
El tipo es exactamente el mismo, Naves, y en C no existen las referencias usadas en ese codigo aunque si los punteros. Mientras haya un solo campo que inicializar (capacidad) sera mejor usar el operador ternario aunque si hubiera mas lo ideal seria no repetir comparaciones.
#793
Lo que pasas es una referencia a naveAzul (el ambito de esa variable local es main, el identificador no existe en inicializarNaves), la direccion de memoria donde esta alojada la variable, en inicializarNaves solo podes acceder a nave y los cambios que hagas seran reflejados en la memoria, en el main si accedes a naveAzul veras esos cambios. Lo que tenes que hacer es simplemente comprobar el valor de bando y trabajar con nave (o un simple if else es suficiente).
#794
ASM / Re: Excepciones en FASM
11 Febrero 2016, 09:40 AM
Si, para sacarlo pones el puntero que habia antes en FS:[0] y listo. El codigo es correcto, siempre que lo ejecutes desde un punto donde ESP sea justamente el marco SEH que construiste (asi al estar primero el campo Next en la pila con un POP con destino FS:[0] lo restauras, y el add esp, 4 es lo mismo que un POP sin destino).

0040200d 64892500000000  mov     dword ptr fs:[0],esp fs:0053:00000000=000cffcc
0:000> dd fs:[0]
0053:00000000  000cffcc 000d0000 000cd000 00000000
0:000> dd @esp
000cff7c  000cffcc 00402041 767a7c04 7ffde000

00402014 648f0500000000  pop     dword ptr fs:[0]     fs:0053:00000000=000cff7c
0:000> dd fs:[0]
0053:00000000  000cff7c 000d0000 000cd000 00000000

0040201b 83c404          add     esp,4
0:000> dd fs:[0]
0053:00000000  000cffcc 000d0000 000cd000 00000000

0:000> dd @esp
000cff80  00402041 767a7c04 7ffde000 767a7be0

Tras esta instruccion:

0:000> dd @esp
000cff84  767a7c04 7ffde000 767a7be0 c809f9f9
#795
ASM / Re: Problema básico con arrays
10 Febrero 2016, 11:48 AM
Estas usando direcciones consecutivas de BYTEs y no de DWORDs y escribiendo un DWORD por vez, es decir vas sobreescribiendo.

Al ser un array de DWORDs tenes que hacer:
mov arrayFibo[ecx * 4 - 4], eax
mov eax, arrayFibo[ecx * 4 - 4]
#796
ASM / Re: Excepciones en FASM
10 Febrero 2016, 10:23 AM
Cita de: Yuki en 10 Febrero 2016, 04:35 AM
FS de llano es la estructura TIB (Thread Information Block).
[FS:0] es un puntero a la estructura SEH (EXCEPTION_REGISTRATION_RECORD).
Los 2 primeros push son los miembros de la estructura SEH.
Al generarse una excepción, el ultimo item de la pila es un puntero a EXCEPTION_RECORD.

Espero no haber pifiado ninguna, por favor corríjanme si me equivoque o tengo una idea erronea de algúna parte de este código.

Gracias!

Si, bueno es TEB, cuyo primer campo es del tipo TIB (NT_TIB).
Si, ExceptionList (seria en C Teb->NtTib.ExceptionList).
Si, Next y Handler.

Casi, siempre cuando se llama a una funcion el ultimo elemento de la pila es la direccion de retorno, en este caso y por la convencion de llamada el siguiente es un puntero a EXCEPTION_RECORD. Por cierto tal vez te confundio un poco al principio el orden de los campos del marco SEH por la forma de crecer que tiene la pila:

antes de push expresion tenes como ultimo elemento la direccion de retorno:
0:000> dd @esp
000cff84  767a7c04 7ffde000 767a7be0 2c77d213

KERNEL32!BaseThreadInitThunk+0x24:
767a7c04 50              push    eax
767a7c05 ff15b0118176    call    dword ptr [KERNEL32!_imp__RtlExitUserThread (768111b0)]
...

empujaste expresion, el ultimo elemento de la pila es ese y la direccion de la misma (ESP) decrecio 4 bytes (el tamaño de un elemento):
0:000> dd @esp
000cff80  00402037 767a7c04 7ffde000 767a7be0

empujaste lo que vendria a ser Teb->NtTib.ExceptionList->Next:
0:000> dd @esp
000cff7c  000cffcc 00402037 767a7c04 7ffde000

Siguiendo la logica anterior en ESP tenes un marco SEH perfectamente valido, primero el Next y despues el Handler (y ahi continua estando la direccion de retorno).

Con todo esto espero que ahora sea mas evidente que en la linea 7 le asigna a ExceptionList el marco SEH que puso en la pila en las dos lineas anteriores  ::)
#797
ASM / Re: Excepciones en FASM
10 Febrero 2016, 02:34 AM
Cita de: Yuki en 10 Febrero 2016, 02:19 AM
Handler vendria a ser [FS] despues de haberle movido ESP (osae la estructura) ¿no? ese termino me mato, en todo caso si es así puedo suponer que tiene 2 "miembros".

1_ Next: Puntero a la dirección que se ejecutará al ocurrir una excepción.
2_ Handler: Puntero al marco SEH anterior.

No, Handler es el segundo campo del marco SEH (la estructura EXCEPTION_REGISTRATION_RECORD). Es al reves 1 y 2, Next como su nombre lo indica es el siguiente marco SEH en la lista (vos añadis un marco SEH y lo haces apuntar al que estaba en cabeza de la lista), Handler es el "manejador" de la excepcion, esa es la direccion de tu funcion.

Cita de: Yuki en 10 Febrero 2016, 02:19 AMLa línea 7 de llano no te entendí, no se que es "ExceptionList" (Lista de excepciones).

FS:[0] es en definitiva ExceptionList, como dice en la Wikipedia  Current Structured Exception Handling (SEH) frame. El campo ExceptionList es el primero de la TEB ya que su primer miembro es del tipo NT_TIB:

dt ntdll!_NT_TIB
  +0x000 ExceptionList    : Ptr32 _EXCEPTION_REGISTRATION_RECORD

Cita de: Yuki en 10 Febrero 2016, 02:19 AM
¿Vos interpretas como SEH a los 2 valores en la pila y [FS:0] como la lista de excepciones?

Marco SEH (o SEH frame) son esos dos valores que componen una estructura del tipo EXCEPTION_REGISTRATION_RECORD.
#798
ASM / Re: Excepciones en FASM
10 Febrero 2016, 01:05 AM
Entre la linea 5 y la 6 crea un marco de SEH:

0:000> dt ntdll!_TEB
  +0x000 NtTib            : _NT_TIB
...

dt ntdll!_NT_TIB
  +0x000 ExceptionList    : Ptr32 _EXCEPTION_REGISTRATION_RECORD
...
0:000> dt ntdll!_EXCEPTION_REGISTRATION_RECORD
  +0x000 Next             : Ptr32 _EXCEPTION_REGISTRATION_RECORD
  +0x004 Handler          : Ptr32 _EXCEPTION_DISPOSITION

Handler tiene como valor en este caso Excepción y Next toma el valor que habia en FS:[0], es decir el marco SEH anterior.

En la linea 7 le asigna a ExceptionList el marco SEH que puso en la pila en las dos lineas anteriores.

Si, _TEB es la estructura, a la que se puede acceder con un offset del registro de segmento FS: https://en.wikipedia.org/wiki/Win32_Thread_Information_Block

GetExceptionCode es una macro pero en la pila cuando tu manejador de excepciones es llamado tenes un puntero una estructura del tipo EXCEPTION_RECORD:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363082%28v=vs.85%29.aspx
#799
Programación C/C++ / Re: Archivos bINARIOS c++
8 Febrero 2016, 18:14 PM
Cita de: SojatDotar en  8 Febrero 2016, 18:11 PM
Ya lo he solucionado, ahora me da un problema cuando quiero leer lo que esta en el archivo

Bien pero no escribas mensajes consecutivos, edita tu mensaje anterior y si vas a estar probando diferentes cosas no escribas hasta que hagas la ultima prueba, no nos vayas dando una actualizacion paso por paso por favor.




Ahora lee lo que te dijo class_OpenGL en su primer mensaje en el hilo.
#800
Programación C/C++ / Re: Archivos bINARIOS c++
8 Febrero 2016, 17:16 PM
El ambito de la variable i es el bucle unicamente.