セキュリティ・キャンプ全国大会2019 DAY2

#やったこと

今日から3日間特別講義です。
今日はその1日目で、僕はOS開発ゼミに参加しました。
ベアメタル開発のテーマで、はじめに事前学習の進捗を確認し、その後各々開発を開始しました。

僕はベアメタルのRaspberry piでLチカできるところまで行っていたので、この日はUARTの実装からはじめました。

8:30から開発を開始しましたが、10:00までに,一文字’H’の出力ができるようになりました。

低レイヤー開発をあまりやったことはなかったですが、キャンプまでのLチカでマニュアルの読み方などを講師のtnさん作の資料で追体験しながら学んでいたので、マニュアルを読んで、適切なアドレスのメモリに入れて、、という作業を実装するだけで、あまりここまでには苦労しませんでした。

ここからが長かった。
'H' は出せるのですが、"Hello,World\n"を出そうとforループを仕組むと、

HeeeeellllloWrrlddHelloo
e   heellooo    word

HHHHHHHellooo
.
.
.

のように、確かに出そうとしている文字ではあるが明らかに正しく書けていない文字が出力されるようになりました。

はじめに疑ったのはFIFOの空き待ちの不具合でした。
FIFOがNot Fullであることを1 Byte毎に確認して送っていたはずでしたが、それのアドレスやビットシフトの数が違うことが考えられるなと思いました。 
しかし、それらは何度確認しても正しかったのです。
ただのfor loopをまさか間違えるはずもないですし、(実際Macで動かして確認しましたし)何だろうと思っていました。

午後になって、JTAGデバッガを接続しました。
が、ここで出力したkernel.elfに、gdbからdebug symbolが見つからないと怒られてしまいました。
-gはつけているはずで、何も検討がつきません。

その後、tnさんがうまくビルドできたソースをもらって手元でビルドしてみると、そこからはきちんとシンボルが出ています。

そこで、それらのファイルとdiffして確認していくことにしました。

僕はCMakeを使い慣れていないので、CMakeLists.txt のミスだと思っていましたが、tnさんのファイル群のそれを私のものに差し替えてもまともにビルドはできるまま。

これのせいではなさそうでした。
そんなこんなで講義終了の22:00を迎えました。

ここまで、4時間ほど、デバッガをつなぐためのデバッグに時間を食っていました。 最悪です。

部屋に戻って、続きをしました。
明日以降の講義の時間はもっと創造的なことに使いたかったので、何としてでもこれを夜のうちに潰したかったんです。

それでもなかなかうまくいかず、最後にダメ元で、リンカスクリプトを差し替えました。

「Symbol、出てるやん…」

意味わかんないです。
すぐにそれをdiffして、差異のあるところを一つづつ順番に直しながら、どこでsymbolが出るようになるか検証しました。
結果、以下のdiffのせいでした。

<    .stack : {
<        __stack_end = .;
<        /* 64MiB space */
<         __stack_start = __stack_end + (1024*1024) * 64;
<    }> RAM
---
>    .stack : {
>        __stack_end = .;
>        /* 64MiB space */
>         __stack_start = __stack_end + (1024 * 1024) * 64;
>    }> RAM

いや、スペース二個ですやん!? こいつのせいで4時間とはまじでありえない。
明日からはこういうしょーもないのにかからないことを祈ります。

その後、無事にデバッガを接続でき、「え? ちゃんとFIFO待ってるやん?」となって、試しにUSB-Serial変換アダプタを再び繋いでみたら、ちゃんとHello,Worldになってましたとさ。

あのバグもメモリレイアウトがおかしかったことに起因してたのかもしれません。
とほほ、、

#学んだこと、みたこと

私はこんなしょうもないバグに積んでいたわけですが、私の右側では、同テーマの方が、rustでの実装にチャレンジされていました。僕はむさ苦しいCコードで書いていたわけですが、同じものをあんなにも美しく実装されるとRustやりたさが出てきました。
僕もキャンプ後Rustをやろうと思いました。

それでは もう遅いので寝ます。 おやすみなさい。


セキュリティ・キャンプ全国大会2019 DAY1

#やったこと

12:00集合で、11:30くらいに到着しました。早すぎましたね笑

来年以降参加する方へ向けてなんですが、会場付近本当に何もないので、水とか買うなら北府中駅よりも前に買っておきましょう。

チェックインを済ませて、交通費分の領収書を提出すると、そこでパーカーとTシャツを受け取ります。

これがパーカーです。

で、これがシャツ。

ちなみにどちらも後ろはこうなってます。

その後、昼食を食べました。ラーメン。撮り忘れましたが美味しかったです。

その後講義会場に入るのですが、そこでSecCampなバッグと、それいっぱいの企業ノベルティをいただきました。

いや最高っしょ。
うまい棒とこのはの関係とかなぜサイボウズさんがラノベを入れてるのかは別にして。

そんなびっくりの中、はじめに受けたのは特別講義「転ばぬ先の法律入門」。

日本には約2000の法律があるが、全てを知らなくても倫理を身につけ学んでいれば一線を超えずに済む。 という話が印象に残りました。初めて、倫理の重要性を筋道立てて示してくれる人に出会いました。面白かったです。

そのあとの「セキュリティ基礎」では、講義タイトル的にもう少し開発者目線かなと思っていたらほとんどユーザー目線で、講師の方が前でパスワードの運用ついての思案を進めるような講義でした。

夕食前最後の講義、「ITの話ができる仲間を作ろう 〜IT業界とコミュニティ活動〜」では日本UNIXユーザー会の幹事のかたが、日本に置けるコミュニティ活動の大まかな歴史と、今後参加するにあたって気をつけるべきことについて講演してくださいました。

『アート・オブ・コミュニティ――「貢献したい気持ち」を繋げて成果を導くには』を参考書籍に挙げられていて、興味を持ったので一度読んでみようと思います。

その後 グループワーク を実施しました。
今年は、キャンプ後に繋げるための仲間づくりみたいなやつで、今日は自分がキャンプ後にしたいことをポストイットに書いて、名札に貼って、歩き回って近いことを書いている人を探してチームを作るっていうのをやりました。
僕らはアーキテクチャ,CPU,OSあたりを自前で作りたいみたいな、低レイヤ系の集まりを作ろうかみたいな話になっています。

明日から講義が始まります。楽しみです。
もう遅いので寝ます。明日からはいっぱいコード書くぞー!!!


セキュリティ・キャンプ2019全国大会に参加します

わたくし、明日から、セキュリティ・キャンプ全国大会に参加させていただきます。期間中、毎日更新できればと思っていますのでよろしくお願いします。

セキュリティ・キャンプ全国大会 is なに

セキュリティ・キャンプ全国大会は、IPAが主催する、情報セキュリティ技術を5日間の合宿形式で学ぶプログラムです。セキュリティ・キャンプ事業の中心として開催されていて、各コース/トラック/ゼミに分かれています。
毎年参加者の選考があり、選考課題はコース/トラック/ゼミによりまちまちです。

私は、集中開発コースのY【システムプログラミングトラック】のうち、Y-Ⅰ OS開発ゼミに応募しました。

これまでの活動頑張ったよってことと、簡単なCコードを書いて提出しました。というものの、応募締め切りがJapanOpen Wakayamaの直前(2019/4/27)でデスマの真っ最中だったので、あの辺りあまり記憶がありません。

※来年以降応募したいと思っている方で、私のクソなのでも見たいという方がいらしたらTwitterあたりにDM飛ばしてください。一応選考通った回答なので1ミリくらい参考になるかもです。 publicに晒しませんが個人対応は喜んでお受けします。

それでお前は何をするのか

先述のとおり、Y-Ⅰ OS開発ゼミに応募して通していただいたので、OSを作ります。

が、その中でも4つの「テーマ」に分かれています。

  • フルスクラッチOSを書こう!
  • 最先端OS談義
  • Linux開発者を目指そう!
  • Raspberry Piで動く組み込みOSを作ってみよう!

この中で、私は、"Raspberry Piで動く組み込みOSを作ってみよう!"テーマに応募しました。

個人的にESP32を扱っていた時期で組み込みOSが自分的にアツかったのと、最近は組み込みコードをよく書いているくせに少しレイヤが低くなるだけで何も知らないなんてクソだなと思ったので、少しましになれればという思いもありました。

というわけで、私はRasPiで動く組み込みOSを作ってきます。

これまでにやったこと

参加者専用に、Kintoneのグループ(っていうのが正しい呼び方なのか知りませんが)があります。

そこで、事前課題的なものが出されていて、書籍を読んでくることと、OS作成の基礎となる簡単な部分を理解するためのプログラムを組んでおくことがでました。

具体的には、「12ステップで作る組込みOS自作入門-」の後半を読んで、OSに必要なMI(Machine Independent,ハードウェア関係なく必要になる機能実装)部を学び、講師の西永さん作の資料でMD(Machine dependent)部を学ぶという構成で、最終的に今の段階でBareMetal(=OSなしの状態) でLチカするところまでできました。

お気持ち表明

全力で楽しんで来たいと思います。
普段は低レイヤに苦手意識がありますが、マジのエキスパートの方やつよつよ受講者(そういえばU-22で知り合ったこーでぃも通っていたようです。またコンパイラ。好きすぎかよ。最高です。)に囲まれることになるので、その人たちからスキルと同時にその道の「楽しみ方」みたいなものも感じられると、後につながる経験になるかと思います。

明日からもレポート予定ですのでよろしくお願いします。


RCJの大会持ち物リスト

お久しぶりです。
またまた久しぶりのBlog Postです。
なんかhexoがぶっ壊れて過去のpostがどっかいっちゃったんですよね()
というわけで以前のテーマから全部変えて、またブロ区を作り直しました。
このくだり何回やるんでしょうね。
そこまでしてtumblrから逃げる私です。

#RCJの大会、持ち物よくわからん問題

これ、ありませんか?
私も、初めての大会(2018年12月滋賀ノード)のときようわからんかったんですよ。

それからというもの、京滋奈ブロック、Japan Open,そして世界大会まで、大会の持ち物リストファイルを熟成させていたので、公開しようと思います。

#大会持ち物リスト

  • 名刺…これが一番か???
  • 靴…上靴が必要な会場のみ
  • バッテリ充電器
  • 充電器の箱…車検!!これ大事!!
  • 説明書…同上
  • バッテリ
  • 半田ごて
  • ドライバ
  • 圧着ペンチ
  • ワイヤストリッパ
  • ラジペン
  • ニッパ
  • テスタ
  • 黒マーカーぺん
  • 黒ビニテ
  • 練習ボール
  • ミニコート…ホテルとかで練習する用のカーペットなど
  • メディア同意書
  • パソコン
  • パソコンの電源アダプタ
  • 書き込み機類
    • STLink
    • USB-Serial変換アダプタ
  • Micro USBとかその辺のケーブル
  • 予備の材料
  • とみっくすとざるそば…LEGEND専用
  • ロボット