dbghelp: Simplify the way we find the debug header.
This commit is contained in:
parent
ec8393d3d5
commit
08712bc3a9
|
@ -1029,32 +1029,6 @@ BOOL elf_fetch_file_info(const char* name, DWORD* base,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* is_dt_flag_valid
|
|
||||||
* returns true iff the section tag is valid
|
|
||||||
*/
|
|
||||||
static unsigned is_dt_flag_valid(unsigned d_tag)
|
|
||||||
{
|
|
||||||
#ifndef DT_PROCNUM
|
|
||||||
#define DT_PROCNUM 0
|
|
||||||
#endif
|
|
||||||
#ifndef DT_EXTRANUM
|
|
||||||
#define DT_EXTRANUM 0
|
|
||||||
#endif
|
|
||||||
#ifndef DT_GNU_HASH
|
|
||||||
#define DT_GNU_HASH 0x6ffffef5
|
|
||||||
#endif
|
|
||||||
return (d_tag >= 0 && d_tag < DT_NUM + DT_PROCNUM + DT_EXTRANUM)
|
|
||||||
|| (d_tag == DT_GNU_HASH)
|
|
||||||
#if defined(DT_LOOS) && defined(DT_HIOS)
|
|
||||||
|| (d_tag >= DT_LOOS && d_tag < DT_HIOS)
|
|
||||||
#endif
|
|
||||||
#if defined(DT_LOPROC) && defined(DT_HIPROC)
|
|
||||||
|| (d_tag >= DT_LOPROC && d_tag < DT_HIPROC)
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* elf_load_file
|
* elf_load_file
|
||||||
*
|
*
|
||||||
|
@ -1107,12 +1081,16 @@ static BOOL elf_load_file(struct process* pcs, const char* filename,
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (!ReadProcessMemory(pcs->handle, ptr, &dyn, sizeof(dyn), &len) ||
|
if (!ReadProcessMemory(pcs->handle, ptr, &dyn, sizeof(dyn), &len) ||
|
||||||
len != sizeof(dyn) || !is_dt_flag_valid(dyn.d_tag))
|
len != sizeof(dyn))
|
||||||
dyn.d_tag = DT_NULL;
|
goto leave;
|
||||||
ptr += sizeof(dyn);
|
if (dyn.d_tag == DT_DEBUG)
|
||||||
} while (dyn.d_tag != DT_DEBUG && dyn.d_tag != DT_NULL);
|
{
|
||||||
if (dyn.d_tag == DT_NULL) goto leave;
|
|
||||||
elf_info->dbg_hdr_addr = dyn.d_un.d_ptr;
|
elf_info->dbg_hdr_addr = dyn.d_un.d_ptr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ptr += sizeof(dyn);
|
||||||
|
} while (dyn.d_tag != DT_NULL);
|
||||||
|
if (dyn.d_tag == DT_NULL) goto leave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elf_unmap_section(&fmap, fmap.elfhdr.e_shstrndx);
|
elf_unmap_section(&fmap, fmap.elfhdr.e_shstrndx);
|
||||||
|
|
Loading…
Reference in New Issue