Bin

自力で関数を呼ぼう帰ろう

まさにこういう面白さを伝えたいわけだけど。http://d.hatena.ne.jp/paella/20070125/1169651616コンパイラについては、 C は宣言してない関数は int func(...) 扱いしたと思いますので、まぁ問題無いかと思われます。そもそも互換性の無いポインタ同士の変…

x86 checker

なんか shinh っていう ASCII 文字列を逆アセしてみたりとかしてて、これはちょっと面白いなーと思ったのでそんな感じでなんか作りました。http://shinh.org/x86chk/x86chk.html適当に、ASCII文字列か、 00 01 なんかの 16進数の羅列、 xor %eax, %eax など…

というわけで調べてみました

PKU2371 の qsort として通ったのは以下のような文字列です。 "YXZ\x83\xec\f\213\0+\x2\303"これは以下のようなアセンブリ。 pop %ecx pop %eax pop %edx sub $12, %esp mov (%eax),%eax sub (%edx),%eax ret これだと全然長すぎる。nanagyouさんの q(int*a…

qsort の callback の書き方

http://d.hatena.ne.jp/Ozy/20070123#c1169554585を見て、前から qsort の callback 関数は関数書くより機械語埋めた方が短くなるんじゃないかなーと思ってたのを思い出しました。 int a[] = { 1, 3, 9, 2, 7, 4, 5, 8, 6 }; int main() { int i; qsort(a,si…

Portable Binary Hacks

Binary Hacks は GNU/Linux & x86 メインなわけですが、それ以外の OS だのアーキテクチャだの言語だのコンパイラだのならどうなる?っていうのを個人的に記録していこうとしています。http://shinh.skr.jp/pbh/まだまだ書きかけばかりですが少しずついじろ…

Mach-O Golf

http://shinh.skr.jp/binary/hello_macho.sPPC で 248Byte 。でけええ。先人の作業を参考にしたりパクリつつ。特に作るプロセスは textEx を使わせていただいています。http://d.hatena.ne.jp/shotaro_tsuji/20061220/1166610321http://d.hatena.ne.jp/shota…

JVM Golf

Java かわいいよとみずしまさんがおっしゃってたのでとりあえず Hello world を書いてみました。 267Byte 。http://shinh.skr.jp/binary/Code.class普通にやると 409Byte くらい。 i@u ~/test/java> cat c.java public class c{ public static void main(Str…

プログラムは ASCII で書くべきだよ

ふと、 main = 195; とかやって喜んでいた私はバカだったんじゃないかと思いました。 Binary 2.0 などとうかれてほとんどバイナリのコードをゴルフに submit してたのはどうなのか、と。プログラムは ASCII で書くべきだったんじゃないでしょうかと。それも…

75B ELF @ FreeBSD

昨日は b2con でした。発表者の皆さんおつかれさまでした。とても楽しかったです。dankogaiさん が FreeBSD で ELF ゴルフは制約が多いと教えてくださったのでやってみました。確かに制約は厳しい感じでした。 75Byte 。http://shinh.skr.jp/binary/hello_fr…

最小 Hello の比較とか

http://www.dodgson.org/omo/t/?date=20061213#p01で "Size Is Everything" が日本語訳がされていて素晴らしいです。[SIE] http://www.hyuki.com/yukiwiki/wiki.cgi?WhirlwindTutorialOnCreatingReallyTeensyElfExecutablesForLinuxまぁみんな最小だ最小だと…

PE Golf

おー 97Byte の PE Hello がーとか今頃気付いたので。http://d.hatena.ne.jp/firewood/20061120/1163957029そしてなんか特に変数いじることなくうちでは動いてくれたので、これは初心者向けだ!と思って、とりあえず目につくとこいじったら "Hello, world!\n…

FPUのフラグをいじろう

あまりよくわかってませんが、浮動小数点数の規格であるところの IEEE754 には、無効操作ってものが定義されてるようです。例えば Inf - Inf だとか NaN > 0 だとか sqrt(-1) だとかですね。で、 x87 の FPU ではなんか、これはたいていの場合ほっとくと QNa…

a.out で 63Byte Hello, world!

a.out だったら小さくなるかも、って質問に答えたんですが、 a.out ってファイル内オフセットを指定できないから、ヘッダの空間使えないみたいで、たぶんこんなくらいで限界ぽいというかつまらない… i@u ~/wrk/binhacks> ls -l hello_aout -rwxr-xr-x 1 i i …

よもやま

0 バイトの Hello, world!

今日の雑談で出た話題について、やってみました。 i@u ~> ls -l hello.exe -rwxr-xr-x 1 i i 0 2006-11-16 02:58 hello.exe* i@u ~> ./hello.exe Hello, world!ほほんとうにできた!すすごい HQ9+ を破るなんて!答えは以下のような感じ。 i@u ~> cat hello …

SEA & FSIJ 合同フォーラム

SEA & FSIJ 合同フォーラム で、 ELF Golf という題名でヨタ話をしてきました。http://shinh.skr.jp/binary/fsij061115/発表資料などは上記からどうぞ。なんかファイル名が全部 FSIJ ってついてますが、それは SEA って団体がなんなのかよく知らなかった、と…

実行回数を記憶している実行ファイル

http://d.hatena.ne.jp/alohakun/20061113を見てて、騙されてはいけない! id:yupo5656 さんは僕らの自由を奪う詐欺師だっ…とか思ったので適当に。ELFヘッダは e_ident という 16Byte のメンバから始まっています。ここは magic を記録する場所です。 magic …

セクションヘッダについて

http://shinh.skr.jp/binary/shdr.html書きました。飽きてきたのでたぶんもう終わりです。最小 Hello も main 蹂躙も OMF も面白いっちゃ面白いのでまとめてみたくはあるんですけど、この手のはどうにもめんどくさくて。これ書いてて思ったんですが、 GCC ツ…

Binary Hacks とオブジェクトファイルについて

Binary Hacks がオライリーから出るとのことです。困ったことに私も書いてるそうです。http://0xcc.net/binhacks/宣伝をしなさい…との指令を無視して、あまり気にせずゴルフのことばかり書いていたのですが、これではいけないと何かを書こうと思いました。し…

76Byte の Hello world

小さな Hello world を目指してみることにしました。http://www.muppetlabs.com/~breadbox/software/tiny/では 59Byte の Hello world が公開されているのですが、これはどうも古い linux 用らしく、動きません。というわけで自分で作ってみることにしました…

GDB で Hello world! を書こう。

しつこく Hello world! を作ります。http://shinh.skr.jp/ttyplay/gdb_hello.htmlえーと上記はデモです。内容は、 main;だけのコードで gdb を起動して、対話環境チックに動作内容を確認しつつ main の中身を作って、うまくできたらそれを保存して実行ファイ…

main 蹂躙の説明を試みる

少し不粋ではありますが、何やってるかわかりにくい部分も多いので、解説を試みてみます。昨日だらだら書いてたんですが、途中 yupo5656 さんがご自分で解説書かれてたりしたのでかぶったりしてますがまぁ気にしない方針で。基本的に、なぜか、拡張機能をた…

GCC の __attribute__ いろいろ

NOTREACHED コメントを入れると GCC が黙るという話を読んで。http://alohakun.blog7.fc2.com/blog-entry-429.htmlえー本当ですか cpp に消されて終わりでは、 GCC のコードにもそれっぽい処理 grep できなかったし、と思って以下のようなコード。 #include <stdlib.h></stdlib.h>…

main 蹂躙

http://d.hatena.ne.jp/yupo5656/20060828/p1素敵なのでマネしてみます。色々常識が足りないけど、一応 main は呼んであげる。 main; __attribute__((constructor, destructor)) static x() { if (main) puts("world!"); else puts("hello", main = 195); }…

cmpxchg を GCC 拡張で

http://0xcc.net/blog/archives/000128.htmlを見て、なんかこの手の命令はたいてい GCC 拡張にあるんだよなーとか思ってたらありました。 __sync_bool_compare_and_swap と __sync_val_compare_and_swap 。 #include <stdio.h> void once(void) { // int は atomic な</stdio.h>…

heap に実行属性つけたのは誰ですか!

今言えない子は、後で先生にこっそり打ち明けなさい。http://d.hatena.ne.jp/w_o/20060808#p2を見てて、うわーすばらしーと思いつつも、疑問点が1つ。なんで heap に置いたコードが実行できるんだろうなー、と。まず、トランポリンが入った場合に、スタック…

undump(1)

http://shinh.skr.jp/binary/undump.tgzundump(1) は、 core の状態に復帰するためのソフトウェアです。 i@u ~/wrk/undump> cat stop.c #include <stdio.h> #include <sys/signal.h> int main() { puts("undump test starting!"); raise(SIGTRAP); puts("undump succeeded!"); retur</sys/signal.h></stdio.h>…

errno のリスト

ついでというか、 perror のメッセージからエラーのマクロが知りたいとか、そういう要望がたまに自分的にはあるので、 Linux での errno のリストを作ってみました。そういえばちょうど CodeFest とか楽しげなことやってたらしいので、まぁ一人 CodeFest っ…

C で環境復帰

C は動的な LL なので、 Smalltalk みたいに環境を保存したり復帰したりできます。というか C というかアセンブラならなんでもできるとかそんなこんな。http://shinh.skr.jp/binary/restore.c i@u ~/src/coredumper-0.2> gcc -Wall restore.c -g .libs/libco…

メモリ保護属性の調べかた

以下の方法でメモリが読み書き可能かどうかを調べられることを知りました。要は loopback な pipe を作ってそのメモリの内容を write してみて書き出せたら readable で、その後同じ内容をそのメモリに read してみて読み出せたら writable 。 #include <stdio.h> #in</stdio.h>…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h