* 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* Re: Program to convert core file to executable. 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-25 11:04 ` Marcel Holtmann 2 siblings, 0 replies; 11+ messages in thread From: vamsi krishna @ 2006-05-24 17:25 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; } static void finishWriting(int coreFd, int writeFd) { unsigned char write_buffer[4*1024]; int got_len = -1; while( (got_len = read(coreFd,write_buffer,4096)) != 0) { if(write(writeFd,write_buffer,got_len) != got_len ){ perror("Unable to to write the length which was read:"); exit(1); } } close(writeFd); close(coreFd); } int main(int argc,char* argv[]){ int coreFd; int writeFd; unsigned long vaddr; if( argc < 3 ) { fprintf(stderr,"Usage core2elf core.file exe.file.name"); exit(1); } if( (coreFd = open(argv[1],O_RDONLY)) < 0) { perror("Unable to open the core file:"); exit(1); } if ((writeFd = open(argv[2],O_WRONLY| O_CREAT)) < 0) { perror("Unable to open the write file::"); exit(1); } sscanf(argv[3],"%lx",&vaddr); ChangeElfHeader(coreFd,writeFd,vaddr); finishWriting(coreFd,writeFd); } =========================<END>=========================== Best Regards, Vamsi kundeti. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 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-25 11:04 ` Marcel Holtmann 2 siblings, 1 reply; 11+ messages in thread From: Daniel Jacobowitz @ 2006-05-24 17:38 UTC (permalink / raw) To: vamsi krishna; +Cc: linux-kernel On Wed, May 24, 2006 at 10:48:31PM +0530, vamsi krishna wrote: > 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. Look at the program headers. Many of them probably have a file size of zero. The code segments from the executable and shared libraries aren't present in the core file. Of course, the kernel shouldn't crash! It sounds like a bug. -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 2006-05-24 17:38 ` Daniel Jacobowitz @ 2006-05-24 20:06 ` vamsi krishna 2006-05-24 20:08 ` Daniel Jacobowitz ` (3 more replies) 0 siblings, 4 replies; 11+ messages in thread From: vamsi krishna @ 2006-05-24 20:06 UTC (permalink / raw) To: vamsi krishna, linux-kernel, dan Hello Daniel, > Look at the program headers. Many of them probably have a file size of I checked the PHDRS (readelf --segments) the following are the PHDRS of the core.exe ===============<BEGIN>================== Elf file type is EXEC (Executable file) Entry point 0x8048364 There are 11 program headers, starting at offset 52 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align NOTE 0x000194 0x00000000 0x00000000 0x00a48 0x00000 0 **LOAD 0x001000 0x08048000 0x00000000 0x00000 0x01000 R E 0x1000 LOAD 0x001000 0x08049000 0x00000000 0x01000 0x01000 RWE 0x1000 LOAD 0x002000 0xf649b000 0x00000000 0x01000 0x01000 RWE 0x1000 **LOAD 0x003000 0xf649c000 0x00000000 0x00000 0x132000 R E 0x1000 LOAD 0x003000 0xf65ce000 0x00000000 0x03000 0x03000 RWE 0x1000 LOAD 0x006000 0xf65d1000 0x00000000 0x03000 0x03000 RWE 0x1000 LOAD 0x009000 0xf65e8000 0x00000000 0x01000 0x01000 RWE 0x1000 **LOAD 0x00a000 0xf65e9000 0x00000000 0x00000 0x15000 R E 0x1000 LOAD 0x00a000 0xf65fe000 0x00000000 0x01000 0x01000 RWE 0x1000 LOAD 0x00b000 0xfeffe000 0x00000000 0x02000 0x02000 RWE 0x1000 ======================<END>============= o As you said I see some of the PHDRS are having FileSiz as zero, the first (1st **ed ) PHDR which is having virtual address 0x08048000 (this is obviously) the start of the text of the program, and its not having any memory in the core file. o Does the other PHDRS for which FileSiz is zero correspond to the dynamic shared objects (.so) text ?? example in the above we see (2 **ed ) PHDR with VirtAddr as 0xf649c000 , so this means the text of some shared .so has been mapped here right? o I have question about the memory mapping with permissions r--s or r--p (gconv used by glibc gets mapped like this some time) , so does the core file contains this information of the memory mappings? o Is there a way I can findout the standard which the OS follows to write the core file? o Rather than depending on the OS core file, hows your opinion on writing out all the mappings form /proc/<pid>/maps as PT_LOAD into a elf formatted file of type ET_EXEC, do you think this works? rather than converting core file to exe? > > Of course, the kernel shouldn't crash! It sounds like a bug. > Yes I can reproduce this , is there a bugzilla for kernel? (or should we report this at the buzilla of the distribution?) Thank you, Vamsi ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 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:31 ` H. Peter Anvin ` (2 subsequent siblings) 3 siblings, 1 reply; 11+ messages in thread From: Daniel Jacobowitz @ 2006-05-24 20:08 UTC (permalink / raw) To: vamsi krishna; +Cc: linux-kernel On Thu, May 25, 2006 at 01:36:08AM +0530, vamsi krishna wrote: > o Does the other PHDRS for which FileSiz is zero correspond to the > dynamic shared objects (.so) text ?? example in the above we see (2 > **ed ) PHDR with VirtAddr as 0xf649c000 , so this means the text of > some shared .so has been mapped here right? Probably. > o I have question about the memory mapping with permissions r--s or > r--p (gconv used by glibc gets mapped like this some time) , so does > the core file contains this information of the memory mappings? > > o Is there a way I can findout the standard which the OS follows to > write the core file? No. Core files change from time to time. David Miller recently proposed changing these. > o Rather than depending on the OS core file, hows your opinion on > writing out all the mappings form /proc/<pid>/maps as PT_LOAD into a > elf formatted file of type ET_EXEC, do you think this works? rather > than converting core file to exe? You might want to take a look at GDB's generate-core-file command. -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 2006-05-24 20:08 ` Daniel Jacobowitz @ 2006-05-24 20:19 ` vamsi krishna 2006-05-24 20:25 ` Daniel Jacobowitz 0 siblings, 1 reply; 11+ messages in thread From: vamsi krishna @ 2006-05-24 20:19 UTC (permalink / raw) To: vamsi krishna, linux-kernel, dan Hello Dan, > You might want to take a look at GDB's generate-core-file command. > Does gdb take care (loading) of core files generated on machine which support ASLR (Address Space Layout Randomization)? , currently ASLR is being shipped as exec-shield in redhat Thanks, Vamsi ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 2006-05-24 20:19 ` vamsi krishna @ 2006-05-24 20:25 ` Daniel Jacobowitz 0 siblings, 0 replies; 11+ messages in thread From: Daniel Jacobowitz @ 2006-05-24 20:25 UTC (permalink / raw) To: vamsi krishna; +Cc: linux-kernel On Thu, May 25, 2006 at 01:49:32AM +0530, vamsi krishna wrote: > Hello Dan, > > > >You might want to take a look at GDB's generate-core-file command. > > > > Does gdb take care (loading) of core files generated on machine which > support ASLR (Address Space Layout Randomization)? , currently ASLR > is being shipped as exec-shield in redhat Why would it matter? -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 2006-05-24 20:06 ` vamsi krishna 2006-05-24 20:08 ` Daniel Jacobowitz @ 2006-05-24 20:31 ` H. Peter Anvin 2006-05-24 20:52 ` Eric Piel 2006-05-24 21:33 ` Greg KH 3 siblings, 0 replies; 11+ messages in thread From: H. Peter Anvin @ 2006-05-24 20:31 UTC (permalink / raw) To: linux-kernel Followup to: <3faf05680605241306t64f63225i4d25af3e92a9d9f9@mail.gmail.com> By author: "vamsi krishna" <vamsi.krishnak@gmail.com> In newsgroup: linux.dev.kernel > > Yes I can reproduce this , is there a bugzilla for kernel? (or should > we report this at the buzilla of the distribution?) > http://bugzilla.kernel.org/ -hpa ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 2006-05-24 20:06 ` vamsi krishna 2006-05-24 20:08 ` Daniel Jacobowitz 2006-05-24 20:31 ` H. Peter Anvin @ 2006-05-24 20:52 ` Eric Piel 2006-05-24 21:33 ` Greg KH 3 siblings, 0 replies; 11+ messages in thread From: Eric Piel @ 2006-05-24 20:52 UTC (permalink / raw) To: vamsi krishna; +Cc: linux-kernel, dan 05/24/2006 10:06 PM, vamsi krishna wrote/a écrit: >> >> Of course, the kernel shouldn't crash! It sounds like a bug. >> > > Yes I can reproduce this , is there a bugzilla for kernel? (or should > we report this at the buzilla of the distribution?) http://bugzilla.kernel.org/ Enjoy ;-) Eric ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 2006-05-24 20:06 ` vamsi krishna ` (2 preceding siblings ...) 2006-05-24 20:52 ` Eric Piel @ 2006-05-24 21:33 ` Greg KH 3 siblings, 0 replies; 11+ messages in thread From: Greg KH @ 2006-05-24 21:33 UTC (permalink / raw) To: vamsi krishna; +Cc: linux-kernel, dan On Thu, May 25, 2006 at 01:36:08AM +0530, vamsi krishna wrote: > > > >Of course, the kernel shouldn't crash! It sounds like a bug. > > > > Yes I can reproduce this , is there a bugzilla for kernel? (or should > we report this at the buzilla of the distribution?) For security issues such as this (ability for users to crash the kernel), security@kernel.org is the best address to send this to. thanks, greg k-h ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Program to convert core file to executable. 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-25 11:04 ` Marcel Holtmann 2 siblings, 0 replies; 11+ messages in thread From: Marcel Holtmann @ 2006-05-25 11:04 UTC (permalink / raw) To: vamsi krishna; +Cc: linux-kernel Hi Vamsi, > 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 > kerOn Wed, 2006-05-24 at 22:48 +0530, vamsi krishna wrote: > Hello All, > nel does not load this program, could it be a bug in the kernel code ? which kernel version do you use? What kind of Linux distribution do you use? What hardware architecture do you use? Regards Marcel ^ 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