タグ

LinuxとLibraryに関するnirvashのブックマーク (6)

  • ld -z relro で GOT overwrite attack から身を守る - memologue

    GOT overwrite? "GOT overwrite" という、(ここでは特にLinuxの)プログラムに対する攻撃方法があります。攻撃が成功すると、そのプロセスの権限での任意コード実行等、深刻な被害を受けます。最近のGNU ld(リンカ)のオプションを用いると、この攻撃から身を守ることができるそうですので、紹介します。 最初にまとめ (こまかいことはあとで) GOT overwrite から身を守るには、gccでプログラムをリンクするときに、 -Wl,-z,now,-z,relro をつけるだけです。起動時間が遅くなるというトレードオフがありますが、GOTがreadonlyになります。GOTがreadonlyなら、GOT overwrite attack を受けたときに、プロセスがSEGVしてくれますので、安全性が高まります。プロセスのメモリマップを確認すると、きちんと w が落ちて

    ld -z relro で GOT overwrite attack から身を守る - memologue
  • いやなブログ: Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか

    Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか 通常、Linux の共有ライブラリを作るときは各 .c ファイルを PIC (Position Independent Code) となるようコンパイルします。しかし、実は PIC でコンパイルしなくても共有ライブラリは作れます。それでは PIC にする意味はあるのでしょうか。 さっそく実験してみます。 int func () { printf(""); printf(""); printf(""); } PIC でコンパイルするには gcc に -fpic または -fPIC を渡します。-fpic の方が小さく高速なコードを生成する可能性がありますが、プロセッサによっては -fpic で生成できる GOT (Global Offset Table) のサイズに制限があります。一方、-fPIC はどのプロセッサで

  • 共有ライブラリはスタティックライブラリよりもオーバヘッドがあるの?

    2006年3月11日 (土曜日) 12:43:00 # Life 共有ライブラリはスタティックライブラリよりもオーバヘッドがあるの? 最近のLinuxで共有ライブラリを利用したプログラムを利用する場合, スタティックリンクの場合との違いとして, 関数呼び出しは一旦pltセクションというところのジャンプ命令を経由して 当の関数を呼び出すようになります. この背景としては,共有ライブラリがロードされるアドレスというのが事前に決定できないため, ロードしてから関数呼び出すのアドレスを解決するという現状のELFのダイナミックローディングの仕様があります. それを実現するために text セグメント(プログラムの実行可能データの領域.ジャンプ命令の呼び出し先アドレスなどが書かれている)を全部書き換えれるようにしてしまうと 実行バイナリをそのままmmapで読み込み専用で読み込めないことになります.

    nirvash
    nirvash 2006/07/13
    plt を経由する分遅い
  • ひげぽん OSとか作っちゃうかMona- - 共有ライブラリお作法まとめ

    ACさんから教えていただいた Program Library HOWTO: http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/ 非常によくまとまっていて疑問が氷解しました。 重要そうなところを引用します。 静的ライブラリ .aは静的ライブラリ。arコマンドでオブジェクトファイルをまとめたもの。 静的ライブラリは -l オプションでリンクを行う 共有ライブラリ すべての共有ライブラリは「soname」という特別な名前をもつ。 ディレクトリ名libxxx.so.バージョン番号 バージョン番号はインターフェースが変わったときに変わる。 すべての共有ライブラリは「realname」という特別な名前を持つ。 soname.マイナー番号.リリース番号 「linker name」 sonameからバージョン番号を除いたもの ldconfig は

    ひげぽん OSとか作っちゃうかMona- - 共有ライブラリお作法まとめ
  • Program Library HOWTO

    語訳:2004 年 9 月 17 日 (原文:2003 年 4 月 28 日、バージョン 1.20) この HOWTO はプログラマ向けであり、Linux におけるプログラムライブラリの作成方法と使用方法を説明するものです。 「静的ライブラリ (static library)」、「共有ライブラリ (shared library)」、「動的ライブラリ (dynamically loaded library)」を対象とします。 (訳注:この訳文では、「dynamically loaded library」のことを「動的ライブラリ」と呼ぶことにします。 世の中では、shared library のことを指して動的ライブラリと表現する例もありますが、それとは異なりますので注意してください。) Table of Contents1. はじめに2. 静的ライブラリ3. 共有ライブラリ3.1. 約

  • http://www.freedesktop.org/wiki/Software_2fXgl

    nirvash
    nirvash 2006/05/07
    公式サイト
  • 1