[解決済み] GDBでメモリ範囲をディスアセンブルする方法は?
2022-03-13 05:09:44
質問
あるプログラムをディスアセンブルして、GDBでシステムコールアセンブリ命令(INT命令だと思います)とハンドラを見ようとしているのですが、そのためにファイルを開いたり閉じたりする小さなプログラム(下記参照)を書きました。
fopenの呼び出しが実行されるまで、GDBで追うことができました。
GDBに "ディスアセンブル 0x..."(呼び出しのアドレス)を伝えようとすると、「指定したアドレスを含む関数がありません」と応答されました。
そのメモリアドレスをGDBに強制的にディスアセンブルさせる(もしくは可能な限りアセンブラで表示させる)ことは可能でしょうか?もしそうなら、どのように?
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* f;
f = fopen("main.c", "r");
if (!f) {
perror("open");
return -1;
}
fclose(f);
return 0;
}
解決方法は?
実際のメインの分解だけでいいのですか?それなら、こうしてみてください。
(gdb) info line main
(gdb) disas STARTADDRESS ENDADDRESS
こんな感じで。
USER@MACHINE /cygdrive/c/prog/dsa
$ gcc-3.exe -g main.c
USER@MACHINE /cygdrive/c/prog/dsa
$ gdb a.exe
GNU gdb 6.8.0.20080328-cvs (cygwin-special)
...
(gdb) info line main
Line 3 of "main.c" starts at address 0x401050 <main> and ends at 0x401075 <main+
(gdb) disas 0x401050 0x401075
Dump of assembler code from 0x401050 to 0x401075:
0x00401050 <main+0>: push %ebp
0x00401051 <main+1>: mov %esp,%ebp
0x00401053 <main+3>: sub $0x18,%esp
0x00401056 <main+6>: and $0xfffffff0,%esp
0x00401059 <main+9>: mov $0x0,%eax
0x0040105e <main+14>: add $0xf,%eax
0x00401061 <main+17>: add $0xf,%eax
0x00401064 <main+20>: shr $0x4,%eax
0x00401067 <main+23>: shl $0x4,%eax
0x0040106a <main+26>: mov %eax,-0xc(%ebp)
0x0040106d <main+29>: mov -0xc(%ebp),%eax
0x00401070 <main+32>: call 0x4010c4 <_alloca>
End of assembler dump.
しかし、システム割り込みの呼び出しが見当たりません。(最後にアセンブリでシステムコールを作ろうとしたのは、しばらく前です。INT 21hだったかな?
関連
-
[解決済み] gdbで<value optimized out>とはどういう意味ですか?
-
シンボルテーブルが読み込まれていません。"file "コマンドを使用してください。
-
VScodeでデバッグを行う場合、デバッグを開始できない
-
[解決済み] GDBで現在の関数からステップアウトする
-
[解決済み] GDBでメモリ範囲をディスアセンブルする方法は?
-
[解決済み] Bashスクリプト内でGDBを使用してコマンドライン引数を持つプログラムを実行するにはどうすればよいですか?
-
[解決済み] gdb で長い文字列の完全な値を表示するにはどうすればよいですか?
-
[解決済み】GDBでレジスタの値を表示するには?
-
[解決済み】GDBで「メモリアクセス」にブレークポイントを設定することはできますか?
-
[解決済み] 対話型デバッグ中に gdb の出力を強調表示したり色付けする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] gdbで<value optimized out>とはどういう意味ですか?
-
シンボルテーブルが読み込まれていません。"file "コマンドを使用してください。
-
VScodeでデバッグを行う場合、デバッグを開始できない
-
関数の暗黙の宣言 この警告問題の原因と解決策
-
[解決済み] GDBで現在の関数からステップアウトする
-
[解決済み] GDBで単一のブレークポイントを削除するにはどうすればよいですか?
-
[解決済み] GDBでメモリ範囲をディスアセンブルする方法は?
-
[解決済み】GDBでレジスタの値を表示するには?
-
[解決済み] 対話型デバッグ中に gdb の出力を強調表示したり色付けする方法は?