Модификация существующих объектов ELF

Я новичок в модификации ELF, так что для начала я хочу посмотреть, хорошо ли работает RDWR. Я на самом деле не делаю никаких обновлений к оригиналу.

int main(int argc, char *argv[]) {   

size_t ehdrsz, phdrsz;
  int           fd;
  Elf           *e;
  Elf32_Ehdr    *ehdr; //to describe ELF header

if (argc != 2)
  errx(EX_USAGE,"input... ./%s filename\n",argv[0]);
if (elf_version(EV_CURRENT) == EV_NONE)
  errx(EX_SOFTWARE,"Invalid elf_version %s\n",elf_errmsg(-1));

if ((fd = open(argv[1], O_RDWR, 0777)) < 0)
  errx(EX_OSERR, "open %s\n",elf_errmsg(-1));
if ((e = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL)
  errx(EX_SOFTWARE,"elf_begin %s\n",elf_errmsg(-1));
if ((ehdr = elf32_getehdr(e)) == NULL)
  errx(EX_SOFTWARE,"elf32_newehdr %s\n",elf_errmsg(-1)); 

if ( elf_update (e, ELF_C_NULL ) < 0)
  errx ( EXIT_FAILURE , " elf_update ( NULL ) failed : %s.", elf_errmsg ( -1));
if (elf_update(e, ELF_C_WRITE ) < 0 )
  errx(EX_SOFTWARE,"elf32_update_2 %s\n",elf_errmsg(-1));
elf_end(e);
close(fd);
return 1;   
}

gcc modifyELF.c -lelf -m32 -o modifyELF

./modifyELF helloELF

И оказалось, что helloELF больше не работает.

./helloELF

Ошибка сегментации (ядро сброшено)

При проверке с помощью readelf -h я вижу следующие различия между оригинальным и обновленным файлом helloELF.

original -> Начало заголовков разделов: 3592 (байт в файл)

обновлено -> Начало заголовков разделов: 5936 (байт в файл)

размеры тоже разные. Все просто.

оригинал -> 7136

обновлено -> 4792

1). Почему происходит ошибка сегментации? Что нужно сделать, чтобы заставить себя работать?

2). почему размеры разные даже без обновлений?

0 ответов

Другие вопросы по тегам