如何查询静态链接的Rust编译Linux二进制文件所使用的rustc版本?
如何查询静态链接的Rust编译Linux二进制文件所使用的rustc版本?
嗨,我来给你分享几个实用的小技巧,帮你找出这个静态链接二进制对应的rustc版本~
用strings命令直接搜版本字符串
Rust编译器默认会把自身的版本信息嵌入到生成的二进制文件的字符串段里,哪怕是静态链接的情况也不例外。你可以在终端里运行这条命令:strings <你的二进制文件名> | grep -E "rustc [0-9]+\.[0-9]+\.[0-9]+"一般来说,这条命令会直接输出类似
rustc 1.75.0这样的结果,就是你要找的版本号啦。用objdump深挖二进制段内容
如果上面的strings命令没找到结果,可能是版本字符串被藏在了更隐蔽的位置,这时候可以用objdump来查看二进制的所有段内容:objdump -s <你的二进制文件名> | grep -A2 -B2 "rustc"这个命令会把包含"rustc"关键词的前后两行内容都列出来,大概率能找到版本信息。
重新检查cargo-auditable嵌入的信息
你提到用了cargo-auditable但没找到版本,有可能是你用的cargo-auditable版本比较旧,或者查看的方式不对?可以试试直接在二进制里搜索auditable的JSON字段:grep -a '"rustc":' <你的二进制文件名>要是能搜到的话,后面跟着的就是rustc的版本号了。如果还是没有,建议你更新一下rust-audit-info工具再重新解析试试,新版的cargo-auditable一般都会嵌入这个信息的。
终极对比法(万不得已再用)
如果上面的方法都不管用,那只能出大招了:找几个不同版本的rustc,编译同一个和你这个二进制对应的项目,然后对比生成的二进制文件的哈希值或者特征段内容,匹配上的那个rustc版本就是你当初用的了。不过这个方法比较耗时,优先用前面的几个哈~
备注:内容来源于stack exchange,提问作者ComputerDruid




