アセンブリエラーです。Warning: Warning: ブレークポイント 1 を挿入できません。Cannot access memory at address 0x1135 解決策(ブレークポイントを挿入せずに1回目の実行を行う)
2022-02-25 23:12:51
linuxでgdbによる中断点デバッグを行ったところ、以下のようなエラーが発生しました。
(gdb) run
Starting program: /home/dontla/desktop/test/test
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x1135
回避策
GDBを先に終了させる
(gdb) quit
A debugging session is active.
Inferior 1 [process 32756] will be killed.
Quit anyway?
dontla@dontla-virtual-machine:~/desktop/test$ c
そして、gdbでプログラムを開き、デバッグのために中断する前に実行します。
dontla@dontla-virtual-machine:~/desktop/test$ gdb . /test
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from . /test...
(No debugging symbols found in . /test)
(gdb) run
Starting program: /home/dontla/desktop/test/test
[Inferior 1 (process 32770) exited with code 03]
(gdb) disas main
Dump of assembler code for function main:
0x0000555555555130 <+0>: mov $0x1,%eax
0x000055555555555135 <+5>: mov $0x2,%ebx
0x00005555555555513a <+10>: add %ebx,%eax
0x00005555555555513c <+12>: retq
0x00005555555555513d <+13>: nopl (%rax)
End of assembler dump.
(gdb) break *0x000055555555555135
Breakpoint 1 at 0x55555555555135
(gdb) run
Starting program: /home/dontla/desktop/test/test
Breakpoint 1, 0x000055555555555135 in main ()
(gdb)
というのもあります。
データブレークポイントの設定が間違っていることが原因です。disasemble命令でディスアセンブルされたアセンブリ言語の左側のアドレスオフセットアドレスは、実行ファイルをgdbで実行するまで論理的なアドレスではありません。そのため、break命令でブレークポイントを設定できても、gdbの実行時にはこのアドレスにアクセスすることは不可能です。そこで、上記のようなエラーが発生するのです。
データブレークポイント:メモリアドレスにブレークポイントを設定し、そのアドレスの内容を変更するとブレークポイントが発生し、そのアドレスに実行するとブレークポイントが発生します。(参考までにWebより)プログラムは物理アドレスではなく論理アドレスを与え、物理アドレスはシステムによって論理アドレスにマッピングされるということを最初に知っておく必要があります。
参考記事 GDB data data break(メモリブレークポイント)エラー。Warning: ブレークポイントを挿入できません
関連
-
Ubuntu で vs code のソースファイル "iostream" を開けない。
-
解決策 VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
find:表現上の問題と解決策の前に、道筋がなければならない
-
BadPaddingException:与えられた最終ブロックが適切にパディングされていない
-
c/c++][gcc] 'std::basic_string ...' への未定義の参照。
-
Werror=unused-but-set-variableエラーの解決法
-
Linuxセキュリティの知識と導入(説明例)
-
NoSQLのredisを解説
-
Python スクリプトエラー AttributeError: 'module' オブジェクトに attribute'xxx' がない Solution
-
Apacheのコンパイルとインストール、共通設定
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Linuxシェルプログラミングにおける不正な置換の解決法
-
linux シェルスクリプト実行エラー:不正な置換
-
コマンドラインからDSOが見つからないことに遭遇した
-
エラー: 'for' ループの初期宣言は C99 モードでのみ許可されます。
-
scpコマンドが通常のファイルでないことを報告する問題の解決法
-
名前解決のエラー解決に一時的な障害が発生
-
redis 共通のデータ型と操作
-
MySQL 5.7.28 ワンクリックインストールスクリプト
-
Replace invisible characters in linux vi ^@^A\^M etc.
-
linux report エラー chown: 無効なユーザーです。