libc 在哪些平台上将堆栈 cookie 值存储在 __stack_chk_guard 以外的位置?
例如,Linux/i386 上的 glibc 将 cookie 存储在 %gs:0x14
处。除了 __stack_chk_guard
符号之外,是否还有其他平台需要我查看其他地方才能找到 cookie?
(这是 gcc -fstack-protector 生成的代码在函数序言中将值存储到堆栈上的位置,并在返回之前进行检查以防止堆栈崩溃)。
e.g glibc on Linux/i386 stores the cookie at %gs:0x14
. Are there any other platforms on which I need to look somewhere other than at the __stack_chk_guard
symbol to find the cookie?
(This is where the value that gcc -fstack-protector
-generated code stores onto the stack in function prologues and checks before return to defend against stack smashing).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从 gcc 源代码中定义 TARGET_THREAD_SSP_OFFSET 的
grep -B1
(或者使用 google codesearch http://www.google.com/codesearch?q=TARGET_THREAD_SSP_OFFSET&exact_package=http%3A%2F%2Fmosync。 googlecode.com%2Fsvn&hl=en )对于 glibc:
http://www.google .com/codesearch/p?hl=en#xy1xtVWIKOQ/pub/glibc/snapshots/glibc-latest.tar.bz2%7CXP6Z3zoy3dk/glibc-20090518/elf/stackguard-macros.h&q=stack_chk_guard&exact_package=ftp:/ /sources.redhat.com/pub/glibc/snapshots/glibc-latest.tar.bz2&l=8
所以,看起来 gcc & glibc 始终对主要平台使用相同的位置,可通过 STACK_CHK_GUARD 宏进行访问
Do a
grep -B1
of TARGET_THREAD_SSP_OFFSET define from gcc sources (or do this grep online with google codesearch http://www.google.com/codesearch?q=TARGET_THREAD_SSP_OFFSET&exact_package=http%3A%2F%2Fmosync.googlecode.com%2Fsvn&hl=en )And for glibc:
http://www.google.com/codesearch/p?hl=en#xy1xtVWIKOQ/pub/glibc/snapshots/glibc-latest.tar.bz2%7CXP6Z3zoy3dk/glibc-20090518/elf/stackguard-macros.h&q=stack_chk_guard&exact_package=ftp://sources.redhat.com/pub/glibc/snapshots/glibc-latest.tar.bz2&l=8
So, it seems that gcc & glibc always uses the same place for major platrofms, accessible via STACK_CHK_GUARD macro