obj ファイル内のバイナリ命令のレジスタがどの変数からコンパイルされているかを知る必要があります。
要するに、各命令のレジスタから変数へのマッピング
例: objdump が obj ファイルのスニペットを次のように与えるとします。
MOV R1 5 # move 5 to register R1
SW R2 SP[-20] # store the value of R2 to address SP-20
R1 が変数、たとえばvar1をソース コードから格納していることをどのように知ることができるでしょうか? R2 はvar2を格納しますか?
残念ながらreadelfのドキュメントを検索しましたが、無駄でした。
(ソースとバイナリの間の行マッピングを提供することはできますが、それ以上は役に立ちません)
次に、gcc とリンカのデバッグ オプションをいくつか探しました。いくつかの有用な情報が見つかりましたが、それでも私の問題は解決しません。
私が見つけた情報は次のとおりです。
- オプション-fdump-rtl-vartrackはすべての変数を追跡でき、便利なようです。しかし、このオプションを使用してコンパイルすると、予想される *.vartrack ダンプ ファイルが見つかりませんでした。
- オプション*fdump-rtl-vartrack-uidは、各変数の一意の ID (DECL_UID) を示します。しかし、使用中に次のエラーを受け取りました: cc1: エラー: 認識されないコマンド ライン オプション "-fdump-tree-uid"
- オプションfdump-rtl-lregはローカル レジスタの割り当てをダンプしますが、reg から変数へのマッピングをどのように教えてくれるのかわかりません。
誰かが経験やアイデアを持っていますか?
皆さん、ありがとうございました!
ハッキング...