Code Reading2.1

問題2.1 未初期化変数がどのように扱われるか? 下記のようなソースで試したら、g_a、aともに0だった。 #include <stdio.h> static int g_a; int main(int argc, char** argv) { int a; printf("g_a=%d\n", g_a); printf("a = %d\n", a); return 0; } 問題2.2 echoでge</stdio.h>…

SDLを使う

あるゲームプログラミングの本でSDLの話が書いてあったので試しにインストールしてみた。 インストール # yum -y SDL* インストール後に起動するかどうか書いたコード

flexライブラリのインストール

現在読んでいる本に記載されているサンプルを実行しようとして困ったので、メモです。flexは構文解析に使われるツールです。 調べたらライブラリがなかったので、そのインストール方法を忘れないためにメモします。 インストール # yum install -y flex-deve…

共有ライブラリを認識させる

OSは、Fedora17を利用しています。 libdwarf.soという共有ライブラリを手動で/usr/local/libディレクトリにインストールした時の話です。 /libディレクトリと/usr/libディレクトリはデフォルトで共有ライブラリーの含まれていますが、FedoraやCentOSでは/usr…

fcallについて

fcall,libffiで実行時にシグネチャーを指定して関数を呼び出すことができます。 実行時に困ったので、困ったところのみメモして置きます。fcallは、-lavcall libffiは、-lffi をそれぞれリンクすると使える。 参考文献 Binary Hacks

読む技術(SQ3R)について

SQ3Rは、リファクタリングウェットウェアという本の中で紹介されていた方法です。効率的に本を読むです。SQ3Rは、次に示す5つのワードの頭文字を集めたものです。 以下は、本の引用です。 Survey(調査) 全体の要旨をつかむために目次と各章の要約を流し読…

libfdのリンクに失敗する問題

ls -al /usr/lib/libbfd.so自体はいるが、リンクエラーになる。 通常、シンボリックリンクになっているはずらしいが、lsコマンドで見てもリンク先が表示されなかった。そのため、ls -al /usr/lib/libbfd*をすると/usr/lib/libbfd-2.22.52.0.1-10.fc17.soがあ…

プログラムがmain()にたどりつくまで

この話は、最近読んでいるBinary Hacks ―ハッカー秘伝のテクニック100選作者: 高林哲,鵜飼文敏,佐藤祐介,浜地慎一郎,首藤一幸出版社/メーカー: オライリー・ジャパン発売日: 2006/11/14メディア: 単行本(ソフトカバー)購入: 23人 クリック: 383回この商品…

bashとglibcのソース

オープンソースはソースコードが誰にでも無料で公開されています. linuxやそのツール郡は, すべてオープンソースです. 普段お世話になっている基本的なソフトウエアは、GNUプロジェクトで公開されています。http://www.gnu.org/software/software.html bash…

Linux版のjavaで文字が□になる問題

linux版のastahのzip版をダウンロードして、さっそく起動したら、文字が□になる問題が発生しました。 世にいう豆腐問題です。ずっと前にも見たことがありましたが、どうやって解決したか忘れました。 とりあえず、いろいろ調べてみる。 利用しているJavaを調…

非同期シグナルを同期的に扱う

sigwaitを利用して、シグナル受信スレッドを作成してしまおうというのがアイディア。 #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <signal.h> #include <stdio.h> void *wait_for_sighup(void *dmy) { int sig; //sig_wait関数はSIGHUPを待つ sigset_t ss; sigemptyset(&ss); sigad</stdio.h></signal.h></sys/select.h></sys/time.h></pthread.h>…

Javaでシグナルをキャッチする

linuxではお馴染み、シグナルをjavaでキャッチする方法です。 SIGHUPをキャッチします。vim sample.java import sun.misc.Signal; import sun.misc.SignalHandler; class SignalTest { static int sig = 0; public static void main(String[] args) { Signal…

LinuxでJava開発

linuxでJavaの開発をするためにjavacをインストールしました。 インストール方法のメモです。 rootで下記をインストール yum install java-1.7.0-openjdk-develテストです。 vim sampleTest.java class Sample { public static void main(String[] args) { }…

Canvasを使う

本屋などにいくとhtml5でつくるゲームとかの本が結構あるので、少し触ってみた。ほとんど詳しくないので基礎的なことしかできなかった。とりあえず、キャンバスの背景設定と図形を書いて、定期的に移動するようにして見た。javascriptはまだ全然分からない。…

HTTPプロトコル(302ステータス)

友達から質問を受けて少し勉強しました。ソケット通信は最近あんまりつかってなかったので再度勉強した。ソケット通信でサーバ側でやることは ソケットの生成 bind listen acept 送受信処理 です。こんな感じのソース書いた。 #-*- coding: utf-8 -*- import…

D_FORTIFY_SOURCEを使う

これもバッファーオーバーフロー検出に関するお話。 gcc4からの機能です。使い方 (o1以上の最適化オプションをつける) gcc -O1 -D_FORTIFY_SOURCE=1 foo.c検出時は、下記のいずれか コンパイル時 実行時 これの機能のすごいとこは、リリースビルドで使えると…

Mudflapを使う

gcc4から使える機能です。バッファーオーバーフロー検出ツールです。 メモリの割り当てとして、ヒープ領域、bss領域、stack領域などがあります。このツールでは、下記のようなケースが検出されました。 /* test.c */ static char onbss[128]; int main(void)…

grub2からエントリーを削除

Linuxカーネルソースをビルドしてインストールした場合、 package-cleanup --oldkernels --count=1では削除されない。※これで削除した場合は、エントリーも削除される。起動時には、grub2がエントリーを表示してくれるが、それを手動で削除しないといけない…

kernelソースの取得

久しぶりの更新です。linuxカーネルのソース取得に関してです。 家では、Fedora17を利用しています。現在デバイスドライバのソースコードを書いたりしていますが、fedora用にカスタマイズされたソースコードの取得方法をメモって置きます。 ソースの取得 yum…

ふつうのLinuxプログラミング

最近、仕事でLinuxで開発しています。昔買った本を引っ張り出して読み直しています。 結構内容が詰まっていていいな。この本。 ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道作者: 青木峰郎出版社/メーカー: ソフトバンクク…

リバースエンジニアリング ―Pythonによるバイナリ解析技法

前、本屋でみて気になっていたので、買いました。リバースエンジニアリング ―Pythonによるバイナリ解析技法 (Art Of Reversing)作者: Justin Seitz,安藤慶一出版社/メーカー: オライリージャパン発売日: 2010/05/22メディア: 単行本(ソフトカバー)購入: 4…

Hacking: 美しき策謀 第2版

Hacking: 美しき策謀 第2版とう本を買いました。 Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際作者: Jon Erickson,村上雅章出版社/メーカー: オライリージャパン発売日: 2011/10/22メディア: 単行本(ソフトカバー)購入: 9人 クリック: 163回この商…

3日目(その2)

久しぶりの更新になります。ファイル変更とか結構するのでSubversionを使う方向で環境の整備を行っていました。あとMakefileをカスタマイズしていました。そこまでのメモです。OS自作本的には、進捗ありません。MS-DOSのファイルを操作するためのツール郡に…

hackme(Level3)ネタばれ注意

Level3は苦戦しました。Level2と同じように、sqlインジェクションでいけるかもと思ったがダメだった。とりあえず、ソースを見てみよう。form付近のソースを抜き出して見た。 <form action="/Lv3/login?page=template/login.html" method="post"> <table> <tr> <td>ID:</td> <td><input type="text" name="name" value="" /></td> </tr> <tr> <td>Password:</td> <td></td></tr></table></form>

hackme(Level2)ネタばれ注意

Level2は苦戦しました。ちょっと勉強したのでメモ。 まずは、ソース見てみました。 今回は、ヒントになりそうなものがない。 ログインする際にformからの入力値を直接ログインユーザ管理用のDBにアクセスする際のselect文にいれているかもと思った。 ちょっ…

hackme(Level1)ネタばれ注意

Level1は、すぐ解けました。とりあえず、ソースを見たら、あら不思議。 答えがあった。62行目あたりにコメントがあるのでこれを利用する。

hackme

hackmeというサイトを友人に教えてもらった。http://hackme.netfire.jp/start ちょっとやってみた。Level 1は、難しくないです。Level 2で悩んだ。

3日目

今回のテーマは、IPLを作成しようということです。 IPLとは、初期プログラムローダのことです。 FDの内容をメモリに展開 FDの先頭512バイト(1セクタ)の次の512バイトをメモリ上に展開する方法について解説してあります。 ソースでは、下記の箇所が街頭箇所に…

2日目

Jmp命令 1日目で .byte 0xeb, 0x4eと書いていた箇所は、アセンブラの命令のjmp命令に相当しているようです。 ipl.s 前回まで、helloos.sという名前でアセンブラを書いていましたが、 ファイル名をipl.sに変更しました。下記に変更後のソースを示します。 .co…

USBブート

OS自作本では、最終的にFDにイメージを焼いて動かすことを想定しているが、 今時,FDは使用しないので、USBブートの方法を調べてみます。 とりあえず、調べたことをメモしておきます。 usbを確認 $ ls -al /dev/sd sda sda1 sda2 sdb sdb1 sdc sdc1 usbをフォ…