ほげほげ日記スマートフォン用の表示で見るほげほげ日記この広告は、90日以上更新していないブログに表示しています。2016-03-27GDBGDBの基本的な操作メモ。サンプル用のプログラム。c);}準備デバック用にコンパイル。(実行ファイル、a.outが生成される。sample.c起動GDBの起動。./a.out-qオプションを付けると起動時の煩わしい情報が表示されなくなる。ソースコードの表示list、でソースコードの表示。10;詳しいオプション等はソース上の行の表示なんかがわかりやすそう。<関数名>、でその関数のアセンブリ言語を表示。dump.1行に1命令で表示されている。左端の"0x00000000004004df"はその命令列が格納されているメモリアドレス(16進数)。その次の"<+0>"は関数先頭の命令列のアドレスからその命令列のアドレスまでのオフセット。これから命令列の長さもわかる。%rbp"は1バイト命令。%rsp,%rbp"は3バイト命令。<フレーバー名>、でアセンブリ言語のフォーマット(フレーバー)を変更。デフォルトはattフレーバー。intelフレーバーもある。<関数名>、でその関数実行前のあたりにブレークポイントを設定。run、でブレークポイントを設定したところまで実行。nexti、で1命令実行。nextiは関数呼び出しがあったときに関数の中に入らない。dump.disasでアセンブリ言語を表示すると、次にどの命令を実行するかまで表示してくれる。runしたあとに次の命令列が<+11>になっているのは、<+0>から<+11>までの命令列はCで書いた関数内の処理を実行する前に必要な関数呼び出し時の処理(関数プロローグ)だから。registors、でGDBで実行中のプログラムのレジスタの現在の値を表示する。....、でレジスタ名を指定できる。<アドレス>、で<アドレス>から始まるメモリの中身を表示。表示形式は0(8進数)、x(16進数)、u(符号なし10進数)、t(2進数)、c(ASCII文字表記)等がある。表示サイズはb(バイト、1バイト)、h(ハーフワード、2バイト)、w(ワード、4バイト)等がある。表示数は何個表示するか。0xc"で$rbpレジスタの内容をメモリアドレスとして解釈し、そこから0xcだけ引いたアドレス、という意味になる。0x8"にはプログラム中でbに代入した20が格納されていることがわかる。0x00"となっており、4バイトまとめて表示したときと0x0aの位置が入れ替わっている。このことからこのCPUがリトルエンディアンであることがわかる。大事なレジスタがip、sp、bp。月別アーカイブ参加グループテクノロジーはてなブログをはじめよう!yktwwwさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。