I've just testet 0.8.0 and I found several things lacking:
1) String handling
- Strings don't necessarily have an \0 at the end. They
may have another string after them, like this:
char s1="this is a string\n";
char *s2=s1+9; // "a string\n";
Depending on which usage ht first finds, s1 may not be
seen as a string (and I can't tag it as such, because
there's no \0)
- Strings with special characters are not allowed. I
can't tag "?!=/" as a string.
- Strings need not be concatenated in memory; they may
be aligned or fixed-size, with \0 in-between.
eg. memory layout recognized: "abc\0def\0ghij\0"
not recognized: "abcde\0\0\0fghi\0\0\0\0jklmnop\0"
or eg. char arr;
- even if there's a \0 somewhere, and only [a-z0-9 ] in
I didn't succeed to tag some strings.
- How can I remove a errornously set string?
- Detection of unicode strings
- How can I tag data as short/long?
- If an instruction goes like
jmp [eax*4 + 0x...]
hte should recognice the address as an array, and tag
not only the first value.
Bonus points for detecting if it's an code address,
data address, or similar.
Extra bonus points: on the instruction do a register
scan to find possible values (easy if eg an "and eax,
0x1f" just before) and limit array size.
Otherwise just store a bit for this array saying "may
be smaller" and scaling down for every
identifier/string/etc. found after the array.
- It would save some screen space if multiple bytes
would be shown as eg. "db 0 dup(0x200)"
- Searching for unicode strings would be nice.
But all other things aside - thank you for this program!