linux kernel 3.8.8のコンパイル(ubunut12.04)

Ubuntu12.04上でlinux kernel3.8.8のコンパイルをしたので,そのメモです. 依存パッケージのインストール もし’make xconfig’をするつもりなら,qt3-dev-toolsとlibqt3-mt-devが必要になる.‘make menuconfig’をするつもりなら,libncurses5とlibncurse5-devが必要になる.ここでは,取り敢えず全部入れておく. sudo apt-get update sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev linux-source qt3-dev-tools libqt3-mt-dev libncurses5 libncurses5-dev fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge kernel-package kernelソースの取得 次に,https://www.kernel.org/からkernelのソースコードを取得する.はじめは,githubからcloneしてましたが,すごく時間がかかるので,やめました./usr/srcにダウンロードしてきて,解凍しているだけです. cd /usr/src sudo wget ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-3.8.8.tar.bz2 sudo tar -xjvf linux-3.8.8.tar.bz2 設定 ソースコードを取ってきた状態では,いろんな環境をサポートしているので,かなり大きくなってしまって,コンパイルに時間がかかるので必要なものだけを選んでいきます.最初に,今まで使っていた設定を再利用しました.新しく追加されたオプションに関してはその度に聞かれます. cd linux-3.8.8 sudo cp /boot/config-3.2.0-24-generic-pae .config sudo make oldconfig 続いて,‘make menuconfig’で設定をしました.(‘make xconfig’でもいい.)どっちにしても,メニューが出てきて,必要なオプションを選ぶ.“Save Configuration to an Alternate File"を選ぶと,違うファイル名で保存できて,バックアップなどもできます. 何もなし - 使わない. M - モジュールとしてコンパイルして,必要なときにロードされる. カーネルと一緒コンパイルされ,カーネルと一緒にロードされる. make menuconfig コンパイル Debianでは’make’と’make install’の代わりに,‘make-kpkg’でコンパイルをします.この方法では,....

April 26, 2013

system callの追加(kernel 3.8.8)

system callの登録 カーネル3.8.8のソースを準備します.まず,syscalls_32.tblの最後に以下のように,追加したいsystem callsの名前を書きます.この時の番号は覚えておく(ここでは,351).次に, syscalls.hの最後に,プロトタイプを書いておきます. $ cd /usr/src/linux-3.8.8 $ sudo vim arch/x86/syscalls/syscall_32.tbl 351 i356 kanako sys_kanako # 最後に追加 $ sudo vim include/linux/syscalls.h asmlinkage long sys_kanako(void); # 最後に追加 system callの中身 sys.cの最後に,system callの中身を書いていきます.今回はprintk()を使って,コンソールログにメッセージを出力させました. $ sudo vim kernel/sys.c asmlinkage long sys_kanako(void){ printk("Cinderella of tea plantation\n") return 0; } コンパイル・インストール sudo fakeroot make-kpkg --initrd --revision=1.0.mysyscall kernel-image kernel-headers sudo dpkg -i linux-image-3.8.8_1.0.mysyscall_i386.deb sudo dpkg -i linux-headers-3.8.8_1.0.mysyscall_i386.deb sudo reboot 確認 syscall()で登録したsystem callを呼び出します.実行後,dmesgコマンドを使うと,正しくメッセージが出力されることがわかります. #include<linux/unistd.h> #define __KANAKO__ 351 # はじめに決めた番号 int main(void){ syscall(__KANAKO__); return 0; } $ dmesg [ 3197....

April 26, 2013

ubuntuのインストールメモ

Ubuntu12.04 LTSを入れたので,そのメモ # ubuntu 10.10 以前のgnomeのパネルを復活させる. $ sudo apt-get install gnome-panel # mozc $ sudo apt-get install ibus-mozc mozc-server mozc-utils-gui # chrome $ sudo apt-get install google-chrome-stable # vlc $ sudo apt-get install vlc vlc-plugin-pulse mozilla-plugin-vlc # dropbox $ sudo apt-get install nautilus-dropbox # inkscape $ sudo apt-get install inkscape # git $ sudo apt-get install git $ git config --global user.name &quot;bobuhiro11&quot; $ git config --global user.email &quot;hogehoge@hoge.com&quot; $ git clone git@github....

April 23, 2013

rubyでbrainfuckインタプリタ

Brainfuckの言語仕様 これは,wikipediaからの引用です. 処理系は次の要素から成る: Brainfuckプログラム、インストラクションポインタ(プログラム中のある文字を指す)、少なくとも30000個の要素を持つバイトの配列(各要素はゼロで初期化される)、データポインタ(前述の配列のどれかの要素を指す。最も左の要素を指すよう初期化される)、入力と出力の2つのバイトストリーム。 Brainfuckプログラムは、以下の8個の実行可能な命令から成る(他の文字は無視され、読み飛ばされる)。 ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。 < ポインタをデクリメントする。C言語の「ptr–;」に相当。 ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。 ポインタが指す値をデクリメントする。C言語の「(*ptr)–;」に相当。 . ポインタが指す値を出力に書き出す。C言語の「putchar(*ptr);」に相当。 , 入力から1バイト読み込んで、ポインタが指す先に代入する。C言語の「*ptr=getchar();」に相当。 [ ポインタが指す値が0なら、対応する ] の直後にジャンプする。C言語の「while(*ptr){」に相当。 ] ポインタが指す値が0でないなら、対応する [ (の直後[1])にジャンプする。C言語の「}」に相当[2]。 実装 rubyを使いました."[“と”]“のところはやっぱり大変. #!/usr/bin/env ruby class BrainFuck def set(program) @pc = 0 # プログラムポインタ @pro = program # プログラム @mar = 0 # メモリアドレスレジスタ @mem = Array.new(30000,0) # メモリ(30000Bytes分) end def step() # オペコード読み出し op = @pro[@pc] @pc+=1 # 実行 case op when ">" @mar+=1 when "<" @mar-=1 when "+" @mem[@mar]+=1 when "-" @mem[@mar]-=1 when "....

March 21, 2013

rubyまとめ

ruby(rails)をさわる機会が出来たので,こちらのページを参考に調べてみました.rubylearning.com summary 3までです.それ以後はまだ読めていません. インデント タブはスペース2個分 メソッド呼び出し 次のようなメソッドの呼び出しが,許されている. foobar foobar() foobar(a, b, c) foobar a, b, c すべてがオブジェクト integerやstringなどすべてオブジェクトである.しかし,putsやgetsなどのいくつかのメソッドはどこでも使用出来る.それは,これらのメソッドは,rubyカーネルモジュールに含まれているからである.rubyカーネルモジュールは,全てのクラスから参照できるメソッドを定義しているモジュールであり,objectクラスはこのモジュールをインクルードしている. コメント #から始まる一行,または=beginと=endで挟んだ行をコメントとする. 真偽 予約語であるfalseやnilのみが偽であり,zeroやnull string,null characterやその他のものはすべて真である. インクリメント,デクリメント ++や–で表させるインクリメントや,デクリメントは利用出来ない.+=や-=は利用できる. 糖衣構文(シンタックスシュガー) 演算子に見えるものは,すべてメソッド呼び出しである. コマンド実行 バックチックで囲むと,そのコマンドが実行される.その後,putsメソッドによりコマンドの結果(この場合,ファイルの一覧)が出力される. puts `ls` もう一つの方法は,カーネルメソッドのsystemを使うことである.返値は,コマンドが見つかり,適切に実行されるとtrue,コマンドが0以外で終了すればfalse,コマンドが実行できなければnilである.ただし,system内のコマンドの出力先は,rubyのプログラムの出力先と同じである. system(&quot;tar xzf test.tgz&quot;) 変数,定数 $から始まるとグローバル変数,小文字またはアンダースコアで始まるとローカル変数である.トップレベル自体が,ローカルスコープを持つ.全てのモジュール,クラス,メソッドの定義がローカルスコープを持つ.@から始まるとインスタンス変数であり,@@から始まるとクラス変数である.大文字から始まると定数である. コンソール入力 コンソール入力には,putsとchompが便利.STDOUTはプログラムの実際の出力機構である.flushでバッファに溜まっているのを吐き出す.この使い方が推奨されている.getsで一行分のデータを読み込み,chompにより改行コードを除く. puts "What's your name?" STDOUT.flush name = gets.chomp puts "Hi"+ name + "!!" Bang(!)メソッド sort/sort!,upcase/upcase! ,chomp/chomp!,reverse/reverse!などで!がついているものは同じオブジェクトに対して操作を行い同じオブジェクトを返す.!が付いていないものは新しくオブジェクトを作ってそれを返す. 文字列の比較 文字列の比較には==,String.eql?,String.equal?の三種類がある.==とString.eql?は中身の文字列が同じかどうかの比較を行う.String.equal?はオブジェクトが同じかどうかの比較をおこなう. %wの利用 単語の配列を作るとき,%wというショートカットがある. names1 = [ 'ann', 'richard', 'william', 'susan', 'pat' ] puts names1[0] # ann puts names1[3] # susan # this is the same: names2 = %w{ ann richard william susan pat } puts names2[0] # ann puts names2[3] # susan while よくあるwhile文です....

March 20, 2013

rubyとrailsをバージョンを指定してインストールする.

インストールしたいもの ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0] Rails 3.2.11 1.rbenvとruby-buildのインストール $ brew install rbenv $ brew install ruby-build ここで,rbenvをbash起動時に読み込むように, eval "$(rbenv init -)" を~/.bash_profileに追加する. 2.rubyのインストール $ rbenv install -l # インストールできるrubyの一覧 Available versions: 1.8.6-p383 1.8.6-p420 1.8.7-p249 1.8.7-p302 1.8.7-p334 1.8.7-p352 1.8.7-p357 1.8.7-p358 1.8.7-p370 1.8.7-p371 1.9.1-p378 1.9.2-p180 1.9.2-p290 1.9.2-p318 1.9.2-p320 1.9.3-dev 1.9.3-p0 $ rbenv install 1.9.3-p194 # rubyのインストール $ rbenv global 1.9.3-p194 # 普段利用のrubyを1.9.3にする. 3.railsのインストール $ rbenv exec gem install rails --version="~> 3....

March 16, 2013

高専を卒業しました.

卒業しました. 5年間が一瞬で終わってしまった感じです.正直,部活の練習や試合も,編入の受験勉強をするのも,カラオケの幹事も,旅行の計画も,サッカーの試合も,プロコンの活動もぜんぶ誰かに引っ張ってもらってました.自分ひとりでは何にもできなかっただろうし,ほんとに感謝しています. 4月からは,いきなり誰も知り合いのいない街に,行くことになります.もちろん不安もあるけど,結構ワクワクしているのでなんとかやってけるかなと軽い考えでいます.今までもそうだったし,多分これからもそのほうがうまくいく気がします. 夏休みになったら香川に帰ってくるから,そんときぷち同窓会でも出来たら嬉しいです.

March 15, 2013

.NETアプリのデコンパイル

面白そうなツールがあったので,その紹介です. dotPeekです.これを使うと.NET1.0から.NET4.5を使って作られたアプリケーションをC#のコードへデコンパイルしてくれます. 1.準備 準備として,以下のような.NETのアプリケーションを作りました.ユーザからの入力が"momoclo"かどうかチェックしてメッセージボックスを出すだけの簡単なプログラムです. private void button1_Click(object sender, EventArgs e) { // パスワード if (textBox1.Text == &quot;momoclo&quot;) MessageBox.Show(&quot;Success&quot;); else MessageBox.Show(&quot;Failure&quot;); } ファイルを開くと,すぐにデコンパイルしてくれて,このようにあっさりC#で書かれたコードに戻されます.凄すぎる.やっぱりパスワードのベタ書きはダメだな.危ない. 参考: Introducing “dotPeek” - A free .NET Decompiler by JetBrains

March 13, 2013

よく使うgitコマンドをワンライナーで調べてみた.

ワンライナー書いてみました. history | awk '{ print $2,$3 }' | grep '^git' | sort | uniq -c | awk '{com[NR]=$3;a[NR]=$1;sum=sum+$1} END{for(i in com) printf("%6.2f%% %s %s \n" ,(a[i]/sum)*100."%","git",com[i])}' | sort -gr 実行結果です. $ history | awk '{ print $2,$3 }' | grep '^git' | sort | uniq -c | awk '{com[NR]=$3;a[NR]=$1;sum=sum+$1} END{for(i in com) printf("%6.2f%% %s %s \n" ,(a[i]/sum)*100."%","git",com[i])}' | sort -gr 32.93% git status 14.63% git diff 14.23% git add 11....

March 13, 2013

[android]Androidアプリのデコンパイル

Android: Getting source code from an APK file こちらのページを参考にして,.apkファイル(Androidアプリ)をデコンパイルして,javaファイル,.xmlファイル,リソースファイル抜き取りました. デコンパイルするアプリはこのアプリを使いました.他人のアプリをデコンパイルするのはまずそうなので,自分のアプリでやってみました. ぱずうぇい - https://play.google.com/store/apps/details?id=net.bobuhiro11.puzzleroad 以下は,その手順です.殆どというか全部そのページの通りです. Step 2: Step 3: あっさり解析できてしまって驚きです.クラス名,変数名,メソッド名もそのまま見れます. 参考: Android: Getting source code from an APK file

March 12, 2013

GnuPGのメモ

メールの暗号化のためにGnuPGをインストールしたので,そのメモです.インストールは,Homebrewから行いました.Homebewでgpgを検索してみると,“gpg"と"pgp2"がありましたが,よく分からなかったので,“gpg"を使いました. $ brew install gpg 鍵の生成も,“gpg –gen-key"で一発でできます. $ gpg --gen-key gpg (GnuPG) 1.4.13; Copyright (C) 2012 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gpg: ディレクトリー「/Users/bobuhiro11/.gnupg」ができました gpg: 新しい構成ファイル「/Users/bobuhiro11/.gnupg/gpg.conf」ができました gpg: 警告: 「/Users/bobuhiro11/.gnupg/gpg.conf」のオプションは起動している間、有効になりません gpg: 鍵輪「/Users/bobuhiro11/.gnupg/secring.gpg」ができました gpg: 鍵輪「/Users/bobuhiro11/.gnupg/pubring.gpg」ができました ご希望の鍵の種類を選択してください: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (署名のみ) (4) RSA (署名のみ) 選択は? RSA keys may be between 1024 and 4096 bits long....

March 9, 2013

[PHP]Twitter Search API 1.1のメモ

1.1になったことで,1.0に比べて,検索の呼び出し回数が,1時間150回から15分180回になったみたいです.しかし,APIの呼び出しにOAuth認証が必須になっています.そして,検索のURLも変わってます. 1.0 http://search.twitter.com/search.json 1.1 https://api.twitter.com/1.1/search/tweets.json はじめにTwitterAPI1.1を使うには,OAuth認証が必要なので,ここから登録してください↓ 詳しくはいろんなところに書いてあったので省略します. https://dev.twitter.com/apps 次に,phpからtwitter api 1.1 を呼び出せるように,Abraham Williamsさんのgithubからライブラリをダウンロードします. git clone git://github.com/abraham/twitteroauth.git 後は,以下のようなコードを書けば利用できます. require_once("twitteroauth/twitteroauth.php"); $twitterOAuth = new TwitterOAuth( "**********************", # consumer key "****************************************", # consumer secret "**************************************************", # access token "******************************************"); # access token secret $param = array( "q"=>"iphone", # keyword "lang"=>"ja", # language "count"=>100, # number of tweets "result_type"=>"recent"); # result type $json = $twitterOAuth->OAuthRequest( "https://api.twitter.com/1.1/search/tweets.json", "GET", $param); $result = json_decode($json, true); foreach($result['statuses'] as $tweet){ echo $tweet['text']....

March 8, 2013

卒研発表

3/4,5にうちの高専で卒研発表がありました. ブログに書くのを忘れるところでした. その成果物の一部としてwebサービスを作ったので,良かったら見てみてください!! こちらです↓ Reputter (http://bobuhiro11.net/reputter) 適当なキーワードで検索すると,Twitter上の文書のネガポジ判定ができます. アイドルとか,贔屓のスポーツチームとか,応援してる芸能人とかで検索してみてください. 実はこれTwitter api 1.0を使ってるんでそろそろ止まっちゃいそう. それと3月中に他にも,「時間あるし何か作ろうぜ!」って話があるので,そっちも折角の機会なのでちゃんと取り組めたらなと思います.

March 7, 2013

[Android]ぱずうぇいを公開してみた.

Androidアプリとして,卒研の息抜きみたいな感じで開発していたパズルゲームがあります. お蔵入りになりそうだったので,一昨日Google Playで公開しました.ここで,ちょっと紹介します. 基本的なルールは,棒人間がゴールへ到達すればゴールです.途中落とし穴などがあり,一筋縄ではいかないようになっています.良かったら遊んでみてください. ダウンロードはこちらから https://play.google.com/store/apps/details?id=net.bobuhiro11.puzzleroad

February 22, 2013

[Android]GC_CONCURRENT freedの対処法

...

January 29, 2013

[Mac]androidアプリの開発環境

わざわざここに書かなくても,ググればすぐに見つけれると思いますが(汗 Androidアプリの開発環境づくりは何度かやったことがありますが,Macでは初めてです. ただ,Windowsとそんなにかわらない感じです. 環境はOS X 10.8.2 mountain lionです.すこし,長い記事になりました. [bash] tar xzvf eclipse-jee-juno-SR1-macosx-cocoa-x86_64.tar.gz mv eclipse /Applications/ [/bash] これだけです(笑 すごく簡単や ...

January 8, 2013

MBA買っちゃいました.

macbook airを買っちゃいました.前から欲しい,欲しいと言ってきてやっと手に入れることができました.にわかマカー誕生です.これから,環境を整えていきたいと思います.windowsと違って,ctrl-h,ctrl-f,ctrl-bなんかでテキストの編集ができること,unixのコマンドが使えること,トラックパッドが凄く気持ちいいこと,などかなり満足しています. ただ,手汗のせいで,トラックパッドがうまくいかない時があるので,なんかいい解決方法を探さないといけません(汗

January 3, 2013

svmでテキスト分類

明けましておめでとうございます.今年もよろしくお願いします. 早速ですが,SVM(サポートベクターマシン)を試してみたので,その方法を書いておきます.ナイーブベイズなどと同様にテキストの分類ができます.ここでは,svm_lightを使いました. cd /usr/local/src mkdir svm_light cd svm_light wget http://download.joachims.org/svm_light/current/svm_light_linux.tar.gz gunzip -c svm_light.tar.gz | tar xvf - make all インストール後,/usr/local/src/svm_lightへパスを通しておきます. 1 i am happy 1 happy happy new year -1 bad year -1 i am bad 次に,それぞれの単語と数字の対応表を作ります. 1:i 2:am 3:happy 4:new 5:year 6:bad 最後にこの対応表をもとに,学習データを作ります.(このファイルを"example_file"とする.) 1 1:1 2:1 3:1 1 3:2 4:1 5:1 -1 5:1 6:1 -1 1:1 2:1 6:1 svm_learn example_file model_file svm_learnコマンドでモデルファイル(“model_file”)を作ります.

January 1, 2013

セキュリティうどん 7杯目

今日は,”セキュリティうどん”に参加するために香川大学に行って来ました. 勉強会は初参加,セキュリティはカナリの素人ですがすごく楽しめました. テーマは"スマートフォンセキュリティ"ということで,フォティーンフォティ技術研究所の鵜飼さんがセッションを行なってくれました.自分が理解出来た範囲でメモしときます.おかしなところがあったら教えて下さいm(_ _)m iOS アプリのインストールはすべてAppStoreを通して行われる.(JailBreakを除く) AppStoreには審査があるが,この審査を通ってしまうマルウェアは多くのリソースにアクセス出来てしまい,とても危険. Android アプリはGooglePlay以外からでもインストール出来る.GooglePlayにはBouncer(注1)というマルウェアの自動スキャン機能がある.Androidにはサンドボックスがあるが,それを超えられるとセキュリティソフトよりも,マルウェアの方が権限が高くなり,どうしようもなくなる. Windows Phone 7 この中ではもっとも安全.アプリには厳重な審査が必要.サンドボックスもある.ALSR(Address space layout randomization)はあるが,ヒープだけは守られてないらしい.(この辺りはよく分からなかった) マルウェア解析 パターンマッチとヒューリスティックエンジンという方法がある. だだ,パターンマッチだけでは検知できないものが多い.将来はヒューリスティックエンジンが重要になってくる. 注1 Bouncer GooglePlayにはBouncerという自動スキャン機能があり,アプリをあげたときにVM上で動的解析が行われ,マルウェアかどうか分析される.しかし,指定時間以内は悪さをしない,VM上のIPアドレスでは悪さをしないようなアプリはこの解析をすり抜けてしまう. すごく偉そうになってしまった(^_^;) 感想 喉が痛くてずっとマスク付けてました.風邪菌ばらまいてすいません. LTのネタの仕込みに感動した. もっと早くセキュリティうどんを知ってたら良かったかもしれない. 鵜飼さんはやっぱりうちの高専の出身だった. 大学生がたくさん参加していた. 男性の割合が多かった.というか女の方はいらっしゃらなかったような(汗)

December 8, 2012

卒研中間発表

今日卒業研究の中間発表がありました.前回の記事のナイーブベイズを応用したものを発表しました. ただ,学生と2,3人の先生しか聞いてなかったので,アットホームな感じで緊張とかはなかったです.がっつりやってるなって人から,んっ?て人までいろいろでした.他の高専とかの発表も聞いてみたいな. それと,全く関係ないけど最近負けが続いてるので,来週から取り返しに行きます!

November 15, 2012