一部の C コードを gcc でコンパイルすると、次のアセンブリ結果が表示されることがよくあります。
0x08048494 <+0>: push ebp
0x08048495 <+1>: mov ebp,esp
0x08048497 <+3>: and esp,0xfffffff0
0x0804849a <+6>: sub esp,0x130
0x080484a0 <+12>: mov eax,DWORD PTR [ebp+0xc]
0x080484a3 <+15>: mov DWORD PTR [esp+0x1c],eax
0x080484a7 <+19>: mov eax,gs:0x14
これは単純な関数のプロローグです。+19 行から、スタック プロテクターの値が gs:0x14 から取得されていることがわかります。私の質問は、gdb で gs:0x14 の実際の仮想アドレスを知ることはできますか? gs セグメント セレクターの値は GDT からのオフセットを示しますが、gdb などのユーザー レベルのプロセスは GDT 情報にアクセスできません。gdb または他のデバッガーを使用して gs セグメントのベースアドレスを特定するにはどうすればよいですか? これは不可能ですか?
前もって感謝します。