Ponlo aqui a ver si interesa...
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: avesudra en 10 Marzo 2013, 15:02 PM
Deberían ponerlo como chincheta, dado que mucha gente lo usa.
#include <elf.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
void hexaDump(const void *ptr, size_t mem_sz)
{
uint8_t *u8_ptr = ptr;
size_t i=0;
for(; i<mem_sz-1; i++)
{
printf("%x, ", u8_ptr[i]);
}
printf("%x", u8_ptr[++i]);
}
int main(int argc, char **argv)
{
Elf32_Ehdr elf_hdr;
Elf32_Shdr *elf_shdr;
Elf32_Shdr shStrTab;
char *shStrTabData, *sectionData;
size_t i;
if(argc!=3)
{
printf("Usage: %s <file> <section>\n", argv[0]);
return 0;
}
FILE *fileToDump = fopen(argv[1], "r");
if(!fileToDump)
{
printf("Could not open the file, please check the path\n");
return 1;
}
fread(&elf_hdr, sizeof(Elf32_Ehdr), 1, fileToDump);
fseek(fileToDump, elf_hdr.e_shoff + elf_hdr.e_shentsize*elf_hdr.e_shstrndx, SEEK_SET);
fread(&shStrTab, sizeof(Elf32_Shdr), 1, fileToDump);
fseek(fileToDump, shStrTab.sh_offset, SEEK_SET);
shStrTabData = malloc(shStrTab.sh_size);
fread(shStrTabData, 1, shStrTab.sh_size, fileToDump);
elf_shdr = malloc(elf_hdr.e_shnum*sizeof(Elf32_Shdr));
fseek(fileToDump, elf_hdr.e_shoff, SEEK_SET);
fread(elf_shdr, sizeof(Elf32_Shdr), elf_hdr.e_shnum, fileToDump);
_Bool foundFlag=false;
for(i=0; i<elf_hdr.e_shnum; i++)
{
if(!strcmp(shStrTabData+elf_shdr[i].sh_name, argv[2]))
{
foundFlag = true;
break;
}
}
if(!foundFlag)
{
printf("Could not find the requested section\n");
return 2;
}
sectionData = malloc(elf_shdr[i].sh_size);
fseek(fileToDump, elf_shdr[i].sh_offset, SEEK_SET);
fread(sectionData, 1, elf_shdr[i].sh_size, fileToDump);
printf("char hexdump[] = { ");
hexaDump(sectionData, elf_shdr[i].sh_size);
printf(" }\n\n");
free(shStrTabData);
free(elf_shdr);
free(sectionData);
fclose(fileToDump);
return 0;
}