def map(ea, size, newea, **kwds): """Map `size` bytes of data from `ea` into a new segment at `newea`. The keyword `name` can be used to name the segment. """ # grab the file offset and the data we want fpos, data = idaapi.get_fileregion_offset(ea), database.read(ea, size) if len(data) != size: raise E.ReadOrWriteError( u"{:s}.map({:#x}, {:+#x}, {:#x}{:s}) : Unable to read {:#x} bytes from {:#x}." .format( __name__, ea, size, newea, u", {:s}".format(utils.string.kwargs(kwds)) if kwds else '', size, ea)) # rebase the data to the new address res = idaapi.mem2base(data, newea, fpos) if not res: raise E.DisassemblerError( u"{:s}.map({:#x}, {:+#x}, {:#x}{:s}) : Unable to remap {:#x}:{:+#x} to {:#x}." .format( __name__, ea, size, newea, u", {:s}".format(utils.string.kwargs(kwds)) if kwds else '', ea, size, newea)) # now we can create the new segment return new(newea, size, kwds.get("name", "map_{:x}".format(ea)))
def map(ea, size, newea, **kwds): """Map `size` bytes of data from `ea` into a new segment at `newea`. The keyword `name` can be used to name the segment. """ fpos, data = idaapi.get_fileregion_offset(ea), database.read(ea, size) if len(data) != size: raise E.ReadOrWriteError( "{:s}.map({:#x}, {:+#x}, {:#x}) : Unable to read {:#x} bytes from {:#x}." .format(__name__, ea, size, newea, size, ea)) res = idaapi.mem2base(data, newea, fpos) if not res: raise E.DisassemblerError( "{:s}.map({:#x}, {:+#x}, {:#x}) : Unable to remap {:#x}:{:+#x} to {:#x}." .format(__name__, ea, size, newea, ea, size, newea)) return new(newea, size, kwds.get("name', 'map_{:x}".format(ea)))
def load(filename, ea, size=None, offset=0, **kwds): """Load the specified `filename` to the address `ea` as a segment. If `size` is not specified, use the length of the file. The keyword `offset` represents the offset into the file to use. The keyword `name` can be used to name the segment. """ filesize = os.stat(filename).st_size cb = filesize - offset if size is None else size res = __load_file(filename, ea, cb, offset) if not res: raise E.ReadOrWriteError( "{:s}.load({!r}, {:#x}, {:+#x}, {:#x}) : Unable to load file into {:#x}:{:+#x} from \"{:s}\"." .format(__name__, filename, ea, cb, offset, ea, cb, os.path.relpath(filename))) return new(ea, cb, kwds.get('name', os.path.split(filename)[1]))