修改现有的ELF对象

时间:2018-07-06 15:32:59

标签: binaryfiles elf readelf gelf

我是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 文件之间存在以下差异。

原始->部分标题的开头:3592(以字节为单位)

已更新->部分标题的开头:5936(以字节为单位)

大小也不同。 ll simple32

原始-> 7136

已更新-> 4792

1)。为什么会发生细分错误?如何使 helloELF 工作?

2)。为什么大小即使没有更新也有所不同?

0 个答案:

没有答案