我是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)。为什么大小即使没有更新也有所不同?