2015年5月5日のブックマーク (3件)

  • Exploits and defenses - sandbox いろいろ

    hhc0null
    hhc0null 2015/05/05
    sandbox
  • Thread local storage - 兼雑記

    http://dev.gentoo.org/~dberkholz/articles/toolchain/tls.pdf を読みました。 TLS の実装はざっくり言うと常に TLS 管理領域を指してるレジスタを一個作ってて、それをスレッドごとに別の値にするだけ。 86 ではセグメントレジスタが使われてる…くらいのざっとした理解はまぁ一般的にあると思うんですが、細かい実装となるとなかなか難しい。間違ってるとこあるかもですがなんか書いてみます。 TLS はまず、当に全スレッドが使うの? って話があるので、メモリ効率を考えると遅延ロードをした方がいい。ただ遅延ロードするとなるとどうしても関数呼び出しとかがからんで、最初に確保しておいた時のコードよりどうやっても遅くなる。 PLT みたいに関数の呼び出しがどっちにせよ起きるようなケースとは違って、 CPU とメモリのトレードオフがある。 基的には

    Thread local storage - 兼雑記
    hhc0null
    hhc0null 2015/05/05
    TLS behavior variations
  • スレッドローカルストレージ(TLS) - Linuxの備忘録とか・・・(目次へ)

    スレッドはグローバルは変数は共有しますが、マルチスレッドアプリケーションにおいて、スレッド固有のデータを保持したい場合があります。それを実現するのが、スレッドローカルストレージ(TLS)です。 func()を2つのスレッドとして作成します。そこでは、__thread int aとint bをインクリメントした値を表示しています。最初のスレッドではa = 1 b=1、次のスレッドではa = 1 b=2となっています。int aとしたならa=2なるところです。すなわち__thread int aはスレッド固有の変数というわけです。 #include <stdio.h> #include <pthread.h> __thread int a = 0; int b = 0; void *func(void *arg) { a++; b++; printf("a = %d b=%d\n", a, b

    hhc0null
    hhc0null 2015/05/05
    TLS implemention