`nm` and `readelf -s` expose exactly the st_info type/binding split you are decoding, and the dynamic linker (ld.so) uses these same STB_GLOBAL/STB_WEAK rules to resolve symbols like printf across shared libraries at runtime. Reverse engineers use surviving .dynsym entries to reconstruct a stripped binary's API surface when .symtab has been removed.