在 Ubuntu 里,“Strings”通常指 strings 命令(从二进制文件中提取可读字符串),或者你是在做 字符串处理 / 本地化(i18n)优化。不同场景优化方式差别很大,下面我按常见场景分别说明,你可以对号入座。
strings 命令的使用strings 默认很慢 / 输出太多常见优化方式:
strings -n 6 binary_file
-n 6:只显示长度 ≥ 6 的字符串strings -e l binary_file
或只提取 .rodata:
objdump -s -j .rodata binary_file
strings binary_file | head -n 1000
strings -e s binary_file
grep -a -o '[[:print:]]\{6,\}' binary_file
适合逆向、安全、发布环境。
strip binary_file
printf / loggcc -O2 -s -fdata-sections -ffunction-sections
const char* 而不是 std::stringconst char* s = "hello";
std::string_view sv = "hello";
static const char* table[] = { "a", "b", "c" };
xgettext -o messages.po *.c
msgfmt messages.po -o messages.mo
gettext 而不是手写字符串表# 慢
s = s + "a"
# 快
s = "".join(parts)
# 慢
for i in $(seq 1 10000); do s="$s$i"; done
# 快
printf "%s" "$s"
sudo apt remove --purge 'language-pack-*'
sudo apt autoremove
sudo dpkg-reconfigure locales
你可以直接告诉我:
strings 慢?我可以直接给你精确优化方案 + 示例命令。