ToDo:
void hello() { int h[4]; h[0] = 'lleH'; h[1] = 'ow o'; h[2] = '!dlr'; h[3] = '\0\0\0\n'; write(1, h, 13); exit(0); }
とかすれば rodata 消せるって話か…
(02:30)
.section .text movl $1, %ebx movl $.LC0, %ecx movl $13, %edx movl $4, %eax int $0x80 decl %ebx movl $1, %eax int $0x80 .LC0: .string "Hello world!\n"
で300Byteだった。
(02:52)
.section .text xorl %ebx, %ebx incl %ebx movl $.LC0, %ecx movl $13, %edx movl $4, %eax int $0x80 decl %ebx xorl %eax, %eax incl %eax int $0x80 .LC0: .string "Hello world!\n"
(02:58)
.section .text leal 13(%eax), %edx incl %eax leal 4(%ecx), %ebx movl $.LC0, %ecx l: xchg %eax, %ebx int $0x80 jmp l .LC0: .string "Hello world!\n"
あとはヘッダをほげほげとかしか無いんだろうけど、
うーんすげえんだよなぁ。
http://home1.catvmics.ne.jp/~msy/tak/alg/minhello.htm
(03:22)
0000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 >.ELF............< 0000020 02 00 03 00 01 00 00 00 54 00 00 00 34 00 00 00 >........T...4...< 0000040 54 00 00 00 00 00 00 00 34 00 20 00 01 00 28 00 >T.......4. ...(.< 0000060 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 >................< 0000100 00 00 00 00 74 00 00 00 74 00 00 00 07 00 00 00 >....t...t.......< 0000120 00 10 00 00 8d 50 0d 40 8d 59 04 b9 65 00 00 00 >.....P.@.Y..e...< 0000140 93 cd 80 eb fb 48 65 6c 6c 6f 20 77 6f 72 6c 64 >.....Hello world< 0000160 21 0a 00 00 >!...<
(04:23)
0000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 >.ELF............< 0000020 02 00 03 00 01 00 00 00 44 00 00 00 2c 00 00 00 >........D...,...< 0000040 54 00 00 00 00 00 00 00 34 00 20 00 01 00 00 00 >T.......4. .....< 0000060 00 00 00 00 00 00 00 00 00 00 00 00 6c 00 00 00 >............l...< 0000100 6c 00 00 00 8d 50 0d 40 8d 59 04 b9 55 00 00 00 >l....P.@.Y..U...< 0000120 93 cd 80 eb fb 48 65 6c 6c 6f 20 77 6f 72 6c 64 >.....Hello world< 0000140 21 0a 00 00 >!...<
ちょうど100Byte
(04:46)
0000000 7f 45 4c 46 48 65 6c 6c 6f 20 77 6f 72 6c 64 0a >.ELFHello world.< 0000020 02 00 03 00 40 eb 09 00 14 00 00 00 2c 00 00 00 >....@.......,...< 0000040 8d 51 0d 8d 59 04 eb 10 34 00 20 00 01 00 00 00 >.Q..Y...4. .....< 0000060 00 00 00 00 00 00 00 00 89 d9 eb 08 49 00 00 00 >............I...< 0000100 49 00 00 00 93 cd 80 eb fb 00 00 00 >I...........<
これ以上小さくするのは無理な気がする。 エルフヘッダ52Byteとプログラムヘッダ32Byteは必須。 ただ8Byteはオーバーラップさせてるので、合計76Byteが必須になる気がする。 コードは全部ヘッダに埋めた。
(05:22)
http://rucila.s43.xrea.com/memo/?date=20050205#p03
ObjC ならラクじゃねってのは面白いなぁ。
(12:44)
lampedusa,diu,graciosa,kaula,aratika,oahu,graciosa,roosevelt,hareoen,pianosa,ustica,long,liberty,burano,nuulua,abumusa,chorao,antao,perejil,nuulua,cies,lanai,aracena
ガイシュツだった
http://slashdot.jp/~MK/journal/373378
(15:19)
0000000 7f 45 4c 46 01 00 00 00 00 00 00 00 00 10 00 00 >.ELF............< 0000020 02 00 03 00 34 00 00 00 20 10 00 00 04 00 00 00 >....4... .......< 0000040 40 cd 80 00 00 00 00 00 00 00 20 00 01 00 00 00 >@......... .....< 0000060 00 00 00 00 >....<
なんで動かないのかしら…
59Byte の hello.asm も同じ方式でやってるぽいので、 落ちる理由は同じってことかなぁ…
2,7c2,7 < マジック: 7f 45 4c 46 48 65 6c 6c 6f 20 77 6f 72 6c 64 0a < クラス: <不明: 48> < データ: <不明: 65> < バージョン: 108 <unknown: %lx> < OS/ABI: <不明: 6c> < ABI バージョン: 111 --- > マジック: 7f 45 4c 46 01 00 00 00 00 00 00 00 00 10 00 00 > クラス: ELF32 > データ: なし > バージョン: 0 > OS/ABI: UNIX - System V > ABI バージョン: 0 10,15c10,15 < バージョン: 0x9eb40 < エントリポイントアドレス: 0x14 < プログラムの開始ヘッダ: 44 (バイト) < セクションヘッダ始点: -1928572531 (バイト) < フラグ: 0x10eb0459 < このヘッダのサイズ: 52 (バイト) --- > バージョン: 0x34 > エントリポイントアドレス: 0x1020 > プログラムの開始ヘッダ: 4 (バイト) > セクションヘッダ始点: 8441152 (バイト) > フラグ: 0x0 > このヘッダのサイズ: 0 (バイト) 28c28 < LOAD 0x000000 0x00000000 0x08ebd989 0x0004c 0x0004c WE 0xfb --- > LOAD 0x000000 0x00001000 0x00030002 0x00034 0x01020 R 0x80cd40
< の方は動いてる。
(17:30)
e_entry と p_filesz がカチあうのでダメ。
あと p_type を e_shoff の位置から始めるのは、 e_shnum と p_filesz がかぶってしまってダメっぽいんだよね。
(17:43)
http://osask.jp/boyaki04.html#bball
作ってみたいが線をひくAPIなんて当然ないよな。
リロケーションが入ったらそりゃダメだろうし、 となると fb に根性でほげほげとかになるのだろうかなぁ。 なんか200Byte程度ならできそうな気がしてしょうがないんだが。
(18:03)
前 | 2006年 9月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
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 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
まったく確認してないけど、これ45?
と思ったらhatenaのほうでとっくに既出のURLでしたねー。失礼しました。
そのあたりはとりあえず動作しないんですよね。昔は今よりチェック甘かったのかなぁと思います。やりたいことは私の方針とほとんど同じみたいです。EhdrとPhdrを限りなくオーバーラップさせる感じです。
ついでに調べたんですが、 tiny.tar.gz に入ってる ls なんかは動くんですが、これは私が成功した例と同じ位置でオーバーラップさせてるみたいです。というわけで今の環境で動かすには76Byteが最低容量な気がします…
面白そうなので私もいろいろ追試してみまーす。PT_LOADのとこのEは、exec-shield効いてないなら不要(Rがあればいい)、効いているなら必要、でよいかと。
とおもったけどやってみるとあやしいな(そんなんばっか)。もうちょい考えます。
私が調べた限りでは、 E は必須みたいです。 R はいらないです。 exec-shield は切れてるはずなんですが、ほげほげ。まぁ追試に期待ですはい。