如果我们用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获得。 我的问题是,我可以知道gs的实际虚拟地址:0x14与gdb? gs段选择器值表示GDT的偏移量 但是,诸如gdb之类的用户级进程无法访问GDT信息。 如何使用gdb或其他调试器找出gs段的基址? 这不可能吗?
提前谢谢。