Tenho um binário que eu mesmo criei, mas não lembro qual versão rustc
usei para criá-lo.
Parece que ele vinculou a biblioteca padrão estaticamente (como é típico), então não consigo usar readelf -d
esse método para descobrir qual versão da biblioteca padrão está vinculada.
Eu construí o binário usando cargo-auditable
, mas o json incorporado parece não mencionar a versão do compilador Rust ou a biblioteca padrão:
❯ rust-audit-info bin/jaq
{"packages":[{"name":"aho-corasick","version":"1.1.3","source":"crates.io","dependencies":[28]},{"name":"autocfg","version":"1.4.0","source":"crates.io","kind":"build"},{"name":"base64","version":"0.22.1","source":"crates.io"},{"name":"bitflags","version":"2.7.0","source":"crates.io"},{"name":"cc","version":"1.2.9","source":"crates.io","kind":"build","dependencies":[35]},{"name":"cfg-if","version":"1.0.0","source":"crates.io"},{"name":"chrono","version":"0.4.39","source":"crates.io","dependencies":[31]},{"name":"codesnake","version":"0.2.1","source":"crates.io"},{"name":"dyn-clone","version":"1.0.17","source":"crates.io"},{"name":"env_logger","version":"0.10.2","source":"crates.io","dependencies":[27]},{"name":"equivalent","version":"1.0.1","source":"crates.io"},{"name":"errno","version":"0.3.10","source":"crates.io","dependencies":[23]},{"name":"fastrand","version":"2.3.0","source":"crates.io"},{"name":"foldhash","version":"0.1.4","source":"crates.io"},{"name":"getrandom","version":"0.2.15","source":"crates.io","dependencies":[5,23]},{"name":"hashbrown","version":"0.15.2","source":"crates.io"},{"name":"hifijson","version":"0.2.2","source":"crates.io"},{"name":"indexmap","version":"2.7.0","source":"crates.io","dependencies":[10,15]},{"name":"is-terminal","version":"0.4.13","source":"crates.io","dependencies":[23]},{"name":"jaq","version":"2.1.1","source":"local","dependencies":[7,9,16,18,20,21,22,27,29,30,36,38,40],"root":true},{"name":"jaq-core","version":"2.1.1","source":"crates.io","dependencies":[8,32,37]},{"name":"jaq-json","version":"1.1.1","source":"crates.io","dependencies":[13,16,17,20,22]},{"name":"jaq-std","version":"2.1.0","source":"crates.io","dependencies":[0,2,6,20,24,27,33,39]},{"name":"libc","version":"0.2.169","source":"crates.io"},{"name":"libm","version":"0.2.11","source":"crates.io"},{"name":"libmimalloc-sys","version":"0.1.39","source":"crates.io","dependencies":[4,23]},{"name":"linux-raw-sys","version":"0.4.15","source":"crates.io"},{"name":"log","version":"0.4.25","source":"crates.io"},{"name":"memchr","version":"2.7.4","source":"crates.io"},{"name":"memmap2","version":"0.9.5","source":"crates.io","dependencies":[23]},{"name":"mimalloc","version":"0.1.43","source":"crates.io","dependencies":[25]},{"name":"num-traits","version":"0.2.19","source":"crates.io","dependencies":[1]},{"name":"once_cell","version":"1.20.2","source":"crates.io"},{"name":"regex-lite","version":"0.1.6","source":"crates.io"},{"name":"rustix","version":"0.38.43","source":"crates.io","dependencies":[3,11,23,26]},{"name":"shlex","version":"1.3.0","source":"crates.io","kind":"build"},{"name":"tempfile","version":"3.15.0","source":"crates.io","dependencies":[5,12,14,32,34]},{"name":"typed-arena","version":"2.0.2","source":"crates.io"},{"name":"unicode-width","version":"0.1.13","source":"crates.io"},{"name":"urlencoding","version":"2.1.3","source":"crates.io"},{"name":"yansi","version":"1.0.1","source":"crates.io"}]}
Ele foi construído com --release
, então parece que os símbolos de depuração foram removidos:
❯ rust-gdb -q bin/jaq -ex quit
Reading symbols from bin/jaq...
(No debugging symbols found in bin/jaq)
Como posso descobrir qual versão do rustc (ou, equivalentemente, qual versão da biblioteca padrão) foi usada para construir este binário?
A versão é armazenada na
.comment
seção do binário, então podemos obtê-la com mais precisão comreadelf
:Uma solução grosseira é usar
strings
:Provavelmente haja uma maneira melhor de descobrir isso, mas pelo menos é reconfortante saber que a resposta está em algum lugar.