【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

2012-01-01から1年間の記事一覧

アクティブパターンをどう捉えるか

F# C#

F# Advent Calendar 2012 第16日目の参加記事です。 昨日 @kyon_mmさん SpecFlowについて 明日 @linerlockさん F#製のビルドツール, FAKEで遊ぶ 今年のF# Advent Calendarは実用がテーマです。私はアクティブパターンをなかなか実用できないでいましたが、よ…

Gtk#でファイルをドラッグ&ドロップ

Gtk#のウィジェットにファイルをドラッグ&ドロップで渡します。受け取る種類を指定しておくと、ドロップしたときにDragDataReceivedシグナルが発生します。ファイルは "text/uri-list" です。URIで渡されるため、ローカル名に変換が必要です。 using System…

整数の割り算を掛け算に変換 (4)

ここまで見てきた計算方法で、どれくらい高速化するか実験します。

整数の割り算を掛け算に変換 (3)

引き続き整数の割り算を掛け算に変換する方法について考えます。

整数の割り算を掛け算に変換 (2)

引き続き整数の割り算を掛け算に変換する方法について考えます。

整数の割り算を掛け算に変換 (1)

コンパイラの出力を見ていると、除数が定数の場合に整数の割り算を掛け算に変換していることに気付きます。これがどんな原理で行われているのか考えてみました。

Gdk#によるグラフィックス

本日のMonoDevelop勉強会の資料として、Gdk#でグラフィックスを表示して操作する手順をまとめました。 Gdk#によるグラフィックス

ビルド速度の計測

同一マシンのWindows上で各種UNIX互換環境のビルド速度を計測してみました。 CPU Athlon 64 X2 4600+ 2.4GHz OS Windows XP MCE SP3 対象 binutils-2.22 ビルド方法 configure --target=i386-darwinmake -j2 結果 MSYS gcc-4.7.0 6:32 Cygwin gcc-4.5.3 7:37…

固定レイアウトとレイアウトマネージャ

10月13日(土)のMonoDevelop勉強会の資料として、固定レイアウトとレイアウトマネージャを比較しながら触る手順をまとめました。 固定レイアウトによるGUI レイアウトマネージャによるGUI

池袋バイナリ勉強会

池袋で勉強会専用のスペースをオープンしました。定員は19名(演台含む)です。 http://w.livedoor.jp/ikebin/ 日曜日の池袋バイナリ勉強会の他、コンピュータ関係の勉強会を開催します。 よろしくお願いします。

PEの.idataを図解(ILTなし)

昨日.idataの記事を書きましたが、その図を眺めていて「ILTがなくても起動するのではないか?」と思ったので、試しに削ったら起動しました。図も少し簡単になります。これについてつぶやいたところコメントをいただきました。@7shi Delphi で作られたアプリ…

PEの.idataを図解

以前PE勉強会を開催したとき、.idataの構造をうまく説明できませんでした。最近また説明する機会があったので、改めて図を描いてみました。バイナリと並べて構造をフラットに描きました。この描き方は、Excel VBAで作成したコンパイラで使っていたものです。…

MonoDevelopでHello World!

MonoDevelopとGtk#の最初の一歩として、ハローワールドの作成手順をまとめました。 mdev-hello.docx

Gtk#でBrainf*ckのGUIシミュレータ

MonoDevelopの練習の一環としてBrainf*ckのGUIシミュレータの作成手順をまとめました。Gtk#とBrainf*ckの両方が一度に勉強できる内容となっています。 mdev-bf.docx

Pythonでスクレイピング

Pythonでスクレイピングをやってみました。個人的にはプル型パーサが使いやすいのですが、pulldomは妥当性チェックが厳しくHTMLにはそのまま使えないことが多いため、自作パーサを移植しました。 Python移植版 https://gist.github.com/3021786 元の自作パー…

文字列配列を作る (3)

前回、Pythonで文字列配列をJITで表示しました。 文字列配列を作る (2) マーシャリング(ポインタの変換など)はctypesに任せていたので、そこを手動でやってみます。前回と共通の部分(JIT)は、前回のコードを呼び出して処理しています。 mkstr2.py from m…

文字列配列を作る (2)

前回、C言語のargc, argvをJITで表示しました。 文字列配列を作る (1) これをそのままPythonに移植しました。jitモジュールは以下を使用しています。 PythonによるJITで関数呼び出し mkstr1.py import sys from jit import * # for (i = 0; i < argc; i++) {…

Genieのサンプルコード

Genieは絶望的にサンプルコードがありません。仕方ないので、手始めにチュートリアルからコードを抜粋しました。せめてValaからトランスレートできれば良いのですが、逆(Genie→Vala)しかできないようです。 Is there any way to compile between Vala and …

MSYSでValaをビルド

MSYSでValaという言語をビルドしてみました。C言語へのトランスレータで、C#風の構文からGObjectの定型的なコードを出力します。 Vala - Compiler for the GObject type system 先にglibとpkg-configをビルドします。詳細は以下を参照してください。 MSYSでG…

MinGWでwaitpid()とkill()

MinGWでUNIXのプログラムをビルドしていると、waitpid()やkill()でよく引っ掛かります。とりあえずコンパイルを通すため、代わりの関数を実装してみました。※ サポートできない引数は無視しています。 #include <windows.h> #include <process.h> int waitpid(pid_t pid, int *stat</process.h></windows.h>…

classファイルの注釈付きバイナリダンプ

前回の記事で解析したclassファイルのバイナリダンプに注釈を付けました。

classファイルの解析

Javaでハローワールドをコンパイルしてclassファイルを解析してみました。※ 仕様書を参照したため、リバースエンジニアリングではありません。 Hello.java class Hello { public static void main(String[] args) { System.out.println("hello"); } } 実行結…

void *とintptr_t

今まで何度かvoid *の説明を求められましたが、なかなか納得してもらえませんでした。説明を工夫するだけでは限界があると感じたので、別の方法でどうにかならないかを考えてみました。前回の記事の延長線上で説明します。サンプルコードを再掲します。 mov …

メモリ書き込み構文

対象環境を限定できる場合、バイト配列にリトルエンディアンで32bit値を書き込むときに、私は以下のように書いていました。 char buf[32]; *(int *)&buf[6] = 0x12345678; 非常に分かりにくいとご指摘を受けて色々と変形しましたが、どれもしっくり来ません…

odcctoolsの修正 (3)

Mac OS XのasはIntel記法で同じラベルが2度出るとエラーになります。 $ cat intel.s .intel_syntax noprefix call foo call foo $ i386-darwin-as intel.s intel.s:3:suffix or operands invalid for `call'この問題を修正するパッチを作成しました。 --- od…

odcctoolsの修正 (2)

前回、ようやくodcctoolsのアセンブラが動くようになりましたが、odcctoolsに手を出すようになった経緯を書きます。 Mach-O遊びを調査中。Mac OS Xではbinutilsではなくcctoolsを使う。cctoolsは他のOSで使うことは考慮されていないので、クロスでやるときは…

odcctoolsの修正 (1)

前回まででNetBSDとMSYSでodcctoolsをビルドしました。どちらも同じ問題でi386用のアセンブラが起動しませんでした。 http://7shi.hateblo.jp/entry/2012/06/13/005958 (NetBSD) http://7shi.hateblo.jp/entry/2012/06/13/013702 (MSYS) 問題を修正するパッ…

MSYSでodcctools(一部)

前回、NetBSDでodcctoolsをビルドしました。 http://7shi.hateblo.jp/entry/2012/06/13/005958 そこで問題になったのはi386のアセンブラです。問題の切り分けのため、MSYSでもビルドを試みました。ただしすべてのビルドを通すのはかなり大変なので、i386のア…

NetBSDでodcctools

Mac OS Xではバイナリ処理にGNU binutilsではなくcctoolsという独自のものを用いています(asはbinutils派生)。Appleはソースを以下で公開しています。 http://www.opensource.apple.com/ (Developer Tools) Appleが公開しているものはMac OS Xでビルドする…

文字列配列を作る (1)

数回に分けて文字列配列を作ってみます。手始めに検証用サブルーチンをJITで作ってみます。 strarray.c #include <stdio.h> #include <string.h> #include <windows.h> // for (i = 0; i < argc; i++) { // printf(argv[i]); // putchar(' '); // } char buf[] = { 0x56, // push esi 0x8b,</windows.h></string.h></stdio.h>…