tgoop.com/gdb_dbg/137
Last Update:
Копаем чуть глубже, обнаруживаем, что glibc решила поаллоцировать на нашем стеке static TLS (т.е. место под объекты thread-local-storage, используемые именно из бинаря, а не загруженных модулей). Довольно подробно все устройство TLS описано вот здесь, при том в последнем параграфе интересное уточнение: "в glibc в случае тредов, создаваемых pthread_create
, static TLS рисуется прям на стеке создаваемого треда, так что получается сэкономить на аллокации!".
Это может с натяжкой звучать логично для сценария, когда аллокацией стека занимается сама glibc, но давайте осознаем, что происходит в нашем случае. Мы аллоцируем память под стек своего треда (ориентируемся при этом на заданный -Xss
), расписываем там себе защищенные страницы, в общем, готовим все к исполнению.
Потом приходит glibc и говорит: "Хочешь 256Kb стек? Хех, без проблем, но не забудь заплатить налог: нам еще нужно сколько то килобайт, чтобы нарисовать на твоем стеке static TLS". ↓
BY Алло, это отладочная?

Share with your friend now:
tgoop.com/gdb_dbg/137