Change the string guesser to work with multiple levels instead of plainly enabled/disabled and the aggressive toggle.
The new option is used via the API GlobalConfig.RODATA_STRING_GUESSER_LEVEL or via the CLI --rodata-string-guesser level.
The old GlobalConfig.STRING_GUESSER and GlobalConfig.AGGRESSIVE_STRING_GUESSER options are now deprecated, same as the CLI options --string-guesser and --aggressive-string-guesser.
The old GlobalConfig.STRING_GUESSER = True is equivalent to the new GlobalConfig.RODATA_STRING_GUESSER_LEVEL = 1
The old GlobalConfig.AGGRESSIVE_STRING_GUESSER = True is equivalent to the new GlobalConfig.RODATA_STRING_GUESSER_LEVEL = 4
Meaning of the new levels:
level 0: Completely disable the guessing feature.
level 1: The most conservative guessing level. Imposes the following restrictions:
Do not try to guess if the user provided a type for the symbol.
Do no try to guess if type information for the symbol can be inferred by other means.
A string symbol must be referenced only once.
Strings must not be empty.
level 2: A string no longer needs to be referenced only once to be considered a possible string. This can happen because of a deduplication optimization.
level 3: Empty strings are allowed.
level 4: Symbols with autodetected type information but no user type information can still be guessed as strings.
The level defaults to 1.
Implement string guesser for the data section.
Controlled by the API GlobalConfig.DATA_STRING_GUESSER_LEVEL or via the CLI --data-string-guesser level.
Decodes strings with the ASCII encoding by default.
The meaning of each level are the same as the rodata string guesser.
The level defaults to 2.
Add experimental Pascal string guesser.
Works for both rodata and data sections.
Follows the same level logic as the C string guesser.
It is disabled by default.
Start emitting .size directives by default.
Emit jlabel instead of dlabel for jumptable labels by default
Emit dlabel instead of dlabel for data, rodata and bss symbols by default
GlobalConfig.RODATA_STRING_GUESSER_LEVEL
or via the CLI--rodata-string-guesser level
.GlobalConfig.STRING_GUESSER
andGlobalConfig.AGGRESSIVE_STRING_GUESSER
options are now deprecated, same as the CLI options--string-guesser
and--aggressive-string-guesser
.GlobalConfig.STRING_GUESSER = True
is equivalent to the newGlobalConfig.RODATA_STRING_GUESSER_LEVEL = 1
GlobalConfig.AGGRESSIVE_STRING_GUESSER = True
is equivalent to the newGlobalConfig.RODATA_STRING_GUESSER_LEVEL = 4
GlobalConfig.DATA_STRING_GUESSER_LEVEL
or via the CLI--data-string-guesser level
.ASCII
encoding by default..size
directives by default.jlabel
instead ofdlabel
for jumptable labels by defaultdlabel
instead ofdlabel
for data, rodata and bss symbols by default