Class: ElfParser

Inherits:
BinData::Record
  • Object
show all
Defined in:
lib/elf.rb

Instance Method Summary collapse

Instance Method Details

#parse_arch(e_machine) ⇒ Object



181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/elf.rb', line 181

def parse_arch(e_machine)
    machine = {
        0x02 => "SPARC",
        0x03 => "x86",
        0x08 => "MIPS",
        0x14 => "PowerPC",
        0x28 => "ARM",
        0x2a => "SuperH",
        0x32 => "IA64",
        0x3e => "x86-64",
        0xb7 => "AArch64",
    }
    machine[e_machine]
end

#parse_bits(ei_class) ⇒ Object



177
178
179
# File 'lib/elf.rb', line 177

def parse_bits(ei_class)
    ei_class == 1 ? 32 : 64
end

#parse_sh_flags(sh_flags) ⇒ Object



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
# File 'lib/elf.rb', line 245

def parse_sh_flags(sh_flags)
    flags = {
        (1 << 0)   => "WRITE", # /* Writable */
        (1 << 1)   => "ALLOC", # /* Occupies memory during execution */
        (1 << 2)   => "EXECINSTR", # /* Executable */
        (1 << 4)   => "MERGE", # /* Might be merged */
        (1 << 5)   => "STRINGS", # /* Contains nul-terminated strings */
        (1 << 6)   => "INFO_LINK", # /* `sh_info' contains SHT index */
        (1 << 7)   => "LINK_ORDER", # /* Preserve order after combining */
        (1 << 8)   => "OS_NONCONFORMING", # /* Non-standard OS specific handling required */
        (1 << 9)   => "GROUP", # /* Section is member of a group.  */
        (1 << 10)  => "TLS", # /* Section hold thread-local data.  */
        0x0ff00000 => "MASKOS", # /* OS-specific.  */
        0xf0000000 => "MASKPROC", # /* Processor-specific */
        (1 << 30)  => "ORDERED", # /* Special ordering requirement (Solaris).  */
        (1 << 31)  => "EXCLUDE", # /* Section is excluded unless referenced or allocated (Solaris).*/
    }
    result = []
    flags.each do |k, v|
        if (sh_flags & k) > 0
            result.push v
        end
    end
    result.join "|"
end

#parse_sh_type(sh_type) ⇒ Object



206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# File 'lib/elf.rb', line 206

def parse_sh_type(sh_type)
    type = {
        0 => "NULL", #     /* Section header table entry unused */
        1 => "PROGBITS", #     /* Program data */
        2 => "SYMTAB", #     /* Symbol table */
        3 => "STRTAB", #     /* String table */
        4 => "RELA", #     /* Relocation entries with addends */
        5 => "HASH", #     /* Symbol hash table */
        6 => "DYNAMIC", #     /* Dynamic linking information */
        7 => "NOTE", #     /* Notes */
        8 => "NOBITS", #     /* Program space with no data (bss) */
        9 => "REL", #     /* Relocation entries, no addends */
        10 => "SHLIB", #        /* Reserved */
        11 => "DYNSYM", #        /* Dynamic linker symbol table */
        14 => "INIT_ARRAY", #        /* Array of constructors */
        15 => "FINI_ARRAY", #        /* Array of destructors */
        16 => "PREINIT_ARRAY", #        /* Array of pre-constructors */
        17 => "GROUP", #        /* Section group */
        18 => "SYMTAB_SHNDX", #        /* Extended section indeces */
        19 => "NUM", #        /* Number of defined types.  */
        0x60000000 => "LOOS", #    /* Start OS-specific.  */
        0x6ffffff5 => "GNU_ATTRIBUTES", #   /* Object attributes.  */
        0x6ffffff6 => "GNU_HASH", #    /* GNU-style hash table.  */
        0x6ffffff7 => "GNU_LIBLIST", #    /* Prelink library list */
        0x6ffffff8 => "CHECKSUM", #    /* Checksum for DSO content.  */
        0x6ffffffa => "SUNW_move", #
        0x6ffffffb => "SUNW_COMDAT", #
        0x6ffffffc => "SUNW_syminfo", #
        0x6ffffffd => "GNU_verdef", #    /* Version definition section.  */
        0x6ffffffe => "GNU_verneed", #    /* Version needs section.  */
        0x6fffffff => "GNU_versym", #    /* Version symbol table.  */
        0x70000000 => "LOPROC", #    /* Start of processor-specific */
        0x7fffffff => "HIPROC", #    /* End of processor-specific */
        0x80000000 => "LOUSER", #    /* Start of application-specific */
        0x8fffffff => "HIUSER", #    /* End of application-specific */
    }
    type[sh_type]
end

#parse_type(e_type) ⇒ Object



196
197
198
199
200
201
202
203
204
# File 'lib/elf.rb', line 196

def parse_type(e_type)
    type ={
        1 => "relocatable",
        2 => "executable",
        3 => "shared",
        4 => "core",
    }
    type[e_type]
end