プログラム

gccのインラインアセンブラ

linux2.6.34のswitch_to()を見てたら、インラインアセンブラで見慣れない記述があったので、ちょっと確認してみた。test1()は通常通りに0番目、1番目って感じで変数を使ってるパターンで、test2()は名前を付けてアクセスする方法。こんなやり方って前からあ…

自前でコンテキストスイッチしてスレッドの切り替えをしてみる。

ネットでスレッドの実装をするという課題を見つけたのですが、x86版のコードだったのでx86_64で動くようにしてみました。課題のコードから変えたのはスレッドを作る処理と、コンテキストスイッチの切り替え部分です。 それ以外の部分は、基本的には課題で要…

libusb-1.0のメモ

twitterの極一部で熱狂的ブームになっているYUREXを入手したので,libusb-1.0で遊んでます. ということで,その辺のc⌒っ゜д゜)っφ メモメモ... コードは割とやっつけです・・・ libusbはこちらの 「Introduction to using LibUSB-1.0」を参考にしてます.ド…

久々にPythonでプログラム書いたのでメモ.

仕事でテストデータ作るのが面倒だったのでw ツールを作成してみました. 何がしたいかというと,.mp3ファイルがたくさん欲しかったので,IDv3タグを変更してIdv3タグ的に別のアーティスト・アルバムにしたかったのです.IDv3タグをいじれるライブラリを探し…

githubにソースを置いてみた。

この前のTD4エミュレータをgithubに置いてみますた。

TD4のエミュレータを書いてみた。

CPUの創りかたは前から持っていて、実際に作ってみたかったんだけど、 電子工作は得意ではないので、その前にエミュレータを書いてみた。 著者の方はエミュレータを公開してくれているけど、自分Windows持ってないので本で紹介されている画面とかから このエ…

cのプリプロセッサの##演算子使って関数定義。

これってできたよなと思ったのでメモ。ちょっと使いたかったので・・・こんな感じで書いて・・。 #include <stdio.h> #define func_def(func_name, type, arg) \ void func_name(type arg) { \ printf("%s\n", arg); \ } #define test(nnn, type, arg) func_def(test </stdio.h>…

brainf*ckのコードの意味がやっと分かったのでメモ。

brainf*ckの文法はウィキペディアにも書いてあるので、 インタープリタの実装自体は分かりやすいけど、実際に"A"を表示させる方法が分かりづらかったと。。"A"を表示するコード ++++++++[>++++++++<-]>+.ここで出てくる記号の意味を簡単に書くと、 :ポイン…

ふと思い立ってEmacs-Lispを勉強。

やっぱり関数型言語も覚えてみたかったので、金曜にアキバのヨドバシにある有隣堂で本を探してきました。 そんで、買ったのは「やさしいEmacs-Lisp講座」と言う本。Emacs-Lispなら~/.emacsいじるとかemacsの拡張が出来るし便利かなと思ったってゆうのが大き…

なんとなく退屈だったので久々にGtkのソースでもいじろうと思って、debianのsidにあるイメージビューア(gpicview)にスライドショー機能を適当につけてみた。

スライドショーで表示する時間が3秒固定だったりして色々アレであるが、一応スライドショーにはなるしこれで良いや( ̄ー ̄)ニヤリ diff -uprN old/gpicview-0.2.0/src/main-win.c new/gpicview-0.2.0/src/main-win.c --- old/gpicview-0.2.0/src/main-win.c 200…

git format-patchって便利ですね(*゚▽゚)ノ ということでメモ。

git format-patchで時系列に沿った形の一連のパッチ作成。リポジトリを初期化して、ファイルを追加 [masami@moon:~/build/hello]% git init Initialized empty Git repository in /home/masami/build/hello/.git/ [masami@moon:~/build/hello]% emacs hello.…

gccで使えるサイズ0の配列ってこういうことができるってこと?

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> struct foobar { int length; char str[0]; }; void *xmalloc(size_t size) { void *p = malloc(size); assert(p != NULL); return p; } int main(int argc, char **argv) { struct foobar *p = NULL; int len = 0;</assert.h></stdlib.h></string.h></stdio.h>…

x86_64環境でシェルコードを実行するコードをテスト。 元ネタのシェルコードはここ。 とりあえずこれはアセンブラのソースなので適当な名前で保存してgccの-cオプションでオブジェクトファイルに変換。 それをobjdump使ってバイトコードを出力、それをcharの…