OSDN Git Service

* WorkBackup: 2015/11/09 (Mon) AM 05:39
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 8 Nov 2015 20:40:17 +0000 (05:40 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 8 Nov 2015 20:40:17 +0000 (05:40 +0900)
libgoblin/drd64_libgoblin_elf.c
libgoblin/drd64_libgoblin_elf.h
libgoblin/drd64_libgoblin_elf64.c
libgoblin/drd64_libgoblin_syminfo.c
libgoblin/drd64_libgoblin_type.h

index 82fd688..dfa1f3f 100644 (file)
@@ -69,7 +69,7 @@ Byte *
 {
        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 ]);
@@ -93,6 +93,29 @@ Byte *
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 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,
index e26373b..8007cbe 100644 (file)
@@ -95,6 +95,9 @@ LIBGOBLIN_ELF_EXTERN
        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 );
 
index fe45ee0..f7533c9 100644 (file)
@@ -41,7 +41,7 @@ Comment:
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 int
-       LibGoblin_Elf64_SetSectionTable(
+       LibGoblin_Elf64_SetSectionInfo(
                LibGoblin_BinaryInfo    *p_binfo,
                int             i_analyzefid )
 {
@@ -54,7 +54,7 @@ int
        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;
@@ -125,7 +125,7 @@ int
        assert( NULL != pb_data );
 
        /* Read & Analyze Section Header */
-       LibGoblin_Elf64_SetSectionTable( p_binfo, i_analyzefid );
+       LibGoblin_Elf64_SetSectionInfo( p_binfo, i_analyzefid );
        
        return 0x00;
 }
index bab7822..b9df5f8 100644 (file)
@@ -37,6 +37,74 @@ Comment:
 #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;
+}
+
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
index 9f4c527..2afd8e3 100644 (file)
@@ -171,7 +171,7 @@ typedef struct      {
        char    *pstr_secname;
        QWord   qw_size;
        int             i_fid;
-} LibGoblin_SectionTable;
+} LibGoblin_SectionInfo;
 
 /*=====================================================================*/
 typedef struct {
@@ -193,7 +193,7 @@ 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;