第七回 カーネル/VM探検隊 に参加してきました。 #kernelvm
http://atnd.org/event/kernelvmseven
日時:2012/04/22
会場:株式会社インターネットイニシアティブ(IIJ) 大会議室
座席表は先に作られてしまった。座席表職人敗北。
https://docs.google.com/spreadsheet/ccc?key=0Al2CkS-MBrjQdGMzVjVUVHk1aG1xQmRrN1FJWXdoX2c#gid=0
発表してる全員の内容がぶっ飛んでる、底が抜けにコワイ
今まで参加してきた勉強会にに比べると、このジャンルが一番自分の業務に近いかなと思った。
そう参加するまでは。
どうやら思い違いをしていたようだ。
話についていけない・・・
1割も理解できたかどうか・・・
「XXXがなくてホントごめんなさい」と言いながら、マサカリを飛ばす
大学生、高校生、中卒フリーター・・・
平成生まれ、こわいわー
よく「ナゴヤこわい」とか言ってたけど、ここでは、本当の恐怖を感じたのだった。
セッション
とあるCPUの論理合成
[twitter:@xylnao]
- FPGAボードにPDP-11を移植した!
- 要するにFPGAとは、レゴとかプラレールみたいなもの
- HDL: Hardware Description Language 主流はVHDL
- ブート時の波形
- たいしたことじゃ無い
- どうやらFPGAを壊した。こんなこともあろうかと、別のもの用意しておいた
- doxygenは、VHDLにも対応している
- ソフト屋が深入りする必要はないが、ハードを知っていればそのぶんだけお得
- PDP-11でライバルに差をつけよう
- 教訓:口は災の元
いきなりFPGA(Field-Programmable Gate Array)という回路の話。。。
面白そうではあるが、「たいしたことじゃない」は、信じちゃいけないキーワード・・・
準備してものが壊れたから別のものでデモって3分クッキングかw
Extreme Java
- Java原人、Javaのためならなんでも。ハードウェア設計、ハードウェア実装、サーバサイドJavaもやる。」
- Javaとは? 小型の組み込み機器等に使われるプラットフォーム、最近はパソコンで動くようになった
- EHCI -> Ralinkドライバ-> 802.11-> TCP/IPまでJavaらしくJavaで実装した話
- /* なぜかコケる */ という FreeBSDのRalinkドライバ
- TCP なんでこんなプロトコルが30年以上まともに動いているのかまったく不明。二度とやりたくない
- 組込みJavaにはGCなどない。解放?開放しません。immortal Heapで領域を確保して、プールとして扱う。自分でmalloc()/free()を書く
- 百聞は1コーディングにしかず
- TCP実装してみれば実力がつく
- デバッグが容易 腐っても自分のコード
- 半年強で実装しました。結局使われませんでした。そもそもJavaでやる必要は・・・
http://code.google.com/p/squilla/
なのは完売 とある関数のバトルプログラム
- Windows 上でのアンチフック技法(逆から見れば、フックする技法)
- SexyHook
- LoadLibraryAは、我らLoadLibrary四天王のなかで最弱
- SetWindowsHookEx は魔王、LrdLoadDll が元締め
- DLLインジェクションではなく、CreateRemoteThread()でマシン語を直接注入
- それを防ぐには、スレッドの作成を防ぐ(今回は全部のスレッド生成を抑止)
- 攻性防壁、ヤラレっぱなしってくやしいですよね
- むやみに斬りかかるわけにはいかないので、特定が難しい
- dllを削除などというコードは書いてはいけません。コマンドプロンプトさえ動かなくなる
- 攻撃されたら、Sleep(3日)とやりましょう
- 反撃するコードは法令を守って実装しましょう。
デバッグ用に、CreateRemoteThread()でゴニョゴニョってのはやったことあるけど
こんなことができるなんだな。
Preziの使い方もうまいな。
休憩
- 持ち寄りのお菓子
- Fusion-ioの1GBのUSBメモリ
- 各種シール
コマンドとシェルスクリプトで企業システムを作る ---USP研究所の取り組み
[twitter:@uecinfo]
- bashでCGIを書く人
- bashで作ったほうがインジェクションされないでしょ
- 売上の管理や勤怠の管理などのシステムをbashで作る
- できない情報システム部の人に最初に使わせるのがFreeBSD(最近Linuxから変えた)、vim、awk、sedの講習をして、自分たちでシステムを作ってもらう
- 学生さんはよく聞いて欲しい、仕様はできてから固まるというSI業界
- 失敗しない設計を請け負うSE、失敗したらカウンセラーのお世話に、『下請けを切ればいい』というセリフも、最後は弁護士が必要
- どう戦うか? 実績をコツコツと積み上げる。自分たちで作ってもらう。他人に作ってもらうと弁護士を雇ってる会社に作ってもらうと高いわけで、自分たちで作ってもらった方が多少質は下がるけど安いでしょ。
- データはDB使わずテキスト、中身が見える。余計なソフトウェアはいれません。PHPは使いません。
- パイプでプロセス分けて並列実行、マルチコアの性能をフルに使いきれる。
- gyoコマンド、ketaコマンド
「Unixはもともと特許管理の処理に使われてた。これはUnixの正しい使用方法。」と会場からのコメントがあったが、
“今でも”正しい使用方法といえるのだろうか?
ベストなシステム開発といえるんだろうか?
それに、awk、sedが“誰にでも”理解しやすいとは思えないんだよな。
FreeBSD 9新機能、さらに先の未来10へ : 最小特権オペレーションを実現する「Capsicum」
[twitter:@daichigoto]
- FreeBSD Daily Topics 読まなくてもいいからRSSを登録してください
- FreeBSD Expert 2012 Digital Edition 技評デジタルパブリッシングから購入可能 epub形式とhtml形式がある
- そのepubを使っての説明
- 安定運用するためには、ZFSのバージョンを上げない
- ZFS:じぃーえふえす、GEOM:じおん、Capsicum:かぷしかむ
- FreeBSD9 には NFSv4 が入る
- Mac OS X Lion も NFSv4 対応している。defaultでidを変更する。ただし自己責任で
- BSD Installはシェルスクリプト。シェルスクリプトの方が柔軟だから。
- IPv6 オンリーのカーネル、IPv4 オンリーのカーネル、IPなしのカーネルを作れるようになっている。IPv6 対応で切り分けに便利
- デフォルトコンパイラが gcc から LLVM Clang へ移行
中卒フリータの日常(?タイトルがなかったような)
[twitter:@sora_h]
118km120.1kmかけて新幹線でアルバイト- 中卒フリーター(オワコン最終兵器)
- 高校行ってない
coockpadCOOKPADでアルバイト- 33分の時間を残して終了、運営「あと33分の質問できるよ」sora_h「だからLT枠で足りると言ったのに(´・ω・`)」
不備指摘があったので修正
Nyarlathotep(sora_hの発表が早く終わったので飛び入り)
[twitter:@hiromu1996]
- ちゃんと高1になって、学校行ってます。
- もうbrainf*ckの単純置き換え言語はいいよ
- Esolang(Esoteric Programing Language、難解プログラミング言語)がなめられている?Esolangの怖さを思い知るが良い
- Nyarlathotep 純粋関数型、遅延評価、型なしラムダ計算、チューリング完全
- (」・ω・)」うー:関数適用 (/・ω・)/にゃー: U combinator
- 同級生の純粋関数型野郎
16歳こわいわ近寄らんとこ。
LT
m4 で実用的プログラミング
[twitter:@a4lg]
- Gnu m4 マクロ言語
- m4は極めて実用的なプログラミングです。極めて実用的なプログラミングです
- 数値計算をやるexpr()今回は便利すぎるので使用禁止
- m4 チューリング完全なんじゃね?
- そこでbrainf*ckの実装
brainf*ckを全否定された後に、brainf*ckとかw
Arduinoで耳grepつーるつくってみたよー
[twitter:@katsyoshi]
- 耳grep
- 「2012/02/19 盛大な*grep TL
- バイナリじゃないけど鳴らしてみようと思った
- キュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥキュルゥ
- Q.「grepはどこでやるのでしょうか?」
キュルゥキュルとかセットを巻き取るような音に気をとられていたが
質問的確すぎてワロタw
Software Development with Text Editor, OS Kernel and VM
[twitter:@suma90h]
SAN値論理と名状しがたいSAN値Prolog
[twitter:@takeoka]
http://www.takeoka.org/~take/ailabo/prolog/sanchi-prolog/sanchi-prolog.pdf
軽快なPlan9 Update - Illumos-kvm上陸 -
- さっきRedbull飲んだら手が震えてきて・・・
- ゲストはネットワークにつながってないのに、ハイーパーコールを使って底を抜けば、ネットワークにつなげてしまう
- Clojure登場
- あっつがらない・・・
- 筑波の学生からメンテナ募集
底を抜くってゲストOSからホストOSにアクセスすることなのね。
軽快なBHyVe
[twitter:@syuu1228]
- 独自ローダーからFreeBSDカーネルをゲストOSとしてロード&ブートだが、BIOS無いからブートローダが動かないという問題
- SeaBIOSをBHyVeに載せりゃええやん→提案→却下→GPLだから
- IntelVTでソフト割り込み:Trapしたくない、ソフト割り込みからBIOSコールだけを抽出:面倒
- そこでPlan 9
- vmcall:HyperVisorへVMExit、BIOSエミュレート
やっぱり底を抜くんだ。
つくっておぼえる!仮想マシン〜直前で実装編〜
[twitter:@siritori] & [twitter:@iorivur]
VM in Haskell ソースコード
x86-64/Linuxに独自メモリ空間を勝手増設
[twitter:@nminoru_jp]
- Linuxカーネル
- ふつうのサラリーマン
- オレオレVM。Linux仮想マシンの中にさらに仮想マシン
- ふつうのサラリーマンは仮想マシン書ける
- オレオレVMを使えばx86-64のMMUを全部使える(でも、カーネルのリベースが大変)
ふつうのサラリーマンってなんだろう。
bcache でお手軽階層型ストレージ
[twitter:@m_asama]
bcache でお手軽階層型ストレージ
TinyCC on NaCl
[twitter:@shinh]
Tinycc on NaCl
- IOCCCで
優勝入賞したからそれを自慢するために来た
#include<stdint.h>// 4 #include<stdio.h>/* 76. 1 ..2321 1 57 3 21.... . .. .11 1 2 1 88..1321 2 33 5512 1 277 14 1 099..12.... . .. .... 1 4 11111...111 122 5.1 . 11...221.821112411123455676489 51.176543232666 902 .27 1 10111...1.....................11.417...........1...21..11. ..2239921176566156225563322299887...6533233233182469196894 22...............................111...................... */// 3269548556987776665556662131223412347543332334543322223456 /* 13.3.37 */char C[120] [60 ];int R[120][60],W,H,J,K,B[61][61],/* 12.2.39 */r,i,j,c,*q =& H,t=7200,x,y,k;int64_t*U,T[28800],*S=/* 11.2.40 */T,O[120], Z[ 120],v,z;void D(){for(k=-1;7200>++k;S[/* 10.39 */k]=v)r=! ~(v=U[k])&&*R[k/60]?2:S[k]-v?1:r;;;;}/* 9.36 */void L( ){for(r=1;r==1;){r=3;;for(i=0;120>/* 9.31 */i;i++){ for(k=z=1,j=0;v=R[i][j];j++)O/* 8.3.32 */[i]|=( 1LL <<v)-1<<k,k+=v,0,Z[i]=z|=1LL<</* 7.3.30 */k++;; v=~ (3LL<<k-2);for(j=-61;++j<60;/* 5.3.29 */v=( v|~ z)&(j<0?v>>1:v<<1|1))v=S[60/* 3.1.3.1.28 */* i +(j < 0?~j:j)]|=j?v:~3;}for(z=0;/* 1.2.4.31 ; */ 7200 >z;z++)i=z/60,j=z%60,(B[i<60?/* 7.5.31 */i:j][ i<60? j:i-60]=~S[z]&O[i]?~S[z]&Z[i]/* 1.6.5.30 ; */?r=0 :(U=O ,1):(U=Z,2))?k=i<60?j+60:j,S/* 5.10.12.16 */[i% 60+60*k]|= ~U[k]:0;U=S; S-=t*=-1;D();z/* 5.11.5.4.12.4 */*9; }}int main( ){for (;K= scanf("%d",R [*/* 15.2.4.4.11.5 */q+c*60]+j)<1? q= &W,j --,2 >++c:'\n';j =-K/* 16.3.4.2.2.5.5 */+getchar()?j+1 :++ *q*0 ); L( );;if (!r/* 14.8.7.3 */)for(K=0;K<W *60;K++) if(K%60 </* 12.1.4.1.6.2 */W&!B[K/60] [ K%60 ] ){for( /* 11.3.4.6.1 */c=64;c--; )if (!(1 &S[K/* ; 10.1.8.8.5.1 */]>>c))U= S ,000,S+= J=14400, D()/* ; 9.8.11.5 */,S[K]=~ (1LL<<c) ,L(),S-=J,S [K]/* 9.5.6.1.2.4.1 */|=r==2? 1LL<< c:0;L( ) ;} q=/* ; 9.3.5.1.5 */&K;;for (J= K=i=0 ; 120/* 3.2.6.5.1 */> i; Z[i]=k --,/* ; 2.6.3.5.1 */ i>59?q =&J :0,/* ; 2.1.2.6.3.6.1 */ * q< k?*q=k :0, 0,C[/* ; 2.1.2.2.1.5.2.5.1 */ i ++ ][ k ]=' ' ){ j=k/* ; 2.1.2.5.5.6.3 */ = 0; for(; x=R[i ][j++] ;/* 4.1.9.7.5.1 */0) k +=sprintf ((00,C[ i]+/* ; 5.19.6.1.2 */k), "%d.",x);}i=~J;;r&1 ||puts ( /* 24.6.3.3 */r?"invalid":"failed"); for(;i <H; i/* 24.1.2.9.7.4 */++,puts(""))for(j=~K;j < W; )putchar( i<0?j<0 ||/* 25.1.2.25 */(k=i+Z[j+60])<0?' ':C[j + 60 ][k]:j<00?(k=j+Z[i])<0?/* 28.1.26 */' ':C[i][k]:"?X "[B[i][j]] ) ,j++;return 0;} /* 2012 */
- ブラウザでCをちょっと実行できるといいよね
- アニメのキャラを描いたコード、実行するとキャラクターが小さくなる。そして更にそれがCのコード
/* + + + + [ >i>n[t */ #include<stdio.h> /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1; */int/**/main(int/**/n,char**m){FILE*p,*q;int A,k,a,r,i/* #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%" "d\n%d\40%d"/**/ "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**" "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*=" "yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?" "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/** */"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2" ":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[ i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1] !='\0'))?fopen(m[1],y+298):stdin; /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m] =<2<5<64;}-]-(m+;yry[rm*])/[* */q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{ }[*/:fopen(m[2],d+14);if(!p||/* "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++" <)< ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/) return+printf("Can " "not\x20open\40%s\40" "" "for\40%sing\n",m[!p?1:2],!p?/* o=82]5<<+(+3+1+&.(+ m +-+1.)<)<|<|.6>4>-+(> m- &-1.9-2-)-|-|.28>-w-?-m.:>([28+ */"read":"writ");for ( a=k=u= 0;y[u]; u=2 +u){y[k++ ]=y[u];}if((a=fread(b,1,1024/* ,mY/R*Y"R*/,p/*U*/)/* R*/ )>/*U{ */ 2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\} */sscanf(b,d,&k,& A,& i, &r)&& ! (k-6&&k -5)&&r==255){u=A;if(n>3){/* ]&<1<6<?<m.-+1>3> +:+ .1>3+++ . -m-) -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/ u++;i++;}fprintf (q, d,k, u >>1,i>>1,r);u = k-5?8:4;k=3;}else /*]>*/{(u)=/*{ p> >u >t>-]s >++(.yryr*/+( n+14>17)?8/4:8*5/ 4;}for(r=i=0 ; ;){u*=6;u+= (n>3?1:0);if (y[u]&01)fputc(/* <g-e<t.c>h.a r -(-).)8+<1. >;+i.(<)< <)+{+i.f>([180*/1* (r),q);if(y[u ]&16)k=A;if (y[u]&2)k--;if(i/* ("^w^NAMORI; { I*/==a/*" )*/){/**/i=a=(u)*11 &255;if(1&&0>= (a= fread(b,1,1024,p))&& ")]i>(w)-;} { /i-f-(-m--M1-0.)<{" [ 8]==59/* */ )break;i=0;}r=b[i++] ;u+=(/**>> *..</<<<)<[[;]**/+8&* (y+u))?(10- r?4:2):(y[u] &4)?(k?2:4):2;u=y[u/* 49;7i\(w)/;} y}ru\=*ri[ ,mc]o;n}trientuu ren ( */]-(int)'`';} fclose( p);k= +fclose( q); /*] <*.na/m*o{ri{ d;^w^;} }^_^}} " */ return k- -1+ /*\' '-`*/ ( -/*}/ */0x01 ); {;{ }} ; /*^w^*/ ;}
帰ってきたvinarise 予告編 in Kernel/Vim探検隊 (飛び入り)
[twitter:@ShougoMatsu]
ソースコード
Vimでバイナリ編集が出来るプラグインvinarise 紹介記事
- カーネル/Vim探検隊なのにVim成分が足りない
- vinarise:vimでバイナリエディタ実装
- 脅威のVimScriptテクノロジー
- みんな大好きビットマップビュー
- この辺、日本語っぽいのわかりますか?目grepができる!
カーネル/VM探検隊の「ふつう」ってなんだろう・・・
発表者もそうだけど、Togetterの『残りを読む(5246)』って
どんだけTweetしてるんだよ。
これはこわい、近寄らんとこw
懇親会
ヘロヘロ
ほとんど話せず。
ちなみに、オレンジの服来てた。(ておくれ)
発表者の方非常にコワイ興味深い話面白かったです。
参加者のみなさんおつかれまさでした。
会場を提供してくださった。IIJさんありがとうございました。
無線LAN、HD画質の動画配信、モニタでのTwitterのTL表示など充実した設備。
関連ブログ
第七回 カーネル/VM探検隊(本家)
第7回カーネル/VM探検隊で仮想マシン作った発表してきました
memo for 7th Kernel/VM expedition
今年もGoogle Summer of Codeに採択されました
Tinycc on NaCl について kernel/VM 探検隊7で話しました
第7回kernel/vm探検隊でなのは完売しました。
Togetter
カーネルVM探検隊 2012.4.22
カーネルVM探検隊 2012.4.22 暫定版2
カーネルVM探検隊 2012.4.22 暫定版3
カーネルVM探検隊 2012.4.22 暫定版4
カーネルVM探検隊 2012.4.22 暫定版5
カーネルVM探検隊 2012.4.22 暫定版6
コマンドとシェルスクリプトで企業システムを作る ---USP研究所の取り組み #kernelvm
FreeBSD 9新機能、さらに先の未来10へ : 最小特権オペレーションを実現する「Capsicum」 #kernelvm
*1:foo *x