OSDN Git Service

* CreateFile: drd64_libgoblin_debug_syminfo.[ch]
[drdeamon64/drdeamon64.git] / libgoblin / drd64_libgoblin_type.h
1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
2
3                          D r . D e a m o n  6 4
4                         for INTEL64(R), AMD64(R)
5         
6    Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
10
11  1. Redistributions of source code must retain the above copyright notice,
12     this list of conditions and the following disclaimer.
13  2. Redistributions in binary form must reproduce the above copyright
14     notice, this list of conditions and the following disclaimer in the
15     documentation and/or other materials provided with the distribution.
16
17 THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
30
31 /* File Info -----------------------------------------------------------
32 File: drd64_.h
33 Function: Header 
34 Comment: 
35 ----------------------------------------------------------------------*/
36
37 #ifndef DRD64_HEADER_LIBGOBLIN_TYPE
38 #define DRD64_HEADER_LIBGOBLIN_TYPE
39
40 #include"drd64_libgoblin.h"
41
42
43 #define LIBGOBLIN_BINFO_TYPE_NONE               0x00
44 #define LIBGOBLIN_BINFO_TYPE_ELF                0x01
45 #define LIBGOBLIN_BINFO_TYPE_ELF64              0x64
46 #define LIBGOBLIN_BINFO_TYPE_ELF32              0x32
47
48 #define isElf64(n) \
49         ((LIBGOBLIN_BINFO_TYPE_ELF64==((n)->b_type)) ? 0x01 : 0x00)
50 #define isElf32(n) \
51         ((LIBGOBLIN_BINFO_TYPE_ELF32==((n)->b_type)) ? 0x01 : 0x00)
52 #define IsBinfoType_Elf64(n) \
53         ((LIBGOBLIN_BINFO_TYPE_ELF64==((n)->b_type)) ? 0x01 : 0x00)
54 #define IsBinfoType_Elf32(n) \
55         ((LIBGOBLIN_BINFO_TYPE_ELF32==((n)->b_type)) ? 0x01 : 0x00)
56
57 #define LIBGOBLIN_BINFO_ENDIAN_NONE             0x00
58 #define LIBGOBLIN_BINFO_ENDIAN_LITTLE   0x01
59 #define LIBGOBLIN_BINFO_ENDIAN_BIG              0x02
60
61 #define LIBGOBLIN_BINFO_SECTION_TEXT    0x00
62 #define LIBGOBLIN_BINFO_SECTION_DATA    0x01
63 #define LIBGOBLIN_BINFO_SECTION_BSS             0x02
64
65 #define LIBGOBLIN_BINFO_PHASE_INIT              0x00
66 #define LIBGOBLIN_BINFO_PHASE_ALLOCED   0x01
67 #define LIBGOBLIN_BINFO_PHASE_BINREAD   0x02
68 #define LIBGOBLIN_BINFO_PHASE_ANALYZED  0x03
69
70 #define LIBGOBLIN_BINFO_MAXFILES                3
71 #define LIBGOBLIN_BINFO_FILE_EXEC               0
72 #define LIBGOBLIN_BINFO_FILE_CORE               1
73 #define LIBGOBLIN_BINFO_FILE_DEBUG              2
74
75 #define LIBGOBLIN_BINFO_FILE_MMAP               (DWord)0x01
76 #define LIBGOBLIN_BINFO_FILE_EXTALLOC   (DWord)0x02
77 #define LIBGOBLIN_BINFO_FILE_INTALLOC   (DWord)0x04
78
79 #define LIBGOBLIN_ELF_SEC_ID_TEXT                       0x00
80 #define LIBGOBLIN_ELF_SEC_ID_TEXT_INIT          0x01
81 #define LIBGOBLIN_ELF_SEC_ID_TEXT_FINI          0x02
82 #define LIBGOBLIN_ELF_SEC_ID_DATA                       0x03
83 #define LIBGOBLIN_ELF_SEC_ID_BSS                        0x04
84 #define LIBGOBLIN_ELF_SEC_ID_GOT                        0x05
85 #define LIBGOBLIN_ELF_SEC_ID_GOT_PLT            0x06
86 #define LIBGOBLIN_ELF_SEC_ID_PLT                        0x07
87 #define LIBGOBLIN_ELF_SEC_ID_REL_PLT            0x08
88 #define LIBGOBLIN_ELF_SEC_ID_RELA_PLT           0x09
89 #define LIBGOBLIN_ELF_SEC_ID_SHSTRTAB           0x0a
90 #define LIBGOBLIN_ELF_SEC_ID_STRTAB                     0x0b
91 #define LIBGOBLIN_ELF_SEC_ID_SYMTAB                     0x0c
92 #define LIBGOBLIN_ELF_SEC_ID_DTORS                      0x0d
93 #define LIBGOBLIN_ELF_SEC_ID_CTORS                      0x0e
94 #define LIBGOBLIN_ELF_SEC_ID_DYNAMIC            0x0f
95 #define LIBGOBLIN_ELF_SEC_ID_DYNSTR                     0x10
96 #define LIBGOBLIN_ELF_SEC_ID_DYNSYM                     0x11
97 #define LIBGOBLIN_ELF_SEC_ID_EH_FRAME           0x12
98 #define LIBGOBLIN_ELF_SEC_ID_EH_FRAME_HDR       0x13
99 #define LIBGOBLIN_ELF_SEC_ID_COMMENT            0x14
100 #define LIBGOBLIN_ELF_SEC_ID_GNU_VERSION        0x15
101 #define LIBGOBLIN_ELF_SEC_ID_GNU_VERSION_R      0x16
102 #define LIBGOBLIN_ELF_SEC_ID_RODATA                     0x17
103 #define LIBGOBLIN_ELF_SEC_ID_NOTE_ABI_TAG       0x18
104 #define LIBGOBLIN_ELF_SEC_ID_HASH                       0x19
105 #define LIBGOBLIN_ELF_SEC_ID_INTERP                     0x1a
106 #define LIBGOBLIN_ELF_SEC_ID_JCR                        0x1b
107 #define LIBGOBLIN_ELF_SEC_ID_DEBUG_ABBREV       0x1c
108 #define LIBGOBLIN_ELF_SEC_ID_DEBUG_INFO         0x1d
109 #define LIBGOBLIN_ELF_SEC_ID_DEBUG_LINE         0x1e
110 #define LIBGOBLIN_ELF_SEC_ID_DEBUG_ARANGES      0x1f
111 #define LIBGOBLIN_ELF_SEC_ID_DEBUG_FRAME        0x20
112 #define LIBGOBLIN_ELF_SEC_ID_DEBUG_LOC          0x21
113 #define LIBGOBLIN_ELF_SEC_ID_DEBUG_PUBNAMES     0x22
114
115 #define LIBGOBLIN_ELF_SEC_ID_DEFAULT_MAX        0x22
116 #define LIBGOBLIN_ELF_SEC_ID_MAX                        0x3f
117
118 #define LIBGOBLIN_ELF_SEC_STR_TEXT                              ".text"
119 #define LIBGOBLIN_ELF_SEC_STR_TEXT_INIT                 ".init"
120 #define LIBGOBLIN_ELF_SEC_STR_TEXT_FINI                 ".fini"
121 #define LIBGOBLIN_ELF_SEC_STR_DATA                              ".data"
122 #define LIBGOBLIN_ELF_SEC_STR_BSS                               ".bss"
123 #define LIBGOBLIN_ELF_SEC_STR_GOT                               ".got"
124 #define LIBGOBLIN_ELF_SEC_STR_GOT_PLT                   ".got.plt"
125 #define LIBGOBLIN_ELF_SEC_STR_PLT                               ".plt"
126 #define LIBGOBLIN_ELF_SEC_STR_REL_PLT                   ".rel.plt"
127 #define LIBGOBLIN_ELF_SEC_STR_RELA_PLT                  ".rela.plt"
128 #define LIBGOBLIN_ELF_SEC_STR_SHSTRTAB                  ".shstrtab"
129 #define LIBGOBLIN_ELF_SEC_STR_STRTAB                    ".strtab"
130 #define LIBGOBLIN_ELF_SEC_STR_SYMTAB                    ".symtab"
131 #define LIBGOBLIN_ELF_SEC_STR_DTORS                             ".dtors"
132 #define LIBGOBLIN_ELF_SEC_STR_CTORS                             ".ctors"
133 #define LIBGOBLIN_ELF_SEC_STR_DYNAMIC                   ".dynamic"
134 #define LIBGOBLIN_ELF_SEC_STR_DYNSTR                    ".dynstr"
135 #define LIBGOBLIN_ELF_SEC_STR_DYNSYM                    ".dynsym"
136 #define LIBGOBLIN_ELF_SEC_STR_EH_FRAME                  ".eh_frame"
137 #define LIBGOBLIN_ELF_SEC_STR_EH_FRAME_HDR              ".eh_frame_hdr"
138 #define LIBGOBLIN_ELF_SEC_STR_COMMENT                   ".comment"
139 #define LIBGOBLIN_ELF_SEC_STR_GNU_VERSION               ".gnu.version"
140 #define LIBGOBLIN_ELF_SEC_STR_GNU_VERSION_R             ".gnu.version_r"
141 #define LIBGOBLIN_ELF_SEC_STR_RODATA                    ".rodata"
142 #define LIBGOBLIN_ELF_SEC_STR_NOTE_ABI_TAG              ".note.ABI-tag"
143 #define LIBGOBLIN_ELF_SEC_STR_HASH                              ".hash"
144 #define LIBGOBLIN_ELF_SEC_STR_INTERP                    ".interp"
145 #define LIBGOBLIN_ELF_SEC_STR_JCR                               ".jcr"
146 #define LIBGOBLIN_ELF_SEC_STR_DEBUG_ABBREV              ".debug_abbrev"
147 #define LIBGOBLIN_ELF_SEC_STR_DEBUG_INFO                ".debug_info"
148 #define LIBGOBLIN_ELF_SEC_STR_DEBUG_LINE                ".debug_line"
149 #define LIBGOBLIN_ELF_SEC_STR_DEBUG_ARANGES             ".debug_aranges"
150 #define LIBGOBLIN_ELF_SEC_STR_DEBUG_FRAME               ".debug_frame"
151 #define LIBGOBLIN_ELF_SEC_STR_DEBUG_LOC                 ".debug_loc"
152 #define LIBGOBLIN_ELF_SEC_STR_DEBUG_PUBNAMES    ".debug_pubnames"
153
154
155 /*=====================================================================*/
156 typedef struct  {
157         Byte    *pb_sechdr;
158         Byte    *pb_data;
159         char    *pstr_secname;
160         QWord   qw_size;
161         int             i_fid;
162 } LibGoblin_SectionInfo;
163
164 /*=====================================================================*/
165 typedef struct  {
166         /* Binary-File Info. */
167         int                     i_fd;
168         DWord           dw_flag;
169         char            str_filepath[DRD64_MAX_PATH];
170         LibFileType_FileType    t_ftype;
171
172         /* Binary-File Memory Image Access Info. */
173         DWord           dw_size;
174         Byte            *pb_binary;
175
176         /* Binary-Format Depending Info. (ELF)*/
177         void            *p_elf;
178
179         LibGoblin_SectionInfo   t_section[LIBGOBLIN_ELF_SEC_ID_MAX];
180 } LibGoblin_BinaryFile;
181
182 /*=====================================================================*/
183 typedef struct  {
184         /* BinaryInfo Struct ID */
185         int                     i_id;
186         Byte            b_phase;
187
188         /* BinaryInfo Common Info. */
189         Byte            b_type;
190         Byte            b_endian;
191         Byte            b_bits;
192
193         /* Debug-Format Depending Info. (DWarf) */
194         void            *p_debug;
195
196         /* Exec. File ===========================================*/
197         LibGoblin_BinaryFile    t_binfile[3];
198
199         /* Binary-Format Depending Info. (ELF)*/
200         //void          *p_format;
201
202         LibGoblin_SectionInfo   t_section[LIBGOBLIN_ELF_SEC_ID_MAX];
203         
204 }       LibGoblin_BinaryInfo;
205
206
207
208 /*=====================================================================*/
209 typedef struct  {
210         Word    dw_id;
211         Word    w_flag;
212         Ptr             *p_address;
213         DWord   dw_size;
214         DWord   dw_srcid;
215         DWord   dw_name;
216         DWord   dw_next;
217         Word    w_secid;
218 } LibGoblin_SymbolInfo;
219
220
221 #endif  /* DRD64_HEADER_LIBGOBLIN_SYMINFO*/
222
223 /* EOF of drd64_.h ----------------------------------- */