タグ

ブックマーク / mmi.hatenablog.com (7)

  • Rustのasync/awaitを使ったecho serverの実装 - 睡分不足

    rust 1.39でasync/await構文が安定化されます. 巷で話題の機能ですが,asycn/await何も分からん...ということで話題に乗り遅れないためにasync/awaitを利用してecho serverを実装してみます. OSはLinuxが対象です.ソースはここにあります. echo server async/awaitを使用する前に,まずは通常のecho serverを作成してみます(ソース). あえてstd::netを使わないで実装しています. 主処理は以下のようになっています. fn handle_client(stream: TcpStream) -> io::Result<()> { let mut buf = [0u8; 1024]; loop { let n = syscall!(read( stream.0, buf.as_mut_ptr() as *mut

    Rustのasync/awaitを使ったecho serverの実装 - 睡分不足
  • American Fuzzy Lop (AFL)の構造 - 睡分不足

    AFLとは American Fuzzy Lop (AFL)はファジングツールの一つです. ファジングとはプログラムの脆弱性検査手法の一つで,簡単に言ってしまえばあるプログラムをランダムな引数で実行することを繰り返して,プログラムがクラッシュするような入力を探そうという方法です. なんとも場当たり的な対応で心許ない気もしますが,実際には洗練されたアルゴリズムを利用することで一般に良く機能します. 世の中ファジングツールは数多く存在しますが,AFLはその利用の簡単さと,何よりも何百何千というバグを実際に見つけている運用実績で有名です. 最近は更新が止まっているようですが,AFLはコードが簡潔にまとまっており,AFLを参考に作られてたファジングツールも多く存在します. AFLの技術的詳細はAFLの作者がtechnical_details.txtにまとめています. これを読むとAFLの概要は分か

    American Fuzzy Lop (AFL)の構造 - 睡分不足
    darwinia
    darwinia 2019/05/16
  • Ownership is theft? TockのTakeCellについて - 睡分不足

    tockというrust製の組み込み向けOSがあります. このtockの作成者らが2015年にOwnership is Theft: Experiences Building an Embedded OS in Rust (PLOS 2015)という論文を発表しました.そこでは著者がtockを開発する上で嵌ったownershipに関する問題と,それを解決するための言語の修正アプローチが述べられています.ただその後rustの開発者とのやりとりもあり,言語に修正を加えることなく当初実装したかったことが実装できたようです.The Case for Writing a Kernel in Rust (APSys'17)にそのことが簡単に書かれています. Ownershipと問題 ご存知の通りrustにはメモリ安全を保証するためにownershipという仕組みがあり,たとえシングルスレッドでも同一デー

    Ownership is theft? TockのTakeCellについて - 睡分不足
  • nomによるnumpyデータのパース - 睡分不足

    nom nomはrust製のパーサコンビネーターライブラリです. 個人的にはno_stdでの動作をサポートしてる点が嬉しいです. 今回勉強のためにnomでnumpyのファイル(のヘッダ)をパースしてみます. numpyのフォーマット 今回は以下のようにして作成したデータをパースしてみます. $ python -c "import numpy as np; a = np.arange(9).reshape(3,3); np.save('a.npy', a)"; $ hexdump -C a.npy 00000000 93 4e 55 4d 50 59 01 00 46 00 7b 27 64 65 73 63 |.NUMPY..F.{'desc| 00000010 72 27 3a 20 27 3c 69 38 27 2c 20 27 66 6f 72 74 |r': '<i8', 'for

    nomによるnumpyデータのパース - 睡分不足
  • rustをnostdで使う - 睡分不足

    nostdとは rustは他の多くの言語と同様,標準ライブラリ(std)が同包されており,通常はそれを使ってプログラミングをおこないます.しかしながら,stdの多くの機能はOSの機能を利用しているため,OSそのものを開発したいとか,あるいはOSが存在しない環境でプログラミングをしたい場合などではstdは利用できません. stdを利用しない場合は明示的にその旨を宣言する必要がり,そのために利用するのが#![no_std] attributeです. nostdの概要は(昔の)bookのno stdlibの章に書いてあります. なお,nostdに関わることはunstableな機能が多いので,ここに書いてあることが今後変更される可能性は十分あります core library stdが使えなくなるとかなりの機能が制限されてしまいますが,rustはcoreと呼ばれるrust onlyで書かれたライブラ

    rustをnostdで使う - 睡分不足
  • rustのGUIライブラリconrodの使い方 - 睡分不足

    所用でrustGUIライブラリについて調べる機会がありました.特にこれといったGUIライブラリはまだないような気がします. 普段自分がネイティブなGUIアプリケーションを作成する場合はQtを使います.rustからQtを呼び出すのはいくつか試みがあって,disassemblerのpanopticonはGUIとしてQtを使ってますし,rustからQtを呼び出すためのcpp_to_rustというプロジェクトもあります.ただどうもまだいろいろと開発中のようです. 今回はconrodというGUIライブラリを使ってみたので,簡単にそれの使い方について書こうと思います. conrod conrodは純rust製のGUIライブラリです.conrodが担当するのはウィジェッ ト(ボタンやテキストボックスなど)の構成の管理やウィジェットに対するイベントの伝播などです.pistonというゲームエンジンを開発し

    rustのGUIライブラリconrodの使い方 - 睡分不足
  • LinuxのBPF : (1) パケットフィルタ - 睡分不足

    はじめに BPFの基礎 BPFの構造 BPFでのフィルタリング レジスタマシン LinuxでのBPF BPFを利用したパケットフィルタリング libpcapとBPF ここまでのまとめ 参考文献 その他参考URL はじめに BPFはBerkeley Packet Filterの略で,1993年に効率的なパケットフィルタリング手法として提案されました[1] *1. BPFの構成要素は大きく2つあって,一つがネットワークからパケットをキャプチャする部分,そしてもう一つがキャプチャした パケットをフィルタリングする部分です.BPFといった場合,後者のフィルタリング機構だけを指すことも多いです. FreeBSDなどのBSD系のOSでは/dev/bpf*という特別なデバイスがあって,このBPFを利用することができます.また, Linuxでもパケットフィルタリング(Linux Sokcet Filter

    LinuxのBPF : (1) パケットフィルタ - 睡分不足
  • 1