11

ソースを持っていないライブラリをデバッグしようとしているので、LLDB 逆アセンブリを多用しています。「スレッド ステップイン」を呼び出すたびに逆アセンブルを自動的に実行する方法があるかどうか疑問に思っていました。現在、「スレッド ステップ イン」を実行すると、LLDB は命令を実行し、空白のプロンプトで戻ります。EIP がどこに移動したかを確認するには、スレッドのステップインごとに逆アセンブルを入力する必要がありますが、これは非常に気が散り、煩わしいものです (また、LLDB は式を ';' で終わらせないように見えるため、1 行に複数のコマンドを配置することはできません動作しません。)

より一般的には、複数の LLDB コマンドのエイリアスを連続して作成する方法があるかどうか疑問に思っていました。たとえば、%rdi の内容を出力し、EIP 周辺の 10 行を逆アセンブルできる単一のエイリアスなどです。(はい、Python スクリプトを書くことはできますが、それほど時間はありません :-(

4

2 に答える 2

3

はい、これを行う正しい方法は、Python スクリプト インターフェイスを使用することです。これを可能にするために (というか、可能にするために... 不十分に)、デバッガーのコマンド言語に十分なフロー制御と実行ロジックを詰め込むという gdb のアプローチを回避するという意図的な決定がありました。そのアプローチの代わりに、タスクを達成するために Python を使用する必要があるという障壁は低くなりますが、Python の非常に使いやすいインターフェースを介して、デバッガーのすべての機能を利用できます。lldb はスクリプト言語を Python に任せ、Python から使いやすいクリーンで強力な API を提供することに専念しています。

しかし、ここであなたの目標に取り組むために、stop-disassembly-count設定があなたが必要とすることをしないのはなぜですか? 実際、~/.lldbinitデフォルト設定のstop-disassembly-display.

(lldb) settings show stop-disassembly-count
stop-disassembly-count (int) = 4
(lldb) settings show stop-disassembly-display
stop-disassembly-display (enum) = no-source
(lldb) 

lldb のデフォルトの動作は、プログラムをステップ実行しているときに何らかのコンテキストを表示することです。ソース コードが利用可能な場合は、ステップ実行中のソースが表示されます。ソースがない場合は、実行しようとしているアセンブリ命令が表示されます。デバッグ情報がある (デバッガーがファイル番号と行番号を認識している) が、ソース コードが利用できない (または別のパスにある) 場合、小さなバグがあります。この場合。ユーザーは引き続きソース レベルで操作している (命令レベルのステッピングのandの代わりにsand to step を使用) ため、lldb はこのインスタンスではコンテキストを表示せず、ソース ファイル名と行番号のみを表示する必要があります。nsini

于 2013-02-01T05:40:36.840 に答える