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

はじめてのにき

ここの位置付け

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-11-09

_ ねむい

やるべきことキューがむちゃくちゃ

(04:05)

_ 今日は

ジョジョーが ELF golf とかの話を。

なんかみんな似たような嗜好が

(04:39)

_ hello76

NASMも触れんとなぁ、ということで Hello world! 76B を移植。 さらにゴルフしよう

; hello76.asm

BITS 32
        org     0x00000000
        db      0x7F, "ELF"      ; e_ident
        db      "Hello world!"
        dw      2                ; e_type
        dw      3                ; e_machine
_start: mov byte [EDI+0x10], 0xa ; e_version               ; set "\n"
        dd      _start           ; e_entry                 ; fall through!
        dd      phdr - $$        ; e_phoff
        lea     EDX, [ECX+0xd]   ; e_shoff
        lea     EAX, [ECX+0x4]   ; e_flags
        mov     ECX, EAX
        jmp short label1         ; e_ehsize
        dw      32               ; e_phentsize
phdr:   dd      1                ; e_phnum     ; p_type
                                 ; e_shentsize
        dd      0                ; e_shnum     ; p_offset
                                 ; e_shstrndx
        dd      0                              ; p_vaddr
label1: inc     EBX                            ; p_paddr
        jmp short label2
        db      0
        dd      76                             ; p_filesz
        dd      76                             ; p_memsz
        db      0xff                           ; p_flags
label2: int     0x80
        xchg    EBX, EAX
        xor     EBX, EBX                       ; p_align
        int     0x80
filesize equ    $ - $$

(05:37)

_ ふむ

このアプローチは賢いなぁとは思ったけど、 "Hello world" のある位置が 0x00200000 とかになっちゃって、 これがうっとうしいんだよなぁ…

さっきの Hello world は EAX(writeシステムコール) と ECX(4Byte目にHello worldが置いてある) が 一致してる、とかそういうのが美しいんだけど

; hello.asm

BITS 32
        org     0x00200000
        db      0x7F, "ELF"             ; e_ident
        db      "Hello world", 0xa
        dw      2                       ; e_type
        dw      3                       ; e_machine
;_start: jmp short label1                ; e_version
;        dw      0
        dd      1               ; e_version
        dd      _start          ; e_entry
        dd      phdr - $$       ; e_phoff
phdr:   dd      1               ; e_shoff       ; p_type
        dd      0               ; e_flags       ; p_offset
        dd      $$              ; e_ehsize      ; p_vaddr
                                ; e_phentsize
        dw      1               ; e_phnum       ; p_paddr
        dw      0               ; e_shentsize
        dd      filesize                ; e_shnum       ; p_filesz
                                        ; e_shstrndx
        dd      filesize                                ; p_memsz
;         db      0xff
        dd      5                                       ; p_flags
        dd      0x1000                                  ; p_align
;  _start: xor     eax, eax
;          inc     eax
;          int     0x80
;_start: mov byte [EDI+0x10], 0xa                        ; p_flags
_start: mov     ECX, 0x00200000                         ; p_align
        lea     EDX, [EDI+0xd]                          ; p_align
        lea     EAX, [EDI+0x4]
        lea     ECX, [ECX+0x4]
        inc     EBX
        int     0x80
        xchg    EBX, EAX
        xor     EBX, EBX
        int     0x80
filesize      equ     $ - $$

コメント無茶苦茶やな。

(06:14)

_ 78B

さっきのは 88B

うーん ! は無いしなんかなぁ。 x86 って文字列コピー命令とかあったと思うけど、 あのへん使うと完全に 76B にはならん気がするなぁ。

あと綺麗に重なりすぎてて fall through できないのも美しくないよなぁ。

(06:19)

_ 75B

あとはルール変えたらまだ縮むけどなぁ。

(06:31)

_ 74B

; hello.asm

BITS 32
        org     0x00200000
        db      0x7F, "ELF"             ; e_ident
        db      "Hello world", 0xa
        dw      2                       ; e_type
        dw      3                       ; e_machine
exit:   xor     EBX, EBX                ; e_version
        int     0x80
        dd      _start                  ; e_entry
        dd      phdr - $$               ; e_phoff
phdr:   dd      1                       ; e_shoff       ; p_type
        dd      0                       ; e_flags       ; p_offset
        dd      $$                      ; e_ehsize      ; p_vaddr
                                        ; e_phentsize
        dw      1                       ; e_phnum       ; p_paddr
        dw      0                       ; e_shentsize
        dd      filesize                ; e_shnum       ; p_filesz
                                        ; e_shstrndx
        dd      filesize                                ; p_memsz
_start: inc     ECX
        shl     ECX, 21
        lea     EDX, [EDI+0xd]
        lea     EAX, [EDI+0x4]
        add     ECX, EAX
        inc     EBX
        int     0x80
        xchg    EBX, EAX
        jmp     exit
filesize equ     $ - $$

とりあえず普通にやると exit 0 するコードはこんなとこかな

(06:42)

_ fall through もむずかしそう

(06:48)

_ 73B

exit 0

(07:11)

_ 73B と 72B

末尾の ! にこだわるとすると、 うーんうまく e_type, e_machine が fall through できなくて、

BITS 32
        org     0x00200000
        db      0x7F, "ELF"             ; e_ident
_start:
        inc     EBX
        mov     ECX, hello
        lea     EDX, [EDI+0xd]
        inc     EAX
        jmp     short label1
        dw      2                       ; e_type
        dw      3                       ; e_machine
label1:                                 ; e_version
        inc     EAX
        inc     EAX
        jmp     short label2
        dd      _start                  ; e_entry
        dd      phdr - $$               ; e_phoff
phdr:   dd      1                       ; e_shoff       ; p_type
        dd      0                       ; e_flags       ; p_offset
        dd      $$                      ; e_ehsize      ; p_vaddr
                                        ; e_phentsize
        dw      1                       ; e_phnum       ; p_paddr
        dw      0                       ; e_shentsize
        dd      filesize                ; e_shnum       ; p_filesz
                                        ; e_shstrndx
        dd      filesize                                ; p_memsz
        db      0xff
label2:
        inc     EAX
        int     0x80
hello:
        db      "Hello world!", 0x0a
filesize equ    $ - $$

で 73B 。これはセグる。 exit させたきゃもう3B。さらに1Bで正常終了に。 まぁ 76B 越えると意味がない。

末尾の ! にこだわらないなら

BITS 32
        org     0x00200000
        db      0x7F, "ELF"             ; e_ident
        db      "Hello world", 0xa
        dw      2                       ; e_type
        dw      3                       ; e_machine
_start:                                 ; e_version
        inc     ECX
        inc     EAX
        jmp     short main
        dd      _start                  ; e_entry
        dd      phdr - $$               ; e_phoff
phdr:   dd      1                       ; e_shoff       ; p_type
        dd      0                       ; e_flags       ; p_offset
        dd      $$                      ; e_ehsize      ; p_vaddr
                                        ; e_phentsize
        dw      1                       ; e_phnum       ; p_paddr
        dw      0                       ; e_shentsize
        dd      filesize                ; e_shnum       ; p_filesz
                                        ; e_shstrndx
        dd      filesize                                ; p_memsz
main:
        shl     ECX, 21
        lea     EDX, [EDI+0xd]
        lea     EBX, [EDI+0x4]
        add     ECX, EBX
sys:
        xchg    EBX, EAX
        int     0x80
        jmp     short sys
filesize equ    $ - $$

の 72B あたりが、 exit 13 になっちゃうけど、一応。

exit 0 にすると、 73B になった。

BITS 32
        org     0x00200000
        db      0x7F, "ELF"             ; e_ident
        db      "Hello world", 0xa
        dw      2                       ; e_type
        dw      3                       ; e_machine
exit:   xor     EBX, EBX                ; e_version
        int     0x80
        dd      _start                  ; e_entry
        dd      phdr - $$               ; e_phoff
phdr:   dd      1                       ; e_shoff       ; p_type
        dd      0                       ; e_flags       ; p_offset
        dd      $$                      ; e_ehsize      ; p_vaddr
                                        ; e_phentsize
        dw      1                       ; e_phnum       ; p_paddr
        dw      0                       ; e_shentsize
        dd      filesize                ; e_shnum       ; p_filesz
                                        ; e_shstrndx
        dd      filesize                                ; p_memsz
_start:
        lea     EDX, [EDI+0xd]
        lea     EAX, [EDI+0x4]
        mov     ECX, 0x00200004
        inc     EBX
        int     0x80
        xchg    EBX, EAX
        jmp     exit
filesize equ     $ - $$

いずれにせよもっと命令を ヘッダに紛れこませればもうちょい削れる気がする…

(08:44)

_ 2634

2634.jp でアクセスを、っていう広告があったわけだけど、 promise.jp でも行けるんなら それでいいんじゃ、みたいなことを思ったのですが。

うーん俺プロミス→promiseは変換できるけど、 プロミス→2634はちょっと変換できないんだよ。 うーん。 どっちが全日本人、というか 金借りる側の人層にはわかりやすいんだろう…

たぶん puromisu.jp を取るといいと思うんだ。 と思ったら取ってあった。 さすが

(16:38)

_ 遺言については

例えばこの空間のてっぺんに、 私はここ1週間は自殺する予定の無いことを明記します、 最終確認日(○月○日)みたいなのを 手軽に更新できるように置いておけば、 事故か殺人の時に自殺だと誤認される リスクが減るとか。

あまりにどうでもいいリスクだった…!

(16:40)

_ life hack

やるべきことを書き出すといいらしい

  • oblongular ...

とかはどうでもいいとして、

  • ろんぶん
  • oprofile @nii
  • mail のあれ
  • IRC のあれ
  • シューティングのあれ
  • 言語のあれ
  • 麻雀のあれ
  • 最小Hello

mail のあれはやりたいけど まず Apache 2.2 が欲しいんだよな…

どうでもいいけど昨日の Hello は readelf は SEGV するのに 実行はできるんだよ。

あと Ubuntu はウブンツーじゃないよ。 ユバントゥーだよ。 昨日全く通じなかった俺が言うんだから間違いない

(18:25)

_ そういえば

やっと生協食堂の利用法がわかった。 寮跡地に行くと使える。

(18:27)

_ test sbj

test body

(19:16)

_ by shinh

_ (19:15)

_ ほげほげー

by shinh

(19:15)

_ というわけで

IRCから書けるようにしてみたのであった

(19:29)

_ というわけで

IRCから書けるようにしてみたのであった。二重投稿

(19:30)

_ というわけで

IRCから書けるようにしてみたのであった。二重投稿。三重?

(19:30)

_ というわけで

IRCから書けるようにしてみたのであった。二重投稿。三重?。四重?

(19:31)

_ ほげほげー

てすてすと

(19:31)

_ うまく

うごいてる感じだにゃ。うーんんぼえーぼえー

(19:32)

_ 段落テスト

ほげほげ

はげはげ

(19:37)

_ 記法テスト

  • あひい
  • おがあ

(19:37)

_ #mazop のさそい

  1. mazop は irc.friend.td.nu 上のステキなチャンネルです!

以下のようなことに使われる予定です!

  • 僕のメモ

なんでそんな個人的なチャンネルに「さそい」って書いたんだろう

IRCだと消せないわけだ

(19:43)

_ 記法

あー。 # ではじめると 1. になってしまうんかー

(19:43)

_ 俺活動拠点

shinh.org に IRC サバ立ててそんな感じにするかなぁ… たとえば #mail にはメールの通知がくるとか

(19:46)

_ てす

(19:47)

_ おや師匠がいらっしゃる

こんな感じで書ける と

(23:34)

_ ぎゃあ

http://d.hatena.ne.jp/kikx/20061109#1163073252

うへー。 ていうか file コマンドの出力がやけに短いんだけど そういう file コマンドなのやら ELF ヘッダがおかしいのやら… でも ELF ヘッダの e_type と e_machine はいると思うし…

あとそもそも今のやりかただと 限界までコードとヘッダ混ぜても64Bなんだ…

うんつーことは overlap のしかたからして違うんか。

(23:56)

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

2006年
11月
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.Gus(2014-05-24 02:34) 2.shinh(2014-05-24 02:34) 3.kosaki(2014-05-24 02:34)
search / home / index

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

shinichiro.hamaji _at_ gmail.com / shinichiro.h