#!/usr/bin/env python2 # Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. import sys import struct if len(sys.argv) != 2: print >>sys.stderr, "usage: %s filename.elf" % sys.argv[0] sys.exit(-1) f = file(sys.argv[1], 'rb') data = f.read(0x20) f.close() if data[0:4] != '\x7fELF': print >>sys.stderr, "ELF magic mismatch" sys.exit(-1) ei_class = ord(data[4]) if ei_class == 1: elf_bytes = 4 struct_type = 'I' elif ei_class == 2: elf_bytes = 8 struct_type = 'Q' else: print >>sys.stderr, "Bad EI_CLASS value" sys.exit(-1) ei_data = ord(data[5]) if ei_data == 1: struct_endian = '<' elif ei_data == 2: struct_endian = '>' else: print >>sys.stderr, "Bad EI_DATA value" sys.exit(-1) ei_version = ord(data[6]) if ei_version != 1: print >>sys.stderr, "Bad EI_VERSION value" sys.exit(-1) e_entry = data[0x18:0x18 + elf_bytes] ep = struct.unpack(struct_endian + struct_type, e_entry) print '0x%x' % ep