わらばんし仄聞記

南の国で引きこもってるWeb屋さん

ELFファイルを作る part4

ELF

以前にELFファイルを作るpart3までで、値を直接指定してのELFファイル作成を行った。また、簡易brainf*ckコンパイラを作る part3では命令部分のコードを外部から指定し、それを実行出来る実行形式ファイルの出力を行った。 これらはいずれも外部ファイルとの…

簡易brainf*ckコンパイラを作る part3

ここまでで触れていたもので、準備は整った。本題に戻って、brainf*ckのコードをプログラムに読ませ、そのコードの実行ファイルを生成する。 具体的にどうするかを攫っておくと、 pythonでJIT(64bit版Linux環境) part3を元にして、読み込んだコードをネイ…

簡易brainf*ckコンパイラを作る part2

part1に引き続き、もう一点必要なものがある。 brainf*ckはそれぞれの命令以外に、少なくともサイズ30000のバイトの配列を持つ必要があり、これは今までgasの記法を主に使っている所で見られた .comm mem, 30000に相当する。 この領域をELFファイルに直接持…

簡易brainf*ckコンパイラを作る part1

pythonでJIT(64bit版Linux環境) part3でも軽く触れていたが、ここまでで作成していたELFファイルや、JITでやっていた事をまとめると、brainf*ckのコードを読み込ませてELFの実行ファイルを作成させる事ができる。要はbrainf*ckコンパイラを作成できる。 た…

ELFファイルを作る part3

ELF

part2では非常に単純化したELFファイルを作成しましたが、この状態から作成されるファイルに対してobjdump等を実行してもメインの実行コードについての情報が出てきません。 なので、今後進めていった際、不具合に遭遇した場合の問題解決を容易にするために…

ELFファイルを作る part2

ELF

part1では単純なELFファイルを作る際に埋め込む為の、極めて小さいアセンブラのコードを作りました。 なので、次はそのコードを入れる為の、ELFに則ったバイナリを作成する。 目標 ELFに則ったバイナリを作成し、その中にpart1で作成したコードを入れ、動作…

ELFファイルを作る part1

ELF

池袋バイナリ勉強会(7)に行ってきました。前回にも触れたように、先にJITで動作させていたバイナリ値をELFの中に組み込めればbfコンパイラが出来上がる。 というわけで、次のステップとしてELFファイルの作成へ。 目標 64bit用ELFの挙動を知るため、必要最小…

pythonでJIT(64bit版Linux環境) part3

池袋バイナリ勉強会(5)にて、前回に引き続きpythonでJITをいじってきました。 今回の目標は外部からbrainf*ck(以下bf)のコードを読ませ、それを実行するネイティブコードの生成とその実行を行う事としました。これが出来たなら、そのネイティブコードにELF…

pythonでJIT(64bit版Linux環境) part2

pythonでJIT part1は非常に単純な例だったので、もう少し複雑にしてみることに。 目標 アルファベットのA~Zをループで取得し、それぞれをputchar関数を使って出力。終わったら改行文字の出力をするネイティブコードをJITで実行する。 アセンブラでのコード …

pythonでJIT(64bit版Linux環境) part1

池袋バイナリ勉強会(4)にて、pythonでJITを行うコードを書いてみました。 基本的にこちらを参考として、64bit版Linux環境下にて。とりあえずはほぼ写経で、ちょこちょこっと環境に応じて変えてみて動作することを確認する。 part1.py from ctypes import * l…

KDMでのログインが出来ない

openSUSE12.2がリリースされたので、手元にある12.1のマシンをアップデートしてみた。 更新終わってから再起動したら、どうもうまくログイン出来なくなってしまったので、その時の状況と解消までのメモ。 状況 KDMのログインマネージャから、パスワードを入…