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?
parser elf?
Re: parser elf?
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.
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.
Re: parser elf?
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;
}
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.
Re: parser elf?
How to ask questions says:
Adam
Cheers,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.
Adam