12ステップで作る組込みOS入門:8thステップ
8章のコードの実行時にreadyque,*current,TCB(kz_thread),スタック(thread_stack)がどのように変化しているのかを追いました。
なお、図中のアドレスは固定ではないので、実行ごとに変わります。
12ステップで作る組込みOS入門:1stステップ
準備したもの
開発PC(ASUS X202E/Windows10 64bit)
開発環境の準備
シリアルポートの準備
クロス・コンパイラの準備
フラッシュROM書き込みツールの準備
- H8マイコンボードの付属CD-ROMに入っているh8writeをコピー
端末エミュレータの準備
Hello Worldのソースコードを書いてビルド
フラッシュROMへの書き込み
ディップスイッチをフラッシュROM書き込みモードに設定
H8/3069Fとシリアルポートを接続
電源ケーブルを接続(接続時点で電源ON)
make write
実行
2017年はアイナナ年!
アセンブラ短歌を詠んだので、解説を書きます。
68 31 37 21 0a 54 5f b2 21 b0 48 57 20 17 01 07 59 6a 04 5a 89 d0 6a 01 5b cd 80 58 31 c0 c3
push $0xa213731 push %esp pop %edi mov $0x21,%dl mov $0x48,%al push %edi and %dl,(%edi) add %eax,(%edi) pop %ecx push $0x4 pop %edx mov %edx,%eax push $0x1 pop %ebx int $0x80 pop %eax xor %eax,%eax ret
- アイナナ年なので、17という数字にこだわってみました
- 2017(年)01(月)07(日)という数字に対応するコードを入れました
- 20 17 : and %dl,(%edi)
- 01 07 : add %eax,(%edi)
- "17!"という文字列を、"20 17 : and %dl,(%edi)"、"01 07 : add %eax,(%edi)"を使って、"i7!"に更新しています
- pushとpopで韻を踏んで、アイドルっぽさを演出しました
- 二階堂大和さん推しです
以上です。
年始のご挨拶のアセンブラ短歌
アセンブラ短歌を詠んだので、解説を書きます。
53 6a 02 0f 31 68 30 0a 31 0a 89 e1 83 e0 02 01 c1 5b 5b 6a 02 5a 6a 04 58 cd 80 31 c0 5b c3
push %ebx push $2 rdtsc push $('0'|'\n'<<8|'1'<<16|'\n'<<24) mov %esp,%ecx and $2,%eax add %eax,%ecx pop %ebx pop %ebx push $2 pop %edx push $4 pop %eax int $0x80 xor %eax,%eax pop %ebx ret
- タイムスタンプカウンタの1bit目を使って、0or1が(体感では)ランダムに出力されるおみくじ仕様
- 0bit目ではなく1bit目を使うことで、条件分岐でアドレスを2ずらすのをandとaddで書けるようにした
以上です。
季節のアセンブラ短歌(クリスマス)
アセンブラ短歌を詠んだので、解説を書きます。
68 45 76 65 21 68 58 6d 61 73 89 e1 6a 01 6a 02 5b 6a 02 6a 04 58 5a 5b c1 e2 02 cd 80 01 d4 c3
push $('E'|'v'<<8|'e'<<16|'!'<<24) push $('X'|'m'<<8|'a'<<16|'s'<<24) mov %esp,%ecx push $1 push $2 pop %ebx push $2 push $4 pop %eax pop %edx pop %ebx shl $2,%edx int $0x80 add %edx,%esp ret
- 文字以外の即値には1224だけを使った
- pop %ebxで韻をふみ、クリスマスのpopな雰囲気を演出した
- 1字余りで翌日のクリスマスを意識した
以上です。
PDP-11のインタプリタを作った話をする
何のエントリ?
池袋バイナリ勉強会でPDP-11のバイナリをインタプリタ実行するプログラム(以下、インタプリタ)を作った記録です。
間違いや思い込み、より良いやり方があったらご指摘いただけると助かります。
作ったものはkanorimon/pdp11 · GitHubにあります。
誰?
一応動くプログラムが作れる程度の文系SE。
勉強会に参加した発端
パタヘネ読み始めてMIPSで詰み、偶然見つけた池袋バイナリ勉強会へ。
どんな感じでバイナリハックしてたか
- 勉強会(だいたい隔週日曜午後)
- カリキュラムに合わせた課題をもらう
- 課題や周辺知識を説明してもらう
- わからない部分を質問しながら課題をもくもく
- 自宅
- わからない部分をメモしながら課題をもくもく
- 参考書
バイナリハックのカリキュラム
詳しくは池袋バイナリ勉強会wiki(7shi / ikebin / wiki / Home — Bitbucket)を参照。
次からカリキュラムに沿ってやったことと、わかったことを書いていく。
Brainf*ckのインタプリタ作成
Brainf*ckの以下のコードを読み込んで、標準出力に"HellowWorld"を出力するプログラムを作成した。
++++++++[>+++++++++<-]>. <+++++[>++++++<-]>-. <++[>+++<-]>+. . +++. <++++++[>----<-]>. <++++++[>++++<-]>. +++. ------. --------.
PDP-11の逆アセンブラ作成
以下のアセンブリをコンパイルしたPDP-11のバイナリ(a.out)を読み込んで、標準出力に逆アセンブル結果を出力するプログラムを作成した。(単純な逆アセンブラ)
mov $1, r0 sys write hello 6 mov $0, r0 sys exit .data hello: <hello\n>
以下のアセンブリをコンパイルしたPDP-11のバイナリ(a.out)を読み込んで、標準出力に逆アセンブル結果を出力するプログラムを作成した。(アドレス指定方式の取り込み)
mov $1, r0 sys write hello 6 mov $hello, r0 mov $62510, r1 mov r1, (r0) mov $1, r0 sys write hello 6 mov $0, r0 sys exit .data hello: <hello\n>
PDP-11のインタプリタ作成
以下のアセンブリをコンパイルしたPDP-11のバイナリ(a.out)を読み込んで、標準出力に"hello"を出力するプログラムを作成した。(単純なインタプリタ)
mov $1, r0 sys write hello 6 mov $0, r0 sys exit .data hello: <hello\n>
以下のアセンブリをコンパイルしたPDP-11のバイナリ(a.out)を読み込んで、標準出力に"Hello"を出力するプログラムを作成した。(アドレス指定方式の取り込み)
mov $1, r0 sys write hello 6 mov $hello, r0 mov $62510, r1 mov r1, (r0) mov $1, r0 sys write hello 6 mov $0, r0 sys exit .data hello: <hello\n>
以下のソースをコンパイルしたPDP-11のバイナリ(a.out)を読み込んで、結果を標準出力に出力するプログラムを作成した。(各種命令の実装、システムコールの実装)
main(){ write(1, "hello\n", 6); }
main(){
putchar('a');
}
main(){ printf("hello\n"); }
main(){ int a; a = 1234; printf("a=%d\n", a); }
以下のソースをコンパイルしたPDP-11のバイナリ(a.out)を読み込んで、結果を標準出力に出力するプログラムを作成した。(コマンドライン引数の実装)
main(argc, argv){ char **argv; { int i; for(i = 0; i < argc; i++){ printf("argv[%d]=%s\n", i, argv[i]); }
以下のソースをコンパイルしたPDP-11のバイナリ(a.out)を読み込んで、結果を標準出力に出力するプログラムを作成した。(関数呼び出しの実装)
main(){ printo(012345); } printo(v){ int i; putchar(v < 0 ? '1' : '0'); for(i = 0; i < 5; i++){ putchar(((v >> 12) & 7) + '0'); } }
PDP-11のバイナリ(nm)を読み込んで、標準出力にオブジェクトファイルのシンボルリストを出力するプログラムを作成した。(各種命令の実装、システムコールの実装)
# nm a.out
PDP-11のバイナリ(cc)を読み込んで、Cのソースをコンパイルするプログラムを作成した。(更に命令の種類とシステムコールが増える)
# cc test.c
総括
- できるようになったこと
- まだできないこと
- 感じたこと
- 自作インタプリタのバグを見つけるのは正直しんどかった。まさに苦行。
- なんとか完成できたのは、@7shiさんをはじめ、要所要所でアドバイスいただいた池袋バイナリ勉強会の方々のおかげです。ありがとうございます。
JAWS-UG千葉團に行ってきたのです!
誰?
- いわゆるSEです。github:https://github.com/kanorimon
- 最近はトラック泊地にいます。#艦これ
- AWSとの関わり
JAWS-UG千葉團
- JAWS-UGのwebサイトに千葉支部が増えていたので参加してみました。
第一回勉強会メモ
「コスト削減? 拡張性? セキュリティ? 試験にでるかもしれないAWSの話」 @horiuchiさん
- AWS認定プログラムの紹介
- 試験対策にはAWSホワイトペーパーがおすすめ
- http://aws.amazon.com/jp/whitepapers/
- 障害復旧を目的とした Amazon Web Services の使用
- Amazon Web Services:リスクとコンプライアンス
- セキュリティプロセスの概要
- AWSクラウドのストレージオプション
- クラウドコンピューティングのアーキテクチャ:ベストプラクティス
- AWSを用いた耐障害性の高いアプリケーションの構築*1
- AWSが取得した第三者認証も見ておくといいかも
「ここ半年で23支部回ってきて気づいた話、話題の中心」 @yoshidashingoさん
- cloudpackさんは月額固定料金を日本円の請求書で請求してくれる!
- AWSカルタ
- ChefはOpsWorks
- GitはElastic Beanstalk
「JAWS-UGの歴史と最近の私」 @DynaKouさん
- 「何をしたいか」という目的が重要であって、それを抜きに技術を語るのは良くない。
- ヘルプマンにインタビュー掲載
-
- 作者: くさか里樹
- 出版社/メーカー: 講談社
- 発売日: 2013/09/20
- メディア: コミック
- この商品を含むブログを見る
「いつ参加するか?いまでしょ!」 @HOKARI_Yutakaさん
- y=f(x)
- x=顧客の要求
- f()=自分のスキル
- y=提供できるもの
「みんな大好き "全文検索 on AWS" を試してみました」 @maroon1stさん
- mroonga
「保守運用担当からみたAWS」 @czkukさん
- 保守運用も考えたシステム構築を!
- OSのEOSL、ミドルウェアのバージョンアップに備えた方針の作成
- 導入ソフトウェア(バージョン)のバイナリ・ソースを保存
- フレームワークの仕様等、構築当時の情報を保存
- ドキュメントの最新化
- ドキュメント、ソースの構成管理
「RDS!スケールアップ前のアプリチューニング(ざっくり版)」 @masaru_birdさん
- slowlogはダメ、ゼッタイ!
- slowlogを出したままではスケールは難しい
- 上長には、クラウドだからと言ってDBは簡単にスケールできないことを強調する
紹介があったイベントのメモ
- 2013/09/07 JAWS-UGさいたま支部第2回勉強会 http://jaws-ug.jp/es/jaws-ug-saitama-02/
- 2013/09/12 CloudShowJapan 2013 http://www.cloudshow.jp/
- 2013/09/13 AWS Cloud Storage Day http://csd.awseventsjapan.com/
- 2013/09/28 JAWS FESTA Kansai 2013 http://jfk2013.jaws-ug.jp/
- 2013/11/12-15 AWS re:Invent 2013 https://reinvent.awsevents.com/
感想
- AWSホワイトペーパーはじめて読みました。参考になります。面白いです。
- AWSカルタ楽しかったです!Redshift札は全力で取りに行きました。
- エンジニアとして、技術は課題解決のツールである、ということを忘れずにいたいです。
- 鍵ファイルが見つからない、どの鍵で設定したかわからなくなるはあるある。昨日もそれで1インスタンスターミネートしました。
- 第二回も楽しみにしてます!懇親会まで行けるように調整する所存です。
*1:AWSサイトでは障害復旧を目的とした Amazon Web Services の使用というタイトルになっている模様です……