Fork me on GitHub

cuspy memo


codepad.org

2008/03/08 Saturday 00:06:06

秋元さんの blog経由でこんなの発見

http://codepad.org/

がーん、似たようなものを作ろうとしてたのに先越されてしまった。
でもさすがに実行出来るページを公開しようとは思ってなかったな。
Cのコードを実行出来るなんてとっても危険な予感がする。破れるものなら破ってみろ見たいな事が書いてあるのでいろいろイタズラをしてみたけどほとんどのシステムコールは無効にされている様子。どのレベルで防いでいるのか解らなかったのでスタックに置いたコードから system call を呼んでみる。

http://codepad.org/h9rGgGop

これは、「/etc/passwd を open(2) して返値を表示するコード」をスタックに置いて実行するプログラム。アセンブリコードは以下の通り

segment .text
global _start
_start:
        push    ebp
        mov     ebp, esp
        mov     eax, 0x00647773
        push    eax
        mov     eax, 0x7361702f
        push    eax
        mov     eax, 0x6374652f
        push    eax
        mov     eax, 5  ;write
        mov     ebx, esp
        mov     ecx, 0
        int     0x80
        add     eax, '0'
        push    eax
        mov     eax, 4  ;write
        mov     ebx, 1  ;stdout
        mov     ecx, esp
        mov     edx, 1
        int     0x80
        leave
        ret

上手くいけば open(2) したファイルディスクリプタが表示されるはずなんだけど、がっちり防がれている。
kernel に 手を入れて system call 制御しているのかなと思ったんだけど、良く読むと ptrace で制御しているんだそうな。ptrace ってデバッグ用のシステムコールだと思ってたんだけどこんな事もできるんだな。今度使ってみたい。

  1. Robert wrote related post…

    Silk posts and stories…

    Trackback by Robert wrote related post — 2008/06/19 Thursday @ 22:01:38

Leave a comment

You must be logged in to post a comment.

データ圧縮の究極

2008/03/07 Friday 05:02:22

データ圧縮の究極より

25 名前: 名無しさん@1周年 投稿日: 2000/11/09(木) 20:42
円周率は、それを任意の桁まで求めるプログラムによって
完全に表現できるじゃん?
これこそ、究極の圧縮。

26 名前: >25 投稿日: 2000/11/09(木) 20:56
確かに圧縮率は飛び抜けて良いが、復元速度が鬼のように遅ぞ。

このアルゴリズム。定期的に見かけるけど、冗談抜きで実用的なんじゃないかと思う。
円周率をインデックシングしたデーターベースで保持することでパフォーマンスの問題は解決するし、容量が問題になるならネットワーク越しに得ればよい。
#ネットワークストレージが使えるんなら THcompこそ究極なんだろうけど、世界共通の円周率を外部記憶に外出しするという意味では優位性がある。例えば任意の桁から任意の長さの円周率を返す πサーバーが世界の何処かに在ればよい。
どれくらいの桁の円周率でどれほどの圧縮率が得られるのか知りたい。誰か実装した人はいるんだろうか。
後で調べる。

  1. Robert wrote related post…

    Silk posts and stories…

    Trackback by Robert wrote related post — 2008/06/19 Thursday @ 19:20:27

Leave a comment

You must be logged in to post a comment.

リュカ数をプロットする

2008/03/05 Wednesday 04:42:41

この前フィボナッチ関数のグラフを gnuplot で描いた時に sakaik さんから詳しい書き方を聞かれたので、今回はリュカ数をプロットしてその手順を詳しく書いてみる。

リュカ数列とは、フィボナッチ数列が

F_0=0
F_1=1
F_{n+2}=F_n + F_{n+1}

と定義されるのに対し初期値を

F_0=2
F_1=1

とした時の数列をリュカ数列と呼ぶらしい。see リュカ数 – Wikipedia
具体的には

2, 1, 3, 4, 7, 11, 18, 29

みたいな感じ。
この数列を実数(複素数)の世界に拡張して、入力を z(レンジは -5 〜 5), 出力の実部を x 軸, 虚部を y 軸にプロットしてみる。

ソースコード(lucas.c)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <complex.h>

#define THETA 1.618034

double complex clucas(double i)
{
    double complex c = cpow(-THETA, -i);
    return (pow(THETA, i) + creal(c)) + cimag(c) * I;
}

void plot_clucas(double min, double max)
{
    double z;
    double complex c;
    for(z=min; z<max; z+=0.1){
        c = clucas(z);
        printf("%lf\t%lf\t%lf\n", creal(c), cimag(c), z);
    }
}

int main(int argc, char *args[]){
    plot_clucas(-5, 5);
    return EXIT_SUCCESS;
}

これをコンパイルして実行する

% gcc -lm lucas.c -o lucas
% lucas > lucas.dat

次にこんな感じの plt ファイル(lucas.plt)を用意して

set term png
set output "lucas.png"
splot "lucas.dat" with lines

gnuplot を実行すると・・・

% gnuplot lucas.plt

グラフの出来上がり!

lucas

ついでなので fibonacci 関数と混ぜてみる。

merge

赤がリュカ数で緑がフィボナッチ。

  1. Robert wrote related post…

    Silk posts and stories…

    Trackback by Robert wrote related post — 2008/06/19 Thursday @ 22:07:54

Leave a comment

You must be logged in to post a comment.

ブックマーク管理ツール選び

2008/03/03 Monday 23:27:56

ブックマーク管理ツールの sitebar を長らく使ってきたんだけど、この sitebar の欠点は最大 500 リンクまでという制限があること。今日その 500 に達してしまったので別のブックマークツール選定中。(自前で sitebar を運用するってう手もあるんだけど、sitebar のバージョンアップが割と頻繁にあって最新版に追従するのが面倒になって止めた経緯がある)
Bookmark ツールで有名所は del.icio.us, furl, spurl あたりかな。知名度で言えば圧倒的に del.icio.us の一人勝ちのような感じ(alexa調べ)だけど機能面ではどうだろうか。
特に furl と spurl に在るコンテンツのまるごとキャッシュ機能が素晴らしい。何が良いってブックマークの全文検索が出来る。 (タグとか付けなくて良い)
しばらく furl と spurl を両方使ってみて気に入った方を使い続けようかな。他にオススメのブックマークツールがあったら教えて下さいな。

# digg, reddit、はてブはどちらかというとソーシャルニュースサイトの様なきらいがあるので避けた。

No comments yet.

Leave a comment

You must be logged in to post a comment.

< Previous Page