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

はじめてのにき

ここの位置付け

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|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ToDo:


2006-09-11

_ woさんが言ってたのは

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)

_ 常識的な範囲で短いHello world!

	.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)

_ 284Byte

	.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://osask.jp/boyaki04.html

http://home1.catvmics.ne.jp/~msy/tak/alg/minhello.htm

(03:22)

_ 116Byte

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)

_ 76Byte

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)

_ ttyplayer

はヒキコモリプレゼンの一形態なんだよなぁと。

(11:33)

_ Ruby2C

http://rucila.s43.xrea.com/memo/?date=20050205#p03

ObjC ならラクじゃねってのは面白いなぁ。

  • LD_PRELOAD とかで、 rb_define_method とかをまるまる奪い取り
  • rb_define_method とかしても ObjC のメソッド作ってるだけだぜ hehehe...
  • ここまでできれば後は Ruby を適当にパースして ObjC に修正するだけだ!(それが大変だとも)

(12:44)

_ ふむ

log(-1) = -i pi/2 か。

(12:56)

_ あと一時間で

バレずに section 1つ増やすことは可能だろうか。

(13:25)

_ あまり間に合っていないが

まぁいいか…

(14:32)

_ 途中から数えてみた

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)

_ 52Byteでオーバーラップすると

どうしてもうまくいかん理由不明

(16:54)

_ この52Byte

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)

_ あーreadableじゃない

からかな…

(17:35)

_ いやむしろ

R ついてない方が動いてるんだよな。 E は結局いるんだっけか… いるとしても 1Byte e_phoff をズラすのは至難の技だ。

(17:39)

_ 1Byte程度の調整は

e_entry と p_filesz がカチあうのでダメ。

あと p_type を e_shoff の位置から始めるのは、 e_shnum と p_filesz がかぶってしまってダメっぽいんだよね。

(17:43)

_ つーことは

今の linux/x86 では 76Byte のバイナリが最低?

(17:45)

_ かと言って

CISC以外だとコードサイズの方がデカくなるだろうしのう。

(17:51)

_ bball

http://osask.jp/boyaki04.html#bball

作ってみたいが線をひくAPIなんて当然ないよな。

リロケーションが入ったらそりゃダメだろうし、 となると fb に根性でほげほげとかになるのだろうかなぁ。 なんか200Byte程度ならできそうな気がしてしょうがないんだが。

(18:03)

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

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
まったく確認してないけど、これ45?

_ yupo5656 (2014-05-24 02:43)

と思ったらhatenaのほうでとっくに既出のURLでしたねー。失礼しました。

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

そのあたりはとりあえず動作しないんですよね。昔は今よりチェック甘かったのかなぁと思います。やりたいことは私の方針とほとんど同じみたいです。EhdrとPhdrを限りなくオーバーラップさせる感じです。

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

ついでに調べたんですが、 tiny.tar.gz に入ってる ls なんかは動くんですが、これは私が成功した例と同じ位置でオーバーラップさせてるみたいです。というわけで今の環境で動かすには76Byteが最低容量な気がします…

_ yupo5656 (2014-05-24 02:43)

面白そうなので私もいろいろ追試してみまーす。PT_LOADのとこのEは、exec-shield効いてないなら不要(Rがあればいい)、効いているなら必要、でよいかと。

_ yupo5656 (2014-05-24 02:43)

とおもったけどやってみるとあやしいな(そんなんばっか)。もうちょい考えます。

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

私が調べた限りでは、 E は必須みたいです。 R はいらないです。 exec-shield は切れてるはずなんですが、ほげほげ。まぁ追試に期待ですはい。

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

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
1.shinh(2014-05-24 02:43) 2.k.inaba(2014-05-24 02:43) 3.YT(2014-05-24 02:43)
search / home / index

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

shinichiro.hamaji _at_ gmail.com / shinichiro.h