トップ «前の日記(2006-12-17) 最新 次の日記(2006-12-19)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|

ToDo:


2006-12-18

_ BSEとSARSは人生先生の仕業だったかー

(00:39)

_ ぐぐーる

http://blog.japan.cnet.com/kenn/archives/003431.html

via http://blog.livedoor.jp/dankogai/archives/50716491.html

そういえばセンセは レスポンスの速度が何故あんなに速いのか、 と気にしてたみたいだ。 ハッシュとか転置インデックスがほげほげとか説明した。 んでページランクがほげほげとかは全然興味ないみたいだった。

(02:37)

_ 愛と勇気とかしわもち

http://members.jcom.home.ne.jp/wtetsu/love/manual.html

今度やてみる

(03:31)

_ やってみた

ゲームで悲しくなる演出できるってのはすごいなぁ。

(04:09)

_ 括弧の無い LISP

http://lispuser.net/memo/lisp/2006-03-30-23-58.html

前も見たけどメモ。

括弧の無い SRFI ってあったと思うんだけどどこだっけなぁ。

(04:23)

_ abstract

  • いろんな状態を使って測定精度を議論
  • どういう状態がいいか

(04:28)

_ 本当はどうでもいい男

http://www.google.co.jp/search?q=%E3%81%A9%E3%81%86%E3%81%A7%E3%82%82%E3%81%84%E3%81%84&lr=lang_ja

下の方見てみると、

関連検索:
本当はどうでもいい男    どうでもいい山    crazyさゆどうでもいい日記
どうでもいいニュース    どうでもいい話    どうでもいい疑問

誰がそんな検索するねん…

(05:57)

_ 今いる関数のアドレス

ちなみに call 使わないで。

typedef struct frame {
    struct frame *next;
    void **ret;
} frame;

void f() {
    frame *ebp = (frame *)__builtin_frame_address(0);
    printf("ebp = %p\n", ebp);
    void **ret = (void **)ebp->ret;
    printf("ret = %p\n", ret);
    void **rel = (void **)*(ret-1);
    printf("rel = %p\n", rel);
    printf("main = %p\n", (int)ret+(int)rel);
}

int main() {
    f();

    frame *ebp = (frame *)__builtin_frame_address(0);
    printf("ebp = %p\n", ebp);
    void **ret = (void **)ebp->ret;
    printf("ret = %p\n", ret);
    void **rel = (void **)*(ret-1);
    printf("rel = %p\n", rel);
    printf("main = %p\n", (int)ret+(int)rel);

    return 0;
}

main の方はなんか違うんだな。 めんどくさいのう。

i@u ~/wrk/binhacks> ./a.out
ebp = 0xbf828948
ret = 0x80483dd
rel = 0xffffff77
main = 0x8048354
ebp = 0xbf828974
ret = 0xbf8289e8
rel = 0x80482b0
main = 0xc7870c98

(07:22)

_ main の先頭で

movl    8(%ebp), %esi

でオケ。 他環境でもこうなってるのかしら。

さっきのでうまくいかん理由は

call *8(%ebp)

で main に飛んできてるからだった。

(07:51)

_ dll 直接リンク

http://d.hatena.ne.jp/alohakun/20061217#c1166421511

なんかローダじゃなくて静的リンクって話ですよね。 私はむしろなんでできないのかが結構不思議だと思ってました。 ツールチェーン作る時ってたぶん、 コンパイラ作る→ .a 的な .lib を作れるようにする→ .a 的な .lib から .def だの import ライブラリ作れるようにする→ .dll 作れるようにする→ (おまけとして) .dll から .def だの .lib をひっこ抜けるようにする、 みたいな流れで作るからかなぁ。

こっちは普通に GNU toolchain ならできるわけで…

i@un ~/test> cat a.c
void a() { puts("Hello"); }
i@un ~/test> cat b.c
void a();
void main() { a(); }
i@un ~/test> gcc -o a.so a.c -shared
i@un ~/test> gcc b.c a.so -o b
b.c: In function 'main':
b.c:2: 警告: return type of 'main' is not 'int'
i@un ~/test> LD_LIBRARY_PATH=. ./b
Hello

なんつーかこのへんってバッドノウハウの山なんだよなぁ。 概念的には別に難しくもなんともないのに、 人為的に難しくされてる感じ。

GNU toolchain

  • あんまりスマートじゃない ld
  • 謎の ld script
  • そもそも gcc -v したら collect2 って何
i@u ~> file /usr/lib/libc.so
/usr/lib/libc.so: ASCII C program text
  • ちなみに Fedora ではこのファイルは TCC コンパチじゃなかったりする→ AS_NEEDED 以降を消す

Windows 一般

  • なんで export してくれないの! (Unix屋は100%騙される)
  • __declspec? dllimport?? dllexport??? → SDL/begin_code.h とかわかりやすい
  • LD_PRELOAD はどこですか→ KERNEL32.DLL を入れ替えて下さい (クラカー並の対処だぜ!Unixバイナリヤン→かこいいイメーヂ。 Windowsバイナリヤン→不審人物)
  • dll をリンクさせてよおにいちゃん!
  • ELF と COFF と OMF をリンクして PE を作ってごらん。

Cygwin/MinGW

  • どうやって dll 作るの
  • どうやって dll から import ライブラリ作るの
  • dlltools, dllwrap って何このアレなオプション体系 (どれが出力でどれが入力なの!?!バッドラッパー?!?!?? :-)))))))))
  • 先生 ldd がありません!→ objdump -p hoge.dll | grep dll
  • 「cygwin1.dll がありません」
  • nm で dll のシンボルが見えないの… (VCについてるツールとかなら見れるのにっ!)
  • objdump -x hoge.dll →発狂
  • .a を指定する順番で挙動が変わるんですけど… →複数回指定するのが安全。例: gcc foo.a bar.a foo.a bar.a
  • ぐにゅーは Windows が嫌いなんだね!→その通りです (でもCygnusかなぁ)

OMF (Borland)

  • コマンドライン的には、実はすごい快適な環境だったりはする
  • implib, impdef 完備!まともなオプション達!
  • でも VC のランタイムとかからんでくると死ねるぜー (これは Windows 共通)

OMF (Digitalmars)

  • link.exe の冗談みたいなオプション群!
  • implib も使えるか否かの瀬戸際ギリギリ感! impdef はアリマセン!

COFF (VC)

  • そもそも implib 標準に確か無いよねっみたいなっ…
  • link.exe の /IMPLIB オプションは dll 作る時だけなんだよねみたいなっ…
  • COFF2OMF は危険な香り。逆も
  • VC とつきあう方法は色々昔しらべたけど忘れたにゃー

Mach-O

  • 先生 ldd がまたありません!→ otool -L
  • 先生 objdump → otool
  • -F オプションはいいとして、 -framework オプションて!あなた規律を乱していますっ! -f は最適化ちゃうんかい!
  • ディレクトリにしか見えない実行ファイル、 .app
  • ディレクトリにしか見えない dll 、 .framework
  • dll は相対パスでリンクできる: otool -L hoge → @executable_path/../Frameworks/..... →ほげー??? :-)))))))))))))))))))))
  • .a を指定する順番で挙動が変わるんですけど… →複数回指定するのが安全。例: gcc foo.a bar.a foo.a bar.a
  • ranlib が必要な環境。→ ar は crus 以外許しませんよっ
  • mv hoge.a directory しただけでもう一度 ranlib が必要
  • ぐにゅーは Mac が嫌いなんだねっ!→やる気が無いだけじゃね
  • まぁ Apple のドキュメント見ると謎は氷解していったりはする

総括

  • そもそも WINE で動かしてるのが余計トラブル増やしてるんですっ!
  • 気がついたらものすごい文章量ですよっ!→積年の恨みが
  • 今度まとめよう

(17:28)

_ どうでもいいけど

ld って不自然に遅いよね。

あとで試す (2年越しの負債): http://www.issei.org/diary/?20040417#17-1

(17:42)

_ ご趣味は?

クロスプラットフォームです。 無尽蔵に時間が使えます。

(17:45)

_ Cygwin/MinGW

  • Cygwin → Cygwin のセルフコンパイラ: setup.exe
  • Cygwin → MinGW のクロスコンパイラ: setup.exe
  • MinGW → MinGW のセルフコンパイラ: MSYSと一緒に入れるアレ
  • MinGW → Cygwin のクロスコンパイラ: あるんだろうか。作れるんだろうか

(17:48)

_ おばあちゃんのちえぶくろ

binutils は全部のバイナリ読めるのをビルドしておくとべんり。

i@uk:/data/backup/usr/local/stow/binutils-2.16/bin$ ls -lh
total 29M
-rwxr-xr-x  1 root root 2.0M Oct 25  2005 addr2line
-rwxr-xr-x  1 root root 2.0M Oct 25  2005 ar
-rwxr-xr-x  1 root root 2.7M Oct 25  2005 as
-rwxr-xr-x  1 root root 2.0M Oct 25  2005 c++filt
-rwxr-xr-x  1 root root 2.3M Oct 25  2005 gprof
-rwxr-xr-x  1 root root 2.7M Oct 25  2005 ld
-rwxr-xr-x  1 root root 2.0M Oct 25  2005 nm
-rwxr-xr-x  1 root root 2.4M Oct 25  2005 objcopy
-rwxr-xr-x  1 root root 2.6M Oct 25  2005 objdump
-rwxr-xr-x  1 root root 2.0M Oct 25  2005 ranlib
-rwxr-xr-x  1 root root 410K Oct 25  2005 readelf
-rwxr-xr-x  1 root root 1.9M Oct 25  2005 size
-rwxr-xr-x  1 root root 1.9M Oct 25  2005 strings
-rwxr-xr-x  1 root root 2.4M Oct 25  2005 strip

ただデカいのはともかく、 起動がえらい遅いので日用にはならぬー

(17:52)

_ 人為的に難しく作って

ハカーを育てているんじゃよ。ぐにゅーは…

ちなみに Windows 企業は IDE の購入を促進している/た

(17:54)

_ GDC

diff でかいなぁ。 そのままコンパイラ通るといいんだけど

(22:23)

本日のツッコミ(全2件) [ツッコミを入れる]
_ rui (2014-05-24 02:58)

「カッコのないLisp」のSRFIはきっとこれのことですね。

SRFI-49: Indentation-sensitive syntax
http://srfi.schemers.org/srfi-49/srfi-49.html

_ shinh (2014-05-24 02:58)

ああそれですそれです。ありがとうございました。

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

2006年
12月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
1.Kim (2021-04-19 15:39) 2.shinh(2014-05-24 02:58) 3.rui(2014-05-24 02:58)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h