我刚刚编译了一些 C 代码,gets
这些代码使用并反汇编了代码。该平台是 Ubuntu 32 位。
有这 3 行检查金丝雀值是否被篡改。
0x08048455 <+33>: mov edx,DWORD PTR [esp+0x7c]
0x08048459 <+37>: xor edx,DWORD PTR gs:0x14
0x08048460 <+44>: je 0x8048467 <main+51>
我设置了一个断点0x08048459
,看到gs
寄存器的值为 0x33。
我的问题是:
- 鉴于 gs 是 0x33,gs:0x14 是什么?0x33 是某个东西的索引吗?它是某种内存位置吗?
- 是否有任何 x86 指令将 gs 的值移动到任何其他寄存器?或者也许将它推入堆栈?