1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
4 for INTEL64(R), AMD64(R)
6 Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
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.
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.
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
31 /* File Info -----------------------------------------------------------
35 ----------------------------------------------------------------------*/
37 #ifndef DRD64_HEADER_LIBGOBLIN_TYPE
38 #define DRD64_HEADER_LIBGOBLIN_TYPE
41 /*=====================================================================*/
48 QWord qw_abbrev_offset;
51 QWord qw_type_signature; // for DWARF4
52 QWord qw_type_offset; // for DWARF4
53 } LibGoblin_DWARF_Info_CUHeader;
56 /*=====================================================================*/
57 #define DWARF_ABBREV_MAXITEMS 30
64 DWord dw_attribute[ DWARF_ABBREV_MAXITEMS ];
65 DWord dw_format[ DWARF_ABBREV_MAXITEMS ];
69 /*=====================================================================*/
70 #define LIBGOBLIN_DWARF_INFO_TYPE_NONE 0x00
71 #define LIBGOBLIN_DWARF_INFO_TYPE_BYTE 0x01
72 #define LIBGOBLIN_DWARF_INFO_TYPE_WORD 0x02
73 #define LIBGOBLIN_DWARF_INFO_TYPE_DWORD 0x03
74 #define LIBGOBLIN_DWARF_INFO_TYPE_QWORD 0x04
75 #define LIBGOBLIN_DWARF_INFO_TYPE_INT64 0x05
76 #define LIBGOBLIN_DWARF_INFO_TYPE_POINTER 0x06
77 #define LIBGOBLIN_DWARF_INFO_TYPE_STRING 0x07
78 #define LIBGOBLIN_DWARF_INFO_TYPE_BLOCK 0x08
79 #define LIBGOBLIN_DWARF_INFO_TYPE_LINK 0x09
96 Byte *pb_data; // for BlockData
98 } LibGoblin_DWARF_DIEValue;
101 /*=====================================================================*/
104 LibGoblin_DWARF_DIEValue *p_val;
105 } LibGoblin_DWARF_Attribute;
108 /*=====================================================================*/
111 Byte *pb_data; // FileLocation (Offset)
121 } LibGoblin_SectionInfo;
124 /*=====================================================================*/
126 Ptr ptr_address; // Object Address
127 DWord dw_size; // Object Size (Address Range)
128 char *pstr_name; // Object Name (Param./Func./etc...)
129 //DWord dw_srcid; // SourceInfo struct ID
132 Word w_secid; // SectionInfo ItemIndex belong with this object.
133 } LibGoblin_AddressInfo ****OLD**** ;*/
136 /*=====================================================================*/
137 #define OBJINFO_STATUS_INVALID 0x00000000
138 #define OBJINFO_STATUS_VALID 0x00000001 // bit 0
139 #define OBJINFO_STATUS_DYNAMIC 0x00000002 // bit 1
140 #define OBJINFO_STATUS_RESOLV1 0x00000004 // bit 2 (Specified BinaryInfo & Index)
141 #define OBJINFO_STATUS_RESOLV2 0x00000008 // bit 3 (Loaded .so)
142 #define OBJINFO_STATUS_REL 0x00000100
144 #define OBJINFO_TYPE_NULL 0x00
145 #define OBJINFO_TYPE_PROGRAM 0x01
146 #define OBJINFO_TYPE_MASTER 0x02
147 #define OBJINFO_TYPE_PROGHDR 0x03
148 #define OBJINFO_TYPE_SECTION 0x04
149 #define OBJINFO_TYPE_FUNCTION 0x05
150 #define OBJINFO_TYPE_OBJECT 0x06
151 #define OBJINFO_TYPE_COMMON 0x07
152 #define OBJINFO_TYPE_TLS 0x08
153 #define OBJINFO_TYPE_REL 0x09
160 // Address & Memory-Range Info ----
162 Ptr ptr_addr; // Object Address
163 // [Section] sh_addr - Address in memory image.
164 // [Symbol ] st_value - Symbol value.
165 QWord qw_size; // Object Size (Address Range)
166 // [Symbol ] st_size - Size of associated object.
169 // Group(Parent-Child) Order Link ---
171 int i_parent_id; // Parent ObjectInfo
172 int i_child_topid; // Child Top ObjectInfo
174 int i_next_id; // Next
177 // Address Order Link ---
179 int i_next_id; // Next Address ObjectInfo
180 int i_prev_id; // Prev Address ObjectInfo
187 // [Section] sh_offset - Offset in file.
191 // ObjectInfo (DATA) ---
192 char *pstr_name; // Object Name (Param./Func./etc...)
193 // [Section] = sh_name - Section name (index into the section header string table).
194 // [Symbol ] = st_name - String table index of name.
205 DWord dw_type; // Entry type.
206 DWord dw_flags; // Access permission flags.
207 QWord qw_align; // Alignment in memory and file.
208 void *pv_proghdr; // Program Header Pointer
212 QWord qw_flag; // sh_flags - Section flags.
213 QWord qw_align; // sh_addralign - Alignment in bytes.
214 QWord qw_entsize; // sh_entsize - Size of each entry in section.
215 DWord dw_type; // sh_type - Section type.
216 DWord dw_link; // sh_link - Index of a related section.
217 DWord dw_info; // sh_info - Depends on section type.
222 Byte b_type; // st_info - Type and binding information.
223 Byte b_binding; // st_info - Type and binding information.
224 Byte b_visibility; // st_other - Reserved (not used).
225 Word w_secindex; // st_shndx - Section index of symbol.
242 int i_srcid; // SourceInfo struct ID
245 Word w_secid; // ==OLD== SectionInfo ItemIndex belong with this object.
247 } LibGoblin_ObjectInfo;
250 /*=====================================================================*/
254 } LibGoblin_AddressInfo;
256 /*=====================================================================*/
259 DWord dw_hash_filename;
260 DWord dw_hash_localpath;
261 char str_filename[DRD64_MAX_PATH];
262 char str_localpath[DRD64_MAX_PATH];
263 char str_srcpath[DRD64_MAX_PATH]; // for DW_AT_name
264 char str_buildpath[DRD64_MAX_PATH]; // for DW_AT_comp_dir (Optional)
269 DWARF_AbbrevEntry *p_abbrev;
275 /*=====================================================================*/
276 #define BINFILE_FLAGMASK_FILE (DWord)0x00000007
277 #define BINFILE_FLAG_FILE_MMAP (DWord)0x00000001
278 #define BINFILE_FLAG_FILE_EXTALLOC (DWord)0x00000002
279 #define BINFILE_FLAG_FILE_INTALLOC (DWord)0x00000004
281 #define BINFILE_FLAGMASK_RELTYPE (DWord)0x00000010
282 #define BINFILE_FLAG_RELTYPE_REL (DWord)0x00000000
283 #define BINFILE_FLAG_RELTYPE_RELA (DWord)0x00000010
285 #define BINFILE_STATUS_NOUSE 0x00
286 #define BINFILE_STATUS_CREATE 0x01
287 #define BINFILE_STATUS_FILEOPEN 0x02
288 #define BINFILE_STATUS_READSECTION 0x03
294 /* Binary-File Info. */
299 // EXEC-program / shared lib. filename (without directry)
300 char str_filename[DRD64_MAX_PATH];
301 char str_localpath[DRD64_MAX_PATH]; // filepath in local machine path.(transported)
302 char str_remotepath[DRD64_MAX_PATH]; // filepath in remote machine path.(local machine is NULL)
304 // .dynamic Section - rpath (.so location path - converted real-path)
305 char str_rpath[DRD64_MAX_PATH];
306 // .dynamic Section - runpath (.so location path - converted real-path)
307 char str_runpath[DRD64_MAX_PATH];
309 LibFileType_FileType t_ftype;
311 /* Binary-File Memory Image Access Info. */
316 LibGoblin_SrcFile *p_srcfile;
325 DWARF_AbbrevEntry *p_abbrev;
326 QWord qw_abbrev_unreadsz;
333 /* Binary-Format Depending Info. (ELF)*/
336 LibGoblin_SectionInfo t_section[LIBGOBLIN_SECTION_ID_MAX];
337 int i_secindex[LIBGOBLIN_SECTION_ID_MAX];
338 } LibGoblin_BinaryFile;
341 /*=====================================================================*/
342 #define LIBGOBLIN_BINFO_PHASE_INIT 0x00
343 #define LIBGOBLIN_BINFO_PHASE_ALLOCED 0x10
344 #define LIBGOBLIN_BINFO_PHASE_SETNAME 0x20
345 #define LIBGOBLIN_BINFO_PHASE_SETPROG 0x30
346 #define LIBGOBLIN_BINFO_PHASE_BINREAD 0x40
347 #define LIBGOBLIN_BINFO_PHASE_ELF1READ 0x51
348 #define LIBGOBLIN_BINFO_PHASE_ELF2READ 0x52
349 #define LIBGOBLIN_BINFO_PHASE_ANALYZED 0x50
351 #define LIBGOBLIN_BINFO_TYPE_NONE 0x00
352 #define LIBGOBLIN_BINFO_TYPE_ELF 0x01
353 #define LIBGOBLIN_BINFO_TYPE_ELF64 0x64
354 #define LIBGOBLIN_BINFO_TYPE_ELF32 0x32
357 ((LIBGOBLIN_BINFO_TYPE_ELF64==((n)->b_type)) ? 0x01 : 0x00)
359 ((LIBGOBLIN_BINFO_TYPE_ELF32==((n)->b_type)) ? 0x01 : 0x00)
360 #define IsBinfoType_Elf64(n) \
361 ((LIBGOBLIN_BINFO_TYPE_ELF64==((n)->b_type)) ? 0x01 : 0x00)
362 #define IsBinfoType_Elf32(n) \
363 ((LIBGOBLIN_BINFO_TYPE_ELF32==((n)->b_type)) ? 0x01 : 0x00)
365 #define LIBGOBLIN_BINFO_ENDIAN_NONE 0x00
366 #define LIBGOBLIN_BINFO_ENDIAN_LITTLE 0x01
367 #define LIBGOBLIN_BINFO_ENDIAN_BIG 0x02
369 #define LIBGOBLIN_BINFO_SECTION_TEXT 0x00
370 #define LIBGOBLIN_BINFO_SECTION_DATA 0x01
371 #define LIBGOBLIN_BINFO_SECTION_BSS 0x02
373 #define LIBGOBLIN_BINFO_MAXFILES 3 // Except FILE_LIBRARY
374 #define LIBGOBLIN_BINFO_FILE_EXEC 0
375 #define LIBGOBLIN_BINFO_FILE_CORE 1
376 #define LIBGOBLIN_BINFO_FILE_DEBUG 2
377 #define LIBGOBLIN_BINFO_FILE_LIBRARY -1
379 #define LIBGOBLIN_DWARF_ATTR_DEF_MAX 0x6f
380 #define LIBGOBLIN_DWARF_ATTR_EXT_MAX 53
381 #define LIBGOBLIN_DWARF_ATTR_MAX (LIBGOBLIN_DWARF_ATTR_DEF_MAX + LIBGOBLIN_DWARF_ATTR_EXT_MAX)
385 /* BinaryInfo Struct ID */
389 /* BinaryInfo Common Info. */
394 /* Debug-Format Depending Info. (DWarf) */
397 /* Address Table Info. */
399 LibGoblin_AddressInfo *p_addrinfo;
400 DWord dw_alloc_addrinfo;
401 DWord dw_max_addrinfo;
404 /* Exec. File Info. */
405 char str_filename[DRD64_MAX_PATH];
408 int i_binfile; // binaryFile ID
415 PtrValue ptr_loadbase;
417 LibGoblin_SectionInfo t_section[LIBGOBLIN_SECTION_ID_MAX];
419 /* Binary-Format Depending Info. (ELF)*/
424 LibGoblin_DWARF_DIEValue *p_infoval;
427 LibGoblin_DWARF_Attribute t_attr[LIBGOBLIN_DWARF_ATTR_MAX+1];
431 } LibGoblin_BinaryInfo;
434 /*=====================================================================*/
439 // Object Table & Address Table ---
441 LibGoblin_ObjectInfo *p_objinfo;
442 int i_empty; // Empty ObjectInfo Chain Top-ID.
443 int i_alloced; // Alloced ObjectInfo
444 int i_used; // ObjectInfo Items
445 int i_topid; // Top-Ptr ObjectInfo
447 LibGoblin_AddressInfo *p_addrinfo;
454 /* Address Table Info. */
455 //LibGoblin_AddressInfo *p_addrinfo;
456 //DWord dw_alloc_addrinfo;
457 //DWord dw_max_addrinfo;
460 } LibGoblin_ProgramInfo;
463 #endif /* DRD64_HEADER_LIBGOBLIN_TYPE*/
465 /* EOF of drd64_.h ----------------------------------- */