public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Program to convert core file to executable.
@ 2006-05-24 17:18 vamsi krishna
  2006-05-24 17:25 ` vamsi krishna
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: vamsi krishna @ 2006-05-24 17:18 UTC (permalink / raw)
  To: linux-kernel

Hello All,

o I have written the following program to convert a core file to a
executable, and tried to execute the converted executable but my
system __HANGED__, The kernel did'nt give any messages the complete
system was stuck.

o Theoretically , the OS loader should jump into the virtual address
specified at 'ELF_HDR.e_entry and start executing instructions from
that point if the ELF_TYPE is ET_EXEC.

o So I wrote a program which
changes ELF_TYPE form ET_CORE to ET_EXEC and modifies e_entry to
virtual address of the 'main' symbol, since the core file has valid offset
to access the PHDRS, and for ET_EXEC the elf loader just need to map
the PHDRS at the vaddr specified and start jump to e_entry.

o Is there anything I'am missing, can some experts throw light on why
kernel does not load this program, could it be a bug in the kernel code ?

o The following is the program which converts core file to executable,
its simple to use just compile it with 'gcc convertcore.c -o
convertcore' , run with 'convertcore <core-file-name> <new-exec-name>
<vaddr-of-main>'

o I dump the core by CRTL+\

really appreciate your inputs

========================<BEGIN>===============================
#include<elf.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

#ifndef __64_BIT__
#define __32_BIT__
#endif

#ifdef __32_BIT__
#define ELF_EHDR Elf32_Ehdr
#else
#define ELF_EHDR Elf64_Ehdr
#endif

ELF_EHDR place_holder;

/*Chages the elf_header in the file with ptr */
int ChangeElfHeader(int CoreFd, int WriteFd, unsigned long vaddr){

      unsigned long got_len=0;

      if((got_len = read(CoreFd,&place_holder,sizeof(ELF_EHDR)))
              != sizeof(ELF_EHDR)){
              perror("Unable to read the ELF Header::");
              exit(1);
      }
      /*Change the ET_CORE tto ET_EXEC*/
      if(place_holder.e_type == ET_CORE) {
              place_holder.e_type = ET_EXEC;
      } else {
              fprintf(stderr,"The file is not of ELF core file");
              exit(1);
      }

      /*Change the entry */

      place_holder.e_entry = vaddr;

      /*Write back the header*/
      got_len = 0;
      if (( got_len = write(WriteFd,&place_holder,sizeof(ELF_EHDR)))
              != sizeof(ELF_EHDR)) {
              perror("Unable to write the header::");
              exit(1);
      }
      return 1;
}

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2006-05-25 11:09 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-24 17:18 Program to convert core file to executable vamsi krishna
2006-05-24 17:25 ` vamsi krishna
2006-05-24 17:38 ` Daniel Jacobowitz
2006-05-24 20:06   ` vamsi krishna
2006-05-24 20:08     ` Daniel Jacobowitz
2006-05-24 20:19       ` vamsi krishna
2006-05-24 20:25         ` Daniel Jacobowitz
2006-05-24 20:31     ` H. Peter Anvin
2006-05-24 20:52     ` Eric Piel
2006-05-24 21:33     ` Greg KH
2006-05-25 11:04 ` Marcel Holtmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox