bytestype holds bytestrings
.decode(), which use utf-8 as a default. The
latin-1codec will map byte values to their equivilant unicode codepoints
chr()functions operate on strings, not bytestrings
base64are no longer string encoding codecs. For hex, use
bytes.hex(). For base64 use the
execare now builtin functions instead of statements
reduceis no longer a builtin; you have to import it from
/operator is explicitly floating-point division, the
//operator is expliclty integer division. The magic functions for overriding these ops are
.iteritemsmethods removed, and then non-iter versions have been made to return efficient iterators
state.solver.eval(x, cast_to=str)you should now say
cast_to=bytes. When creating concrete bitvectors from strings (including implicitly by just making a comparison against a string) these should be bytestrings. If they are not they will be utf-8 converted and a warning will be printed. Symbol names should be unicode strings.
memory.load(addr, n) -> bytes
memory[addr] -> int
memory.unpack_word(addr) -> int
memory.backers() -> iter[(start, bytearray)]
unpack_wordnow take optional
signedparameters. We have also added
memory.pack(addr, fmt, *data)and
memory.unpack(addr, fmt), which take format strings for use with the
read_bytes_cfunctions, the conversion is a little more complicated - we were able to remove the split notion of "backers" and "updates" and replaced all backers with bytearrays that we mutate, so we can work directly with the backer objects. The
backers()function iterates through all bottom-level backer objects and their start addresses. You can provide an optional address to the function, and it will skip over all backers that end before that address.
object.symbols_by_addr, where there was clearly some overlap. However,
symbols_by_addrstayed because it was the only way to enumerate symbols in an object. This has changed!
symbols_by_addris deprecated and here is now
object.symbols, a sorted list of Symbol objects, to enumerate symbols in a binary.
loader.symbols. This change has also enabled us to add a
find_symbol(returns the first symbol before the given address) and make the output of
loader.describe_addrmuch nicer (shows offset from closest symbol).
custom_ld_path- have had the
custom_removed from the beginning of their names.
state.sehas been deprecated. You should have been using
state.solverfor the past few years.