Elf64_Phdr *
ELF64_ProgramHeader_Search_inRange(
LibGoblin_BinaryInfo *p_binfo,
- Ptr ptr_address,
+ PtrValue ptr_value,
QWord qw_size )
{
int i_cnt;
p_pghrange = NULL;
qw_szrange = 0xffffffffffffffff;
for( i_cnt = 0; i_cnt < i_phdrnum; i_cnt++ ) {
- if(( p_proghdr->p_vaddr <= ptr_address )
- && ((ptr_address + qw_size) <= (p_proghdr->p_vaddr + p_proghdr->p_memsz) ) ) {
+ if(( p_proghdr->p_vaddr <= ptr_value )
+ && ((ptr_value + qw_size) <= (p_proghdr->p_vaddr + p_proghdr->p_memsz) ) ) {
p_pghrange = p_proghdr;
qw_szrange = p_proghdr->p_memsz;
}
QWord qw_tag;
QWord qw_value;
QWord qw_dynsize;
- Ptr ptr_addr;
- Ptr ptr_dynaddr;
+ //PtrValue ptr_value;
+ PtrValue ptr_dynvalue;
Elf64_Ehdr *p_elfhdr;
Elf64_Phdr *p_pghdr_dynamic;
Elf64_Phdr *p_pghdr_dynstr;
}
// Seearch & Setting .dynstr section info. ---
- ptr_dynaddr = 0x0000000000000000;
- qw_dynsize = 0;
- pb_dynamic = pb_data + p_pghdr_dynamic->p_offset;
+ ptr_dynvalue = 0x0000000000000000;
+ qw_dynsize = 0;
+ pb_dynamic = pb_data + p_pghdr_dynamic->p_offset;
do {
p_dyn64 = (Elf64_Dyn *)pb_dynamic;
qw_tag = (QWord)p_dyn64->d_tag;
qw_value = (QWord)p_dyn64->d_un.d_val;
- ptr_addr = (Ptr)p_dyn64->d_un.d_ptr;
+ //ptr_value = (PtrValue)p_dyn64->d_un.d_ptr;
/* 05 - Address of string table. */
- if( DT_STRTAB == qw_tag ) { ptr_dynaddr = qw_value; }
+ if( DT_STRTAB == qw_tag ) { ptr_dynvalue = qw_value; }
/* 10 - Size of string table. */
else if( DT_STRSZ == qw_tag ) { qw_dynsize = qw_value; }
/* 20 - Type of relocation used for PLT. */
}while( DT_NULL != qw_tag );
p_sec_dynstr = NULL;
- if(( 0 < ptr_dynaddr ) && ( 0 < qw_dynsize )) {
+ if(( 0 < ptr_dynvalue ) && ( 0 < qw_dynsize )) {
// Search ProgHdr in .dynstr section ---
- p_pghdr_dynstr = ELF64_ProgramHeader_Search_inRange( p_binfo, ptr_dynaddr, qw_dynsize );
+ p_pghdr_dynstr = ELF64_ProgramHeader_Search_inRange( p_binfo, ptr_dynvalue, qw_dynsize );
assert( NULL != p_pghdr_dynstr );
p_sec_dynstr = LibGoblin_Section_GetSectionInfo( p_pginfo, LIBGOBLIN_SECTION_ID_DYNSTR );
- p_sec_dynstr->qw_size = qw_dynsize;
- p_sec_dynstr->ptr_address = ptr_dynaddr;
- p_sec_dynstr->pb_data = pb_data
- + (ptr_dynaddr - p_pghdr_dynstr->p_vaddr)
+ p_sec_dynstr->qw_size = qw_dynsize;
+ p_sec_dynstr->ptr_addr.value = ptr_dynvalue;
+ p_sec_dynstr->pb_data = pb_data
+ + (ptr_dynvalue - p_pghdr_dynstr->p_vaddr)
+ p_pghdr_dynstr->p_offset;
p_sec_dynstr->pb_sechdr = NULL;
p_sec_dynstr->i_fid = -0x01; // Temporary.
p_secnow->i_fid = -0x01; // Temporary.
// Calc. Offset
- if(( 0x00000000 != p_secnow->ptr_address ) && ( 0 < p_secnow->qw_size )) {
+ if(( 0x00000000 != p_secnow->ptr_addr.value ) && ( 0 < p_secnow->qw_size )) {
p_bfile = BinaryFile_GetBinaryFile( p_binfo->i_binfile );
assert( NULL != p_bfile );
p_pghdr = ELF64_ProgramHeader_Search_inRange(
- p_binfo, p_secnow->ptr_address, p_secnow->qw_size );
+ p_binfo, p_secnow->ptr_addr.value, p_secnow->qw_size );
if( NULL != p_pghdr ) {
p_secnow->pb_data = p_bfile->pb_binary
- + (p_secnow->ptr_address - p_pghdr->p_vaddr)
+ + (p_secnow->ptr_addr.value - p_pghdr->p_vaddr)
+ p_pghdr->p_offset;
}
}
LibGoblin_ProgramInfo *p_pginfo,
LibGoblin_BinaryInfo *p_binfo,
DWord dw_secid,
- Ptr ptr_addr )
+ PtrValue ptr_value )
{
Elf64_Phdr *p_pghdr;
LibGoblin_SectionInfo *p_secnow;
p_secnow = LibGoblin_Section_GetSectionInfo( p_pginfo, dw_secid );
if( NULL == p_secnow->pb_sechdr ) {
- p_secnow->ptr_address = ptr_addr;
- p_secnow->i_fid = -0x01; // Temporary.
+ p_secnow->ptr_addr.value = ptr_value;
+ p_secnow->i_fid = -0x01; // Temporary.
// Calc. Offset
- if(( NULL != p_secnow->ptr_address ) && ( 0 < p_secnow->qw_size )) {
+ if(( 0x00000000 != p_secnow->ptr_addr.value ) && ( 0 < p_secnow->qw_size )) {
p_bfile = BinaryFile_GetBinaryFile( p_binfo->i_binfile );
assert( NULL != p_bfile );
p_pghdr = ELF64_ProgramHeader_Search_inRange(
- p_binfo, p_secnow->ptr_address, p_secnow->qw_size );
+ p_binfo, p_secnow->ptr_addr.value, p_secnow->qw_size );
if( NULL != p_pghdr ) {
p_secnow->pb_data = p_bfile->pb_binary
- + (p_secnow->ptr_address - p_pghdr->p_vaddr)
+ + (p_secnow->ptr_addr.value - p_pghdr->p_vaddr)
+ p_pghdr->p_offset;
}
}
DWord dw_secid;
QWord qw_tag;
QWord qw_value;
- Ptr ptr_addr;
+ PtrValue ptr_value;
Elf64_Dyn *p_dyn64;
Elf32_Dyn *p_dyn32;
LibGoblin_BinaryInfo *p_bintmp;
qw_tag = (QWord)p_dyn64->d_tag;
qw_value = (QWord)p_dyn64->d_un.d_val;
- ptr_addr = (Ptr)p_dyn64->d_un.d_ptr;
+ ptr_value = (PtrValue)p_dyn64->d_un.d_ptr;
} else {
p_dyn32 = (Elf32_Dyn *)pb_data;
qw_tag = (QWord)p_dyn32->d_tag;
qw_value = (QWord)p_dyn32->d_un.d_val;
- ptr_addr = (Ptr)p_dyn32->d_un.d_ptr;
+ ptr_value = (PtrValue)p_dyn32->d_un.d_ptr;
}
switch( qw_tag ) {
{ dw_secid = LIBGOBLIN_SECTION_ID_RELA_PLT; }
else { dw_secid = LIBGOBLIN_SECTION_ID_REL_PLT; }
- ELF64_Dynamic_SetSectionAddress( p_pginfo, p_binfo, dw_secid, ptr_addr );
+ ELF64_Dynamic_SetSectionAddress( p_pginfo, p_binfo, dw_secid, ptr_value );
break;
/* 03 - Processor-dependent address. */
case DT_PLTGOT:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GOT_PLT, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GOT_PLT, ptr_value );
break;
/* 06 - Address of symbol table. */
case DT_SYMTAB:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_DYNSYM, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_DYNSYM, ptr_value );
break;
/* 11 - Size of each symbol table entry. */
/* 04 - Address of symbol hash table. */
case DT_HASH:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_HASH, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_HASH, ptr_value );
break;
/* 12 - Address of initialization function. */
case DT_INIT:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_TEXT_INIT, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_TEXT_INIT, ptr_value );
break;
/* 13 - Address of finalization function. */
case DT_FINI:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_TEXT_FINI, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_TEXT_FINI, ptr_value );
break;
/* 07 - Address of ElfNN_Rela relocations. */
case DT_RELA:
- //ELF64_Dynamic_SetSectionAddress( p_pginfo, LIBGOBLIN_SECTION_ID_, ptr_addr );
+ //ELF64_Dynamic_SetSectionAddress( p_pginfo, LIBGOBLIN_SECTION_ID_, ptr_value );
break;
/* 08 - Total size of ElfNN_Rela relocations. */
/* 0x6ffffff0 - Address of versym section. */
case DT_VERSYM:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GNU_VERSION, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GNU_VERSION, ptr_value );
break;
/* 0x6ffffffe - Address of verneed section. */
case DT_VERNEED:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GNU_VERSION_R, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GNU_VERSION_R, ptr_value );
break;
/* 0x6ffffef5 - GNU-style hash table */
case DT_GNU_HASH:
ELF64_Dynamic_SetSectionAddress(
- p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GNU_HASH, ptr_addr );
+ p_pginfo, p_binfo, LIBGOBLIN_SECTION_ID_GNU_HASH, ptr_value );
// XXX
break;
/* 0x6ffffff9 - number of RELATIVE relocations */
assert( 0 == p_objinfo->i_id );
- p_objinfo->addr.ptr_addr = 0x0000000000000000;
- p_objinfo->addr.qw_size = 0xffffffffffffffff;
+ p_objinfo->addr.ptr_addr.value = 0x0000000000000000;
+ p_objinfo->addr.qw_size = 0xffffffffffffffff;
p_pginfo->objinfo.i_topid = p_objinfo->i_id;
LibGoblin_ObjectInfo *
ObjectInfo_InsetObject(
LibGoblin_ProgramInfo *p_pginfo,
- Ptr ptr_address,
+ PtrValue ptr_value,
QWord qw_size,
LibGoblin_ObjectInfo *p_parent,
Byte b_mode )
p_objprev = NULL;
do {
- if(( p_objnow->addr.ptr_addr <= ptr_address )
- && ( (ptr_address + qw_size) <= (p_objnow->addr.ptr_addr + p_objnow->addr.qw_size) )) {
+ if(( p_objnow->addr.ptr_addr.value <= ptr_value )
+ && ( (ptr_value + qw_size) <= (p_objnow->addr.ptr_addr.value + p_objnow->addr.qw_size) )) {
if( p_objnow->addr.qw_size <= p_objover->addr.qw_size ) { p_objover = p_objnow; }
}
- if( ptr_address == p_objnow->addr.ptr_addr ) {
+ if( ptr_value == p_objnow->addr.ptr_addr.value ) {
if( qw_size > p_objnow->addr.qw_size ) { break; }
}
- else if( ptr_address < p_objnow->addr.ptr_addr ) { break; }
+ else if( ptr_value < p_objnow->addr.ptr_addr.value ) { break; }
p_objprev = p_objnow;
p_objnow = ((NO_OBJ != p_objnow->addrlink.i_next_id)
? OBJINFO( p_pginfo, p_parent->grplink.i_child_topid ) : NULL );
p_objprev = NULL;
do {
- if( ptr_address == p_objnow->addr.ptr_addr ) {
+ if( ptr_value == p_objnow->addr.ptr_addr.value ) {
if( qw_size > p_objnow->addr.qw_size ) { break; }
}
- else if( ptr_address < p_objnow->addr.ptr_addr ) { break; }
+ else if( ptr_value < p_objnow->addr.ptr_addr.value ) { break; }
p_objprev = p_objnow;
p_objnow = ((NO_OBJ != p_objnow->grplink.i_next_id)
if( NULL != p_objnow ) { p_objnow->grplink.i_prev_id = p_objinfo->i_id; }
goto_ObjectInfo_InsetObject_set:
- p_objinfo->addr.ptr_addr = ptr_address;
- p_objinfo->addr.qw_size = qw_size;
+ p_objinfo->addr.ptr_addr.value = ptr_value;
+ p_objinfo->addr.qw_size = qw_size;
goto_ObjectInfo_InsetObject_post:
return p_objinfo;
ObjectInfo_AllocWorkObject(
LibGoblin_ProgramInfo *p_pginfo,
LibGoblin_ObjectInfo *p_objtop,
- Ptr ptr_address )
+ Ptr ptr_addr )
{
LibGoblin_ObjectInfo *p_objinfo;