parser elf?

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Locked
taul
Posts: 2
Joined: Mon Sep 12, 2011 12:11 pm

parser elf?

Post by taul »

buenas necesito saber como hago un parser elf, resulta que inicio mi kernel, leo el vfs y cargo el archivo en un buffer..el archivo es un elf linkeado en 80000 utilizando la libreria de mi kernel...osea que deberia iniciar bien el programa al llamar a main()

char buffer [50000];

FILE *fp = fopen("hola.bin","rb");
int bytes= fread(buffer,1,sizeof(buffer),fp);

ahora tengo el archivo en el buffer y ahora como llamo a main?

--------------------------------traducido por google-------------------------------------------------

I need to know how good an elf parser, it is that I start my kernel, read the vfs and position the file in a buffer .. the elf file is linked in 80000 using the library of my kernel ... bone that should begin well program by calling main ()

char buffer [50000];

FILE * fp = fopen ("hola.bin", "rb");
int bytes = fread (buffer, 1, sizeof (buffer), fp);

now I have the file in the buffer and now as I call main?
Luns
Member
Member
Posts: 56
Joined: Sun May 01, 2011 12:15 am

Re: parser elf?

Post by Luns »

Eh, no. Now you need to parse the ELF header, find out where the program wants to be started, and jmp to that location.

Also, I don't think you should be just reading in the entire file. Read the specification, it talks about how to load an ELF program.
taul
Posts: 2
Joined: Mon Sep 12, 2011 12:11 pm

Re: parser elf?

Post by taul »

Code: Select all

#include <stdio.h> /*contiene las funciones como printf,fopen,etc*/

/*extructura de elf32*/
typedef struct header_elf {
    unsigned char       ident[16];
    unsigned short	    type;
    unsigned short	    machine;
    unsigned int	    version;
    unsigned int	    entry;
    unsigned int	    phoff;
    unsigned int	    shoff;
    unsigned int	    flags;
    unsigned short	    ehsize;
    unsigned short	    phentsize;
    unsigned short	    phnum;
    unsigned short	    shentsize;
    unsigned short	    shnum;
    unsigned short	    shstrndx;
}   header_elf;


int parse_elf(char *exedata,unsigned long exelength); //prototipo

void exec_holamundo(){

FILE *fp = fopen("holamundo.bin");

char buf[25600]; //buffer para meter el programa

fread(fp,0,25600,buf); //leemos holamundo.bin y lo metemos en el buffer

parse_elf(buf,fp->length); //le pasamos al parse el buffer y el tamaño del fichero
           
}


int parse_elf(char *exedata,unsigned long exelength)
{   
   
   header_elf* elf = (header_elf*) exeFileData; //map en header_elf el buffer pasado atraves de exefiledata
   
   //empesamos a verificar que sea un file de tipo elf32 valido
   if(elf->ident[0] != 0x7F && elf->ident[1] != 'E' && elf->ident[2] != 'L' && elf->ident[3] != 'F')
   {
      printf("\nError el File no es ejecutable\n");
      return -1;
   }
   
   if(elf->ident[4] == 0 || elf->ident[4] == 2)
   {
      printf("\nError el File no es Ejecutable\n");
      return -1;
   }
   
 
   if(elf->phoff == 0)
   {
      printf("\nError el File no es ejecutable\n");
      return -1;
   }
   
/***********************************************************************************************
y ahora?
************************************************************************************************/
   
    return 0;
}
hasta hay le entiendo bien y ahora que debo hacer? acuerdense que yo hablo español
es muy dificil para mi entender las especificaciones ya que devo traducirlas con google.
y no queda 100% bien entendibles.

les agradesco mucho su ayuda.
User avatar
AJ
Member
Member
Posts: 2646
Joined: Sun Oct 22, 2006 7:01 am
Location: Devon, UK
Contact:

Re: parser elf?

Post by AJ »

How to ask questions says:
Como nota al margen, los foros OSDev.org actualmente no tiene ningún subfora otros idiomas aparte del Inglés. Esto es deliberado. La división de los foros más arriba significa menos gente va a leer y ser capaz de responder a cada tema. Eric Raymond ha hecho también el punto de que la programación en general (y el desarrollo de sistema operativo en particular) es un tema con palabras en Inglés utilizan tantos que es más fácil de comunicarse en Inglés de todos modos.
Cheers,
Adam
Locked