ldd: fail when no dynamic section is found
This commit is contained in:
parent
0120299822
commit
7742236366
|
@ -85,6 +85,7 @@ static int ELFFUNC(phdr)(char const * filename, FILE * fp, ELFTYPE(Ehdr) * ehdr,
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
size_t cnt;
|
||||||
ELFTYPE(Dyn) * dyn;
|
ELFTYPE(Dyn) * dyn;
|
||||||
|
|
||||||
if(fread(phdr, sizeof(*phdr), ehdr->e_phnum, fp) != ehdr->e_phnum)
|
if(fread(phdr, sizeof(*phdr), ehdr->e_phnum, fp) != ehdr->e_phnum)
|
||||||
|
@ -95,11 +96,12 @@ static int ELFFUNC(phdr)(char const * filename, FILE * fp, ELFTYPE(Ehdr) * ehdr,
|
||||||
ret = -_error(filename, "Corrupted ELF file", 1);
|
ret = -_error(filename, "Corrupted ELF file", 1);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
printf("%s:\n", filename);
|
for(i = 0, cnt = 0; i < ehdr->e_phnum; i++)
|
||||||
for(i = 0; i < ehdr->e_phnum; i++)
|
|
||||||
{
|
{
|
||||||
if(phdr[i].p_type != PT_DYNAMIC)
|
if(phdr[i].p_type != PT_DYNAMIC)
|
||||||
continue;
|
continue;
|
||||||
|
if(cnt++ == 0)
|
||||||
|
printf("%s:\n", filename);
|
||||||
if(fseek(fp, phdr[i].p_offset, SEEK_SET) != 0)
|
if(fseek(fp, phdr[i].p_offset, SEEK_SET) != 0)
|
||||||
{
|
{
|
||||||
ret |= -_error(filename, strerror(errno), 1);
|
ret |= -_error(filename, strerror(errno), 1);
|
||||||
|
@ -123,6 +125,8 @@ static int ELFFUNC(phdr)(char const * filename, FILE * fp, ELFTYPE(Ehdr) * ehdr,
|
||||||
}
|
}
|
||||||
free(dyn);
|
free(dyn);
|
||||||
}
|
}
|
||||||
|
if(cnt == 0)
|
||||||
|
ret |= -_error(filename, "Not a dynamic ELF object", 1);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user