据我所知,堆栈金丝雀就像萤火虫一样工作:程序启动时会生成一个随机值,并将其存储在线程本地存储(%fs:0x28
)中。然后,在每个函数调用中将这个随机值推送到堆栈上,以供以后对照。
关于TLS地区的“大师饼干”,我有两个问题:
在这个布局中,线程本地存储在哪里?
发布于 2019-07-10 06:28:43
pthread_create
创建新线程时,程序员可以传递一个指向内存的指针,作为线程的堆栈。此内存的位置取决于如何分配内存。如果没有使用预先分配的内存,那么使用mmap
分配内存区域,NULL
作为addr
参数,让内核决定内存映射的位置。在x86_64上,以这种方式分配的内存位于堆栈和堆之间。https://unix.stackexchange.com/questions/528424
复制相似问题