タイトルにあるように、Cのプログラムでスタックの内容を表示したいと思います。ここでスタックの内容をCプログラムで印刷するにはどうしたらいいですか?
は私が撮った手順は次のとおりです。
私は私のアドレスを返すために私EBPレジスタと関数のアドレスを返すために機能を含め、簡単な組立(helper.s)ファイルを作りましたESP
.globl get_esp get_esp: movl %esp, %eax ret # get_ebp is defined similarly, and included in the .globl section
- を登録し、私は私のCプログラム(FPCがintである
fpC = get_esp();
) - I(成功し、私は思う)、印刷から
get_esp()
とget_ebp()
関数と呼ば私のespとebpレジスタのアドレスを編集しました。(fprintf (stderr, "%x", fcP);
) - 私のespレジスタの内容を印刷しようとしましたが失敗しました。 (他の方法の中でも
fprintf (sderr, "%d", *fcP);
とfprintf (sderr, "%x", *((int *)fcP));
を試しました)。この行が処理されると、私のプログラムは実行時にセグメンテーション違反に遭遇します。
私は間違っていますか?
EDIT:これは、スタックポインターを取得するためにこれらのアセンブリ関数を呼び出すことによって実行する必要があります。 EDIT2:これは宿題です。
あなたはそれが失敗したと言いますとどういう意味ですか?あなたはどのようなアウトプットを得ましたか、何を期待しましたか? –
ポインタを出力するには、printf( "%p"、(void *)(p)) 'を使用する必要があります。 "%espの内容"はポインタです。 –
@CarlNorum:いいえ、 'printf'の使用はC標準によって単に義務付けられています。 –