mirror of
https://github.com/rizinorg/rizin
synced 2026-08-22 20:26:16 -04:00
The ELF section classifier in sections_obj() only marked a section as
data when its name contained "data". As a result .dynstr (type
SHT_STRTAB, SHF_ALLOC) was flagged neither as data nor as containing
strings, so is_data_section() rejected it. Two problems followed:
- the string search (iz, and the default AUTO scan used by -A) skipped
.dynstr, so its strings were never listed (only izz, which scans the
whole file regardless of section flags, showed them);
- because no RZ_META_TYPE_STRING metadata was applied over the region,
the disassembler rendered the NUL-terminated symbol names as code,
e.g. on MIPS "_GLOBAL_OFFSET_TABLE_" decoded to bgtzl/ldr/jalx/...
Mark a section as containing strings when it is mapped into memory
(SHF_ALLOC) and is either a string table (SHT_STRTAB) or carries the
explicit SHF_STRINGS flag. The SHF_ALLOC restriction keeps the loaded
string tables (.dynstr) while leaving the non-allocated .strtab and
.shstrtab to izz, matching the "iz lists the loaded image" semantics.
This is architecture independent; MIPS was simply where the bad
disassembly was first noticed.
Closes #5182
Co-authored-by: Anton Kochkov <anton.kochkov@gmail.com>
19 lines
298 B
Text
19 lines
298 B
Text
NAME=analysis coverage_test
|
|
FILE=bins/elf/demangle-test-cpp
|
|
CMDS=<<EOF
|
|
aaaa
|
|
aai
|
|
EOF
|
|
EXPECT=<<EOF
|
|
functions: 76
|
|
xrefs: 179
|
|
calls: 130
|
|
strings: 26
|
|
symbols: 102
|
|
imports: 10
|
|
signatures: 0
|
|
coverage: 4816
|
|
code size: 5205
|
|
percentage: 92.53% (coverage on code size)
|
|
EOF
|
|
RUN
|