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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM y C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ASM y C  (Leído 3,838 veces)
GeorgArming


Desconectado Desconectado

Mensajes: 350


Ver Perfil
ASM y C
« en: 24 Noviembre 2011, 23:07 pm »

Hace poco os pregunté sobre cómo hacer un OS y me redirigísteis hacia otros posts e informaciones. Tengo una duda y, por favor, alguien me la podría resolver? He buscado información pero no he encontrado exactamente lo que busco, y por esto os pregunto a vosotros.

Tomando un tutorial y un ejemplo con ASM, conseguí arrancar en virtualbox un bootloader que imprimiera en pantalla el mensaje X. Haciendo lo mismo pero en C con otros tutorailes, no lo conseguí.

Pero vayamos a lo importante. Si quiero programar un OS, els mejor que escriba el código fuente en ASM pero incluyendo funciones en C o hacerlo al revés (es decir, haciendo el códgo fuente en C incluyendo ASM)?


« Última modificación: 24 Noviembre 2011, 23:11 pm por GeorgArming » En línea

GeorgArming


Desconectado Desconectado

Mensajes: 350


Ver Perfil
Re: ASM y C
« Respuesta #1 en: 24 Noviembre 2011, 23:13 pm »

OJO, la pregunta seguramente es muy estúpida pero, por favor, os pido que me contestéis directamente. Ya he leído mucha documentación  pero no entiendo esa parte.


En línea

d(-_-)b


Desconectado Desconectado

Mensajes: 1.331



Ver Perfil WWW
Re: ASM y C
« Respuesta #2 en: 25 Noviembre 2011, 16:05 pm »

Hace poco os pregunté sobre cómo hacer un OS y me redirigísteis hacia otros posts e informaciones. Tengo una duda y, por favor, alguien me la podría resolver? He buscado información pero no he encontrado exactamente lo que busco, y por esto os pregunto a vosotros.

Tomando un tutorial y un ejemplo con ASM, conseguí arrancar en virtualbox un bootloader que imprimiera en pantalla el mensaje X. Haciendo lo mismo pero en C con otros tutorailes, no lo conseguí.

Pero vayamos a lo importante. Si quiero programar un OS, els mejor que escriba el código fuente en ASM pero incluyendo funciones en C o hacerlo al revés (es decir, haciendo el códgo fuente en C incluyendo ASM)?

Pues como quieras, puedes programas en C asm inline.

Solo espero que no estes intentando hacer un sistema operativo leyendo tutoriales, pues porque creo que no lo hay, y es mas, necesitara conocimientos avanzados en programacion.

suerte.

saludos...

En línea

Max 400; caracteres restantes: 366
GeorgArming


Desconectado Desconectado

Mensajes: 350


Ver Perfil
Re: ASM y C
« Respuesta #3 en: 25 Noviembre 2011, 16:59 pm »

como quiera, pero cuál es la mejor opción? en el caso de linux, está en C y incluyendo ASM o al revés?

y no, no estoy aprendiendo con tutoriales, estoy aprendiendo, básicamente, con libros, como Sistemas Operativos de Tanenbaum, pero al principio, para crear el bootloader, sí miré algún tutorial.
En línea

Unbr0ken

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: ASM y C
« Respuesta #4 en: 25 Noviembre 2011, 17:43 pm »

No he revisado a fondo el código fuente de ningún OS que sea SL, ni mucho menos privativos, pero... he de suponer que te ahorras muchísimas líneas de código usando asm dentro de C...
En línea

Cita de: Snowcrash
Discutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.
GeorgArming


Desconectado Desconectado

Mensajes: 350


Ver Perfil
Re: ASM y C
« Respuesta #5 en: 25 Noviembre 2011, 23:07 pm »

ok, gracias!
En línea

GeorgArming


Desconectado Desconectado

Mensajes: 350


Ver Perfil
Re: ASM y C
« Respuesta #6 en: 26 Noviembre 2011, 00:10 am »

Disculpad mi ignorancia, pero tengo otra duda. He estado investigando sobre cómo incluir ASM in line en C, con gcc. Tengo el código en ASM siguiente (y me funciona):

[BITS 16]
ORG 0

main:
cli
mov     ax, 0x07C0
mov     ds, ax
mov     es, ax
mov     fs, ax
mov     gs, ax
mov     ax, 0×0000
mov     ss, ax
mov     sp, 0xFFFF
sti
mov si, msgTexto
call DisplayMessage

DisplayMessage:
lodsb
or      al, al
jz      .DONE
mov     ah, 0x0E
mov     bh, 0×00
mov     bl, 0×07
int     0×10
jmp     DisplayMessage
.DONE:
jmp Loop
Loop:
jmp Loop
msgTexto db 0x0D, 0x0A, “Hola mundo!!”, 0×00
times 510-($-$$) db 0
dw 0xAA55

Vale, pues he visto diferentes maneras de incluir eso en C. Y ninguna me ha funcionado. Alguien sabría cómo hacerlo en este caso concreto?

Por ejemplo, he probado:

int main()
{
asm(
código asm
);
__asm__(...

y otros pero no me funciona. Seguro que por aquí hay alguna mente brillante capaz de solucionarlo.
En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: ASM y C
« Respuesta #7 en: 26 Noviembre 2011, 03:55 am »

Estas usando la sintaxis de intel, y gcc usa la sintaxis de at&t.

Toda la informacion que necesitas esta en http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html.

Por casualidad conoces la 'convencion C' para llamar a funciones ?
En línea

GeorgArming


Desconectado Desconectado

Mensajes: 350


Ver Perfil
Re: ASM y C
« Respuesta #8 en: 26 Noviembre 2011, 12:12 pm »

entonces tengo que rescribir el código en at&t y escribirlo entre asm(...);?

más o menos conozco la convención C para llamar funciones. entonces sugieres que escriba el código en c que llame a una función en ASM?
En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: ASM y C
« Respuesta #9 en: 27 Noviembre 2011, 04:08 am »

entonces tengo que rescribir el código en at&t y escribirlo entre asm(...);?

más o menos conozco la convención C para llamar funciones. entonces sugieres que escriba el código en c que llame a una función en ASM?
Lo mas comun es tener codigo de C q llama a funciones en ASM, pero no pienses en el SO como un programa comun, con un main y demas. Los SO no suelen tener main.
Y suele haber mezclas de codigo en ASM q llama a C y ese codigo en C llama a codigo en ASM y asi.

Te recomiendo agarrar algun libro de SO y los manuales de intel. E ir leyendo de los 2 al mismo tiempo. ( cuando lees la explicacion de paginacion en el libro de SO, lees como labura en los manuales de intel  y asi ).

De todas formas lo mas facil suele ser agarrar el codigo de algun otro SO e ir leyendolo y modificandolo.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines