[解決済み] テスト
2022-01-30 13:33:55
質問内容
以下は私のDISASコードです。
0x0804844d <+0>: push %ebp
0x0804844e <+1>: mov %esp,%ebp
0x08048450 <+3>: and $0xfffffff0,%esp
0x08048453 <+6>: sub $0x20,%esp
0x08048456 <+9>: movl $0x8048540,(%esp)
0x0804845d <+16>: call 0x8048310 <puts@plt>
0x08048462 <+21>: lea 0x1c(%esp),%eax
0x08048466 <+25>: mov %eax,0x4(%esp)
0x0804846a <+29>: movl $0x8048555,(%esp)
0x08048471 <+36>: call 0x8048320 <scanf@plt>
0x08048476 <+41>: mov 0x1c(%esp),%eax
0x0804847a <+45>: cmp $0x208c,%eax
0x0804847f <+50>: jne 0x804848f <main+66>
0x08048481 <+52>: movl $0x8048558,(%esp)
0x08048488 <+59>: call 0x8048310 <puts@plt>
0x0804848d <+64>: jmp 0x804849b <main+78>
=> 0x0804848f <+66>: movl $0x8048569,(%esp)
0x08048496 <+73>: call 0x8048310 <puts@plt>
0x0804849b <+78>: mov $0x0,%eax
0x080484a0 <+83>: leave
0x080484a1 <+84>: ret
私が調べようとしているのは、$0x208cです。x/xw 0x208c と入力すると、Cannot access memory at address 0x208c というエラーが返されます。Info registersとタイプしてeaxを見ると、私が提供した値が表示されます。基本的にこのプログラムは2つの値を比較し、それに応じて何かを出力します。問題は、これが大学からの宿題であり、私はコードを持っていないことです。あなたが助けてくれることを願っています。ありがとうございました。
どのように解決するのですか?
<ブロッククオート
と入力すると
x/xw 0x208c
というエラーが返されます。
Cannot access memory at address 0x208c
あなたのプログラムの逆アセンブルでは、このようなことが行われているそうです。
puts("some string");
int i;
scanf("%d", &i); // I don't know what the actual format string is.
// You can find out with x/s 0x8048555
if (i == 0x208c) { ... } else { ... }
つまり
0x208c
は値(
8332
)は、プログラムがハードコーディングしたものであり
ない
ポインタです。したがって、GDBがあなたに言うことはまったく正しいのです。
0x208c
をポインタとすると、そのポインタは読み取り可能なメモリを指していないことになります。
x/xwの代わりにprintステートメントを使うことがようやくわかりました。
との違いを理解していないようですね。
print
と
examine
コマンドを使用します。この例で考えてみましょう。
int foo = 42;
int *pfoo = &foo;
上記と一緒。
print pfoo
を指定すると
アドレス
の
foo
であり、かつ
x pfoo
を与えると
値
の値は,そのアドレスに格納されています。
foo
).
関連
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み] Bashスクリプト内で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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み】警告:式の結果が未使用の場合
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない