2011-10-20 7 views
2

私はgdbの下でアセンブリコードをデバッグするのが初めてです。それで、私はいくつか質問があります。アセンブリコードをgdbでデバッグする|プラットフォームのLinux

  • は、どのように私はそれを実行している実際ずに(仮想の場所で)私のアセンブリコードを実行できますか?
  • 値が必要な場合は、値を挿入してswitch文の各ケースでどのように動作するかを確認するにはどうすればよいですか?

    例:アセンブリで例を挙げることができなかったので、私はそれをcで与えます。

    scanf ("%d",&y); 
        while (y) { 
         ... 
         scanf("%d", &x); 
         switch (x) { 
    
         case 1: ... 
         case 2: ... 
         case 3: ... 
         } 
    
        } 
    
  • もし必要ならば、どのような値がレジスタに格納されているかを知ることができますか?

  • すべてのディスプレイを.txtファイルにプリントアウトするにはどうすればよいですか?言い換えれば、私はプログラムを起動し、ブレークポイントなしで実行し、この表示を.txtファイルに出力したいと仮定します。だから私は紙で作業することができます。あなたが知っているように、紙がコンピュータよりも強力です:)

私はあなたのいくつかは、「gdbのチュートリアルやmanページを移動して、読んで、」.Butを言うだろう、私は何か良いチュートリアルを見つけることができませんでした知っている、例を挙げて説明しますコマンドの仕組み私の目には例を見たときに私の脳は、のみ動作します:)

プラットフォームは、Linux ツールは

EDITターミナル/コンソールである:あなたが

を知っている場合はもちろん、私に良いドキュメントを含む良いウェブサイトを教えてください、「魚を食べないようにどのように」このページで

+0

あなたのようなリンクが、コマンド –

答えて

1

アセンブリコードを実際に実行せずにどのように実行できますか?

うーん、何か?

switch文の各ケースでどのように動作するかを値を挿入するにはどうすればよいですか?

set whatever = some expression

レジスタは$の印章(例えば:$eax)を持っていることに注意してください。

もし必要ならば、どのような値がレジスタに保存されているかを知ることができますか?全てのレジスタの

:特定のレジスタ

info reg $eax 

又は

p $eax 

又は

info reg 

など

どのようにすべての表示を.txtファイルに出力できますか?言い換えれば、私はプログラムを起動し、ブレークポイントなしで実行し、この表示を.txtファイルに出力したいと仮定します。だから私は紙で作業することができます。あなたが知っているように、紙がコンピュータよりも強力です:)

set logging file foobar.out 
set logging on 
+0

に具体的になっていました。私のプログラムはインターネットで仕事をしているとします。しかし、私はgdbで自分のプログラムを実行すると、サーバにメッセージを送信したくありません。私はどこにバグが隠れているのか把握しようとしています。何度も実行するかもしれません。言い換えれば、それは仮想的な場所で動作するかもしれないが、私はそのプログラムがウェブにメッセージを送ることを望んでいない。 –

1

見てくれ「どのように[キャッチ]魚」のドキュメントを与える:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka12961.html - それはARMアセンブラのためだ、ほとんどがすべてのアセンブラのために合う必要があります。プログラムカウンターを目的の命令に設定したり、レジスタに値を入れたり、レジスタを表示したり、メモリを表示したりすることができます。印刷しないでください。

+0

+1がある場合お気軽に:http://www.chemie.fu-berlin.de/chemnet/を/ info/gdb/gdb_12.htmlを使用してください。#SEC91は、OPの質問 –

関連する問題