OSDN Git Service

* CreateFile: 2015/11/15(Sun) 21:15 drd64_libgoblin_addrinfo.[ch]
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 15 Nov 2015 12:15:25 +0000 (21:15 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 15 Nov 2015 12:15:25 +0000 (21:15 +0900)
libgoblin/Makefile
libgoblin/drd64_libgoblin.h
libgoblin/drd64_libgoblin_addrinfo.c [new file with mode: 0644]
libgoblin/drd64_libgoblin_addrinfo.h [new file with mode: 0644]
libgoblin/drd64_libgoblin_symwork.c
libgoblin/drd64_libgoblin_type.h

index 4077a47..3a1ec86 100644 (file)
@@ -53,6 +53,7 @@ OBJS = drd64_libgoblin_system.o \
                drd64_libgoblin_analyze.o \
                drd64_libgoblin_readbin.o \
                drd64_libgoblin_symwork.o \
+               drd64_libgoblin_addrinfo.o \
                drd64_libgoblin_elf.o \
                drd64_libgoblin_elf64.o \
                drd64_libgoblin_elf32.o \
@@ -126,6 +127,9 @@ drd64_libgoblin_readbin.o: drd64_libgoblin_readbin.c $(HEADER)
 drd64_libgoblin_symwork.o: drd64_libgoblin_symwork.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_symwork.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_symwork.c
+drd64_libgoblin_addrinfo.o: drd64_libgoblin_addrinfo.c $(HEADER)
+       $(CC) -c -o drd64_libgoblin_addrinfo.o $(FLAGS_DEBUG) \
+                               drd64_libgoblin_addrinfo.c
 
 drd64_libgoblin_elf.o: drd64_libgoblin_elf.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_elf.o $(FLAGS_DEBUG) \
index 16a5b2d..ceac41c 100644 (file)
@@ -72,6 +72,7 @@ Comment:
 #include"drd64_libgoblin_analyze.h"
 #include"drd64_libgoblin_readbin.h"
 #include"drd64_libgoblin_symwork.h"
+#include"drd64_libgoblin_addrinfo.h"
 #include"drd64_libgoblin_elf.h"
 #include"drd64_libgoblin_elf64.h"
 #include"drd64_libgoblin_elf32.h"
diff --git a/libgoblin/drd64_libgoblin_addrinfo.c b/libgoblin/drd64_libgoblin_addrinfo.c
new file mode 100644 (file)
index 0000000..180c14a
--- /dev/null
@@ -0,0 +1,97 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#define        DRD64_SRC_LIBGOBLIN_ADDRINFO
+#include"drd64_libgoblin.h"
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_ADDRINFO_EXTERN
+int
+       LibGoblin_AddrInfo_AllocAddrInfo(
+                       LibGoblin_BinaryInfo    *p_binfo,
+                       DWord   dw_initsymbols )
+{
+       DWord   dw_allocs;
+       LibGoblin_AddressInfo   *p_addr;
+
+       assert( NULL != p_binfo );
+
+       if( NULL != p_binfo->p_addrinfo )       {
+               return 0x01;
+       }
+       
+       dw_allocs       = ((dw_initsymbols / LIBGOBLIN_ADDRINFO_ALLOC_UNITS) + 2)
+                                                                                       * LIBGOBLIN_ADDRINFO_ALLOC_UNITS;
+       p_addr  = (LibGoblin_AddressInfo *)malloc(
+                                                               dw_allocs * sizeof( LibGoblin_AddressInfo ) );
+       if( NULL == p_addr )    {
+               return -0x02;
+       }
+       memset( p_addr, 0x00, dw_allocs * sizeof( LibGoblin_AddressInfo ) );
+       
+       p_binfo->p_addrinfo                     = p_addr;
+       p_binfo->dw_alloc_addrinfo      = dw_allocs;
+       p_binfo->dw_max_addrinfo        = 0;
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_ADDRINFO_EXTERN
+int
+       LibGoblin_AddrInfo_FreeAddrInfo(
+                       LibGoblin_BinaryInfo    *p_binfo )
+{
+       assert( NULL != p_binfo );
+
+       if( NULL == p_binfo->p_addrinfo )       {
+               return -0x01;
+       }
+
+       free( p_binfo->p_addrinfo );
+       p_binfo->p_addrinfo     = NULL;
+
+       p_binfo->dw_alloc_addrinfo      = 0;
+       p_binfo->dw_max_addrinfo        = 0;
+
+       return 0x00;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libgoblin/drd64_libgoblin_addrinfo.h b/libgoblin/drd64_libgoblin_addrinfo.h
new file mode 100644 (file)
index 0000000..258141d
--- /dev/null
@@ -0,0 +1,63 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.h
+Function: Header 
+Comment: 
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_LIBGOBLIN_ADDRINFO
+#define DRD64_HEADER_LIBGOBLIN_ADDRINFO
+
+#ifdef DRD64_SRC_LIBGOBLIN_ADDRINFO
+       #define LIBGOBLIN_ADDRINFO_EXTERN
+#else
+       #define LIBGOBLIN_ADDRINFO_EXTERN       extern
+#endif
+
+#if defined DRD64_SRC_LIBGOBLIN_ADDRINFO
+       #define LIBGOBLIN_ADDRINFO_INTERNALFUNC
+#elif defined DRD64_SRC_TEST_LIBGOBLIN_ADDRINFO
+       #define LIBGOBLIN_ADDRINFO_INTERNALFUNC
+#endif
+
+#define        LIBGOBLIN_ADDRINFO_ALLOC_UNITS  256
+
+
+LIBGOBLIN_ADDRINFO_EXTERN
+       int LibGoblin_AddrInfo_AllocAddrInfo( LibGoblin_BinaryInfo *p_binfo, DWord dw_initsymbols );
+LIBGOBLIN_ADDRINFO_EXTERN
+       int LibGoblin_AddrInfo_FreeAddrInfo( LibGoblin_BinaryInfo *p_binfo );
+
+
+#endif /* DRD64_HEADER_XXX */
+
+/* EOF of drd64_.h ----------------------------------- */
index e8a56bc..81049bf 100644 (file)
@@ -184,8 +184,11 @@ int
                if( NULL == p_symtmp )  {
                        return -0x01;
                }
+               memset( (p_symtmp + p_symworktbl->dw_alloc_symwork), 0x00,
+                                       LIBGOBLIN_SYMWORKINFO_UNITS * sizeof( LibGoblin_SymbolWorkInfo ) );
 
                p_symwork       = p_symtmp;
+               p_symworktbl->dw_alloc_symwork  += LIBGOBLIN_SYMWORKINFO_UNITS;
        }
        
        p_symwork       += p_symworktbl->dw_max_symwork;
index c6cbdb4..b19c9f1 100644 (file)
@@ -132,6 +132,8 @@ typedef struct      {
 
        /* Address Table Info. */
        LibGoblin_AddressInfo   *p_addrinfo;
+       DWord           dw_alloc_addrinfo;
+       DWord           dw_max_addrinfo;
 
        /* Exec. File Info. */
        LibGoblin_BinaryFile    t_binfile[3];