4

如果我们用 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 段的基地址?这是不可能的吗?

先感谢您。

4

0 回答 0