• Viernes 8 de Noviembre de 2024, 20:53

Mostrar Mensajes

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


Mensajes - sharek

Páginas: [1]
1
C/C++ / Re: '0' al final del array
« en: Martes 4 de Noviembre de 2008, 08:08 »
No se si habrás caído en la cuenta que los arrays de char (strings) terminan en el byte nulo () para indicar el EOL, todas las cadenas de texto en C deben tenerlas, si no, funciones como strcpy, printf etc.. no sabrían donde han de parar de leer y te imprimirían la memoria del programa (código u otras variables) hasta encontrar un '0' de pura suerte.

si tu creas una cadena:
Código: Text
  1. char datos[]="Hola";
  2.  
Estás creando un array de 5 byte, no 4 ya que es 'H','o','l','a',''

memcpy NO añade ese , strcpy y strncpy si lo generan

EI: Juntando mensajes, por favor si no hay ninguna respuesta en el medio usen el boton editar.

releyendo tu mensaje....
Código: Text
  1. else bloques[i].cadena[1] = '0';
  2.  

Te das cuenta que '0' es el literal "cero" y no '' (NULL), tenlo en cuenta

2
C/C++ / Desarrollo de aplicaciones con librerías PCRE
« en: Domingo 2 de Noviembre de 2008, 17:26 »
Alguien ha usado alguna vez PCRE o conoce algún tutorial sobre ello en C?

No he encontrado ni un solo tutorial de C sobre PCRE, y los manuales que vienen con la librería solo reflejan el API y nada mas, supongo que habrá que rellenar alguna estructura y luego realizar la búsqueda recursivamente hasta que devuelva null o similar, pero no se por donde empezar, alguien puede arrojarme un poco de luz sobre el tema?

3
C/C++ / Re: HTML parser
« en: Sábado 1 de Noviembre de 2008, 08:15 »
Tu necesitas a XPath ;-) lo tienes dentro de libxml, te permitirá extraer las urls (href de las etiquetas anchor) con una especie de expresión regular (por llamarlo de alguna forma)

4
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Sábado 30 de Junio de 2007, 00:42 »
en cuanto al código que genera errores misteriosos en bochs... ¿Alguien ve alguna errata?

no entiendo que falla y es realmente decepcionante

5
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Sábado 30 de Junio de 2007, 00:41 »
CULPA MIA!
mil perdones
Código: Text
  1. selector_tabla_descriptores:
  2.   dw  selector_tabla_descriptores.fin - selector_tabla_descriptores -1
  3.   dd  07C00h + selector_tabla_descriptores
  4.  
  5. selector_tabla_descriptores:
  6.  

Tengo el código (y las etiquetas) en otro idioma, y al traducirlo para ponerlo en el foro para que quedase mas claro, LA CAGUE!


perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon,


una y MIL VECES

6
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Viernes 29 de Junio de 2007, 09:48 »
Perdón?

fijate bien en mi código:
Código: Text
  1.  
  2. (etc....)
  3. pasa_a_mode_protegit:
  4.   cli
  5.   lgdt  [selector_taula_descriptors]
  6.   mov  EAX, CR0
  7.   or  AL, 1
  8.   mov  CR0, EAX
  9.   jmp 08h:07C00h + mode_protegit
  10. (etc....)
  11. selector_taula_descriptors:
  12.   dw  taula_descriptors.fi - taula_descriptors -1
  13.   dd  07C00h + taula_descriptors
  14.  
  15. taula_descriptors:  &#59; taula de descriptors de segments
  16. .nul:    &#59; Segment nul
  17.   dw  0  &#59; Limit L0-L15
  18.   dw  0  &#59; base B0-B15
  19. (etc....)
  20.  
  21.  

¿donde ves que no lo use?
lgdt   [selector_taula_descriptors]
y luego, mas abajo tengo
selector_taula_descriptors:
   dw   taula_descriptors.fi - taula_descriptors -1
   dd   07C00h + taula_descriptors

y la tabla debajo

Creo que es todo correcto... ¿me estoy liando yo o te estás liando tu?

Saludos (y gracias)

7
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Jueves 28 de Junio de 2007, 17:23 »
Soy un plasta, lo se!

pero fijaos en el código de ahora, no habilito las interrupciones y sigue fallando por excepción 13 (err prot general)

soy un liante! al principio no me iba, luego parecía que si, y ahora vuelve a no irme... es un problema en alguna parte del código y no hay tutía

Amf amf

8
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Jueves 28 de Junio de 2007, 06:45 »
Cita de: "Eternal Idol"
¿Cual es la razon para habilitar las interrupciones antes de que arranque el codigo de 32 bits? No tiene sentido, hasta que no hagas tu propia tabla de interrupciones de 32 bits que las habilites.
No habilito las interrupciones hasta que tengo el código en 32bit, después del salto corto, todo y no tener tabla de interrupciones, no debería rebentarme y acabar en un error de protección general, pero, sigo sin ver el porqué peta, pongo el codigo esencial, a ver si veis algún error garrafal:

Código: Text
  1.  
  2. [BITS 16]
  3.   jmp  07C0h:inicio
  4. inicio:
  5. ; aqui uso interrupciones de bios para cargar el "nucleo"
  6. pasa_a_modo_protegido:
  7.   cli
  8.   lgdt  [selector_tabla_descriptores]
  9.   mov  EAX, CR0
  10.   or  AL, 1
  11.   mov  CR0, EAX
  12.   jmp 08h:07C00h + modo_protegido
  13. [BITS 32]
  14. modo_protegido:
  15.   jmp  08h:10000h
  16. selector_tabla_descriptores:
  17.   dw  selector_tabla_descriptores.fin - selector_tabla_descriptores -1
  18.   dd  07C00h + selector_tabla_descriptores
  19.  
  20. selector_tabla_descriptores:
  21. .nulo:              &#59; Segmento nulo
  22.   dw  0          &#59; Limit L0-L15
  23.   dw  0          &#59; base B0-B15
  24.   db  0          &#59; base B16-B23
  25.   db  00000000b      &#59; Drets d' accés
  26.   db  00000000b      &#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  27.   db  0          &#59; Base B24-B31
  28. .codigo:              &#59; Segment de codi lectura/escriptura, no conformat
  29.   dw  0FFFFh        &#59; Limit L0-L15
  30.   dw  0          &#59; base B0-B15
  31.   db  0          &#59; base B16-B23
  32.   db  10011010b    &#59; Drets d' accés
  33.   db  11001111b    &#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  34.   db  0        &#59; Base B24-B31
  35. .datos:          &#59; Segment de dades, lectura/escriptura, expansió cap avall
  36.   dw  0FFFFh      &#59; Limit L0-L15
  37.   dw  0        &#59; base B0-B15
  38.   db  0        &#59; base B16-B23
  39.   db  10010010b  &#59; Drets d' accés
  40.   db  11001111b  &#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  41.   db  0      &#59; Base B24-B31
  42. .fin:
  43. times 510-($-$$) nop
  44.   dw  0AA55h
  45.  
  46.  

el código debería terminar en
Código: Text
  1.   jmp  08h:10000h
  2.  
pero por alguna razón bochs rebienta en la linea anterior, en el salto a 32bit:
Código: Text
  1.   jmp 08h:07C00h + modo_protegido
  2.  
Citar
00001345703i[CPU  ] >> jmp far 0008:7c44 : EA447C0800
00001345703e[CPU  ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
00001345703i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
00001345703e[CPU  ] CPU_LOOP bx_guard.interrupt_requested=1
Next at t=1345703
(0) [0x00007c3f] 07c0:003f (unk. ctxt): jmp far 0008:7c44         ; ea447c0800
<bochs:2> 00001345703i[     ] dbg: Quit

Todo apunta a un problema con los descriptores de segmentos, pero yo creo que están bien...

(se que es un palo leer todo el post, pero ya no se donde caer muerto...)

9
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Miércoles 27 de Junio de 2007, 21:19 »
Superado el trauma, ahora solo tengo el problema que si habilito las interrupciones, rebienta todo..

Si no se crea una tabla de interrupciones válido, ¿peta por error de protección general?
no lo entiendo:

fijate:
Código: Text
  1.  
  2. [BITS 32]
  3. inicio:
  4.   jmp  &#036;
  5.  
  6.  

no genera ningún error (si activo el debug de bochs veo como va ejecutando el bucle infinito sin problema
en cambio:
Código: Text
  1.  
  2. [BITS 32]
  3. inicio:
  4.   sti
  5.   jmp  &#036;
  6.  
  7.  


me da como resultado:
Citar
00002428246e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown
 status is 00h, resetting
00002428246i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
00002428246i[APIC0] local apic in CPU 0 initializing
00002428246e[CPU0 ] CPU_LOOP bx_guard.interrupt_requested=1
Next at t=2428246
(0) [0x00010001] 0008:10001 (unk. ctxt): jmp .+0xfffffffe (0x00000001) ; ebfe


mis descriptores de segmento son los siguientes:
Código: Text
  1.  
  2. taula_descriptors:  &#59; taula de descriptors de segments
  3. .nul:    &#59; Segment nul
  4.   dw  0  &#59; Limit L0-L15
  5.   dw  0  &#59; base B0-B15
  6.   db  0  &#59; base B16-B23
  7.   db  00000000b&#59; Drets d' accés
  8.   db  00000000b&#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  9.   db  0  &#59; Base B24-B31
  10. .codi:    &#59; Segment de codi lectura/escriptura, no conformat
  11.   dw  0FFFFh  &#59; Limit L0-L15
  12.   dw  0  &#59; base B0-B15
  13.   db  0  &#59; base B16-B23
  14.   db  10011010b&#59; Drets d' accés
  15.   db  11001111b&#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  16.   db  0  &#59; Base B24-B31
  17. .dades:    &#59; Segment de dades, lectura/escriptura, expansió cap avall
  18.   dw  0FFFFh  &#59; Limit L0-L15
  19.   dw  0  &#59; base B0-B15
  20.   db  0  &#59; base B16-B23
  21.   db  10010010b&#59; Drets d' accés
  22.   db  11001111b&#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  23.   db  0  &#59; Base B24-B31
  24. .fi:
  25.  
  26.  

estoy en el segmento 08h:10000h (como se aprecia en el error de bochs) y no tengo tabla de interrupcion creada

¿alguien sabe si es normal este error sin tabla? probé a crear una tabla pero creo que la documentación que consulté no era demasiado de fiar... obtenía el mismo error

10
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Miércoles 27 de Junio de 2007, 20:34 »
Bien, entonces, avanzamos un poco mas, si lo hago 16 bit:
Código: Text
  1.  
  2.   cli
  3.   lgdt  [selector_taula_descriptors]
  4.   mov  EAX, CR0
  5.   or  AL, 1
  6.   mov  CR0, EAX
  7.   jmp 08h:10000h
  8.  
  9.  
No me coge el desplazamiento, ya que supera los 16bit y salta a 08h:0 en vez de a 08h:10000h

Se que deben ser cosas básicas, pero no puedo con ellas...

11
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Miércoles 27 de Junio de 2007, 20:01 »
Cita de: "sharek"
Uso nasm para compilar... ¿pq demonios no entiende el jmp y me ensambla un jmp tan feo como "jmp far 1:0" ? es absurdo!
Mil perdones, dije compilar y es ensamblar

12
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Miércoles 27 de Junio de 2007, 19:39 »
Espera, que nos desviamos del tema, las interrupciones ya llegarán, he probado una cosa, he cogido la definicion de los segmentos de el post del Bootloader (por si mis definiciones eran incorrectas) y ahora me da un error bastante gracioso, adjunto código

Código: Text
  1.  
  2. pasa_a_modo_protegido:
  3.   cli
  4.   lgdt  [selector_tabla_descriptores]
  5.   mov  EAX, CR0
  6.   or  AL, 1
  7.   mov  CR0, EAX
  8. [BITS 32]
  9.   jmp 08h:10000h
  10.  
  11.  


es divertido ver como bochs me peta diciendo:

Citar
00001116142i[CPU0 ] >> jmp far 0001:0000 : EA00000100
00001116142e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
00001116142i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
00001116142i[APIC0] local apic in CPU 0 initializing
00001116142e[CPU0 ] CPU_LOOP bx_guard.interrupt_requested=1
Next at t=1116142
(0) [0x00007c3f] 07c0:003f (unk. ctxt): jmp far 0001:0000         ; ea00000100


Uso nasm para compilar... ¿pq demonios no entiende el jmp y me ensambla un jmp tan feo como "jmp far 1:0" ? es absurdo!

13
ASM (Ensamblador) / Re: Problemas Con El Salto A Modo Protegido
« en: Miércoles 27 de Junio de 2007, 16:28 »
Sisis, eso por descontado, perdón si no me hice entender bien, primero salto a modo protegido, después asigno la tabla de descriptores de segmentos y después la tabla de interrupciones.

Es mas, creo que la tabla de interrupciones en modo protegido no es imprescindible, ya que el código debería poderse ejecutar independientemente de si gestionas correctamente las interrupciones (siempre y cuando no te topes con una, claro)

14
ASM (Ensamblador) / Problemas Con El Salto A Modo Protegido
« en: Miércoles 27 de Junio de 2007, 13:58 »
Hace ya meses (si, soy patético) que intento, sin éxito desarrollar un sistema operativo de juguete (mejor dicho un cargador de programas con 4 funciones) mi idea es simplemente divertirme, no pretendo hacer nada usable ni nada grande....

Hice mis pinitos con el modo real, un mini entorno con 4 funciones básicas de acceso a disco y demás

El problema vino cuando 1mb me resultó insuficiente para jugar (entiendase jugar por pasarlo bien programando en ensamblador)... aqui entra el modo protegido

Creo los descriptores de segmento, tal y como indica la documentación de intel, 200mil webs y tres o cuatro libros, paso a modo protegido tal y como indica y hago el salto corto para "entrar" a un segmento válido y ete aqui el problema
siempre, SIEMPRE SIEMPRE, invariablemente, si habilito las interrupciones, "error de protección general"

No pego código para no ofender sensibilidades y pq no lo tengo a mano ahora (estoy en la oficina) pero si quereis mas información la pondré mas tarde...

a grandes rasgos... esa excepción solo debería suceder si el segmento no es válido y no creo que sea el caso... ¿alguien sabe si hay que hacer algún paso adicional salvo cargar (lgdt) la tabla de descriptores, crear una tabla de interrupciones (aunque creo que no es imprescindible) pasar a modo protegido, hacer un salto largo y tirar millas?

otra cosa que no acabo de tener claro es como demonios selecciono los selectores...

8h es el primero... 16h es el segundo?

(perdón por ser tan ambiguo... prometo desarrollar mas, con código si el hilo crece)

15
ASM (Ensamblador) / Re: Alguien Que Sepa Ensamblador( 8086)???
« en: Miércoles 27 de Junio de 2007, 13:42 »
Lo que mas me ha gustado es lo del registro "E"... ¿Existe tal registro de proposito general en 8086?

no son AX,BX,CX, y DX?

(estoy preguntando, no afirmando, jamás miré un datasheet de 8086)

Páginas: [1]