{
Byte *pb_data;
LibGoblin_BinaryFile *p_bfile;
- LibGoblin_SectionTable *p_sectbl;
+ LibGoblin_SectionInfo *p_sectbl;
assert( NULL != p_binfo );
p_bfile = &(p_binfo->t_binfile[ i_analyzefid ]);
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
LIBGOBLIN_ELF_EXTERN
+LibGoblin_SectionInfo *
+ LibGoblin_Elf_GetSectionInfo(
+ LibGoblin_BinaryInfo *p_binfo,
+ int i_analyzefid,
+ Byte b_secid )
+{
+ LibGoblin_BinaryFile *p_bfile;
+ LibGoblin_SectionInfo *p_secinfo;
+
+ assert( NULL != p_binfo );
+ p_bfile = &(p_binfo->t_binfile[ i_analyzefid ]);
+
+ if( LIBGOBLIN_ELF_SEC_ID_DEFAULT_MAX <= b_secid ) { return NULL; }
+
+ p_secinfo = &(p_binfo->t_section[b_secid]);
+
+ return p_secinfo;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_ELF_EXTERN
int
LibGoblin_AnalyzeElf(
LibGoblin_BinaryInfo *p_binfo,
Byte *LibGoblin_Elf_GetSection(
QWord *qw_secsize, LibGoblin_BinaryInfo *p_bin, int i_analyzefid, Byte b_secid );
LIBGOBLIN_ELF_EXTERN
+ LibGoblin_SectionInfo *LibGoblin_Elf_GetSectionInfo(
+ LibGoblin_BinaryInfo *p_binfo, int i_analyzefid, Byte b_secid );
+LIBGOBLIN_ELF_EXTERN
int LibGoblin_AnalyzeElf(
LibGoblin_BinaryInfo *p_binfo, int i_analyzefid );
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
int
- LibGoblin_Elf64_SetSectionTable(
+ LibGoblin_Elf64_SetSectionInfo(
LibGoblin_BinaryInfo *p_binfo,
int i_analyzefid )
{
Elf64_Ehdr *p_elfhdr;
Elf64_Shdr *p_sechdr;
Elf64_Shdr *p_secstrhdr;
- LibGoblin_SectionTable *p_sectbl;
+ LibGoblin_SectionInfo *p_sectbl;
assert( NULL != p_binfo );
pb_data = p_binfo->t_binfile[i_analyzefid].pb_binary;
assert( NULL != pb_data );
/* Read & Analyze Section Header */
- LibGoblin_Elf64_SetSectionTable( p_binfo, i_analyzefid );
+ LibGoblin_Elf64_SetSectionInfo( p_binfo, i_analyzefid );
return 0x00;
}
#define DRD64_SRC_LIBGOBLIN_SYMINFO
#include"drd64_libgoblin.h"
+/*----------------------------------------------------------------------
+ Create (Read SymbolSection)
+ CreateWorkTable
+ FindSymAddr
+ FindSymName
+ UpdateSymInfo
+ AddSymInfo
+ Free
+----------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_SYMINFO_EXTERN
+int
+ LibGoblin_SymInfo_Create(
+ LibGoblin_BinaryInfo *p_binfo )
+{
+ Byte *pb_symtab;
+ QWord qw_size;
+ DWord dw_symbols;
+ Elf32_Shdr *p_shdr32;
+ Elf64_Shdr *p_shdr64;
+ LibGoblin_SectionInfo *p_secinfo;
+
+ assert( NULL != p_binfo );
+
+ // Check BinaryInfo & Get SymbolEntires
+ p_secinfo = LibGoblin_Elf_GetSectionInfo( p_binfo, 0, LIBGOBLIN_ELF_SEC_ID_SYMTAB );
+ if( NULL == p_secinfo ) {
+ return 0x01;
+ }
+
+ if( IsBinfoType_Elf64( p_binfo ) ) {
+ p_shdr64 = (Elf64_Shdr *)(p_secinfo->pb_sechdr);
+ if( 0 == p_shdr64->sh_entsize ) {
+ return -0x02;
+ }
+ dw_symbols = (DWord)p_shdr64->sh_size / (DWord)p_shdr64->sh_entsize;
+ pb_symtab = p_secinfo->pb_data;
+ }
+ else if( IsBinfoType_Elf32( p_binfo ) ) {
+
+ }
+
+ // Create WorkTable
+
+ // Sort WorkTable
+
+ // Create SymbolTable
+
+ // Update Symbol Table
+
+ // Create SymbolTable Index
+
+ return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_SYMINFO_EXTERN
+int
+ LibGoblin_SymInfo_Free(
+ LibGoblin_BinaryInfo *p_binfo )
+{
+ return 0x00;
+}
+
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
char *pstr_secname;
QWord qw_size;
int i_fid;
-} LibGoblin_SectionTable;
+} LibGoblin_SectionInfo;
/*=====================================================================*/
typedef struct {
/* Binary-Format Depending Info. (ELF)*/
//void *p_format;
- LibGoblin_SectionTable t_section[LIBGOBLIN_ELF_SEC_ID_MAX];
+ LibGoblin_SectionInfo t_section[LIBGOBLIN_ELF_SEC_ID_MAX];
} LibGoblin_BinaryInfo;