如果我们用 gcc 编译一些 C 代码,我们经常会看到以下汇编结果
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 段的基地址?这是不可能的吗?
先感谢您。