Low-level

入門WebAssemblyの読書メモ

読んだ。 本書では、WATという人が読み書きしやすいテキストフォーマットを通して、WebAssemblyを解説している。 実務でWATを直接書くのは想像できないので、教養的な位置付けになるかと思っていたが、結構よかったと思う。 ちなみに、8章で、衝突判定をwasm…

「Pythonでいかにして暗号を破るか」の読書メモ

一通り終えた。一週間くらいはかかったと思う。 少なくとも最初の数章結構平易なので、基本的な数学に抵抗がなければ、Python初心者でもある程度頑張れるかもしれない。 ある程度Pythonになじみがある人にとっては前半は物足りないかもしれない。 ただ、後半…

RustでL2からTCPプロトコルを自作する

マスタリングTCP/IPは何度か読んではいるけれど、レイヤーとかいわれても面白くないし、ネットワークあんまりわかってない気がしていたので、もうちょっと理解するために、L2レイヤであるEthernetからL4のTCPまでをRustでだいたい自作してみた。だいたいとい…

書評:詳解Rustプログラミング

年末年始にざっと読んだので一言残しておく。 www.shoeisha.co.jp システムプログラミングを題材にRustを説明してくれる本、という感じ。 ただ、システムプログラミングといっても表面的なところで終わっているので、そっちを期待するとちょっと期待外れかも…

JNIのはじめの一歩

たまに必要になるJNI。ノート替わりにメモしておく。 例えばこんな感じのSample.javaコードを用意して、ここからヘッダファイルを生成する。 public class Sample { public static native int readValue(); } javac Sample.java -h . javacのヘルプみればわ…

「12ステップで作る組み込みOS」を始めた。

メモ。 WSL2はUSBが認識できないので、VirtualBoxにUbuntu20.04をセットアップした。 セルフコンパイラのインストール。とりあえずバージョンとか意識せずにインストールしてみた。 apt install binutils make gcc curl クロスコンパイラのインストール。 bi…

低レイヤーのメモ

アセンブラ 定義EQU 0x0A ラインフィード(LF)、カーソルを一行下げる 0x0D キャリッジリターン(CR)、カーソルを左端に戻す 基数のPrefix 0b00 2進数 0o00 4進数 0d00 8進数 0x00 16進数 データ定義 DB: Define Byte, 1byte DW: Define Word, 2byte DD: Defin…

ESP32で不揮発なフラッシュメモリを利用する。

ESP32のフラッシュメモリにおいて、不揮発なデータ(電源オンオフやプログラムの再ロードでも消えない)を書き込む方法について調べるといくつか見つかるので、違いを整理しておく。 ESP32において、不揮発なデータを書き込める領域は2か所あるみたい。この…

「予算1万円でつくる二足歩行ロボット」をやってみた。

3月末くらいからはじめて、4月末には終えた。 途中2週間くらい基板待ちだったりしたので、実働は2週間くらいか。 短期間でCADからソフトまで一通り経験できるのは、とてもよかったと思う。 ただ、ところどころ超ハードだったので、人には勧めづらいなーと。 …

アセンブラとかレジスタとかのメモ

OS自作用のメモ。 エンディアン x86_64はリトルエンディアン 汎用レジスタ x86_64の汎用レジスタは次の16個 RAX RBX RCX RDX RBP RSI RDI RSP R8 R9 R10 R11 R12 R13 R14 R15 バイト数の異なる別名(p.71) 64bit 32bit 16bit 8bit RAX EAX AX AH, AL RBX EB…

自作Cコンパイラでセルフホストを達成した。

Rui先生の低レイヤを知りたい人のためのCコンパイラ作成入門を参考に作成していたCコンパイラ、Hello, Worldできたら結構満足して休憩していたけど、再開してなんとかセルフホストまでたどり着いた。 いつセルフホストできるようになるのかは全然わからなく…

アセンブラでHello, World!

書けるようになったので、記念に書いておく。 .intel_syntax noprefix .data .LC0: .string "Hello, World!\n" .text .global main main: push rbp mov rbp, rsp lea rdi, .LC0[rip] mov rax, 0 call printf@PLT mov rax, 0 mov rsp, rbp pop rbp ret

拡張するキャスト(Intel記法のアセンブラ)

よくわかってなくてだいぶはまったが、やっとわかったのでまとめておく。 x86_64のCPUを前提とする。 64bitレジスタでのキャストと32bitレジスタ 64bitレジスタで符号拡張するキャスト 符号拡張するキャストというのは、要はsigned型へのキャストすること。 …

アセンブラのグローバル変数の定義

アセンブラ、調べてもすぐ忘れるのでまとめる。 intelシンタックスで、 -pieか-no-pieかでだいぶ違うみたいだが、以下は最近主流の-pieを前提とする。 セッション アセンブリプログラムは、複数のセッションで構成される。 グローバル変数の配置を理解するに…

バッファオーバーフローの脆弱性

とても初歩的なんだろうけれど、バッファオーバフローの脆弱性というのを確認した。 以下のコードがあるとき、bufの範囲を超えた入力をうけつけると、その配列より前に宣言しているnの値を書き換えることができてしまう。 #include <stdio.h> #include <stdlib.h> int main() { </stdlib.h></stdio.h>…

最近読んだ本(CPU/OSなど)

積んでた本も崩しているので,メモがてらひとこと残しておく。とりあえずOS寄りの本を何冊か。 ふつうのLinuxプログラミング なんとなくシェルを自作してみたくなって引っ張り出してきた。シェルを作ってみるにはよい参考書。 Linuxの「ふつう」であって,や…

自作Shell

シェルを自作した。 github.com 以下の記事がきっかけ。 シェル入門 https://www.slideshare.net/yusukesangenya/ss-135407412 平日のアフター22を2〜3日くらい捧げたら以下の機能は実装できた。 Cコンパイラ作るよりは簡単だがこれはこれで学びが多い。 コ…

自作Cコンパイラ作成,Hello Worldまでで詰まったところ

Rui先生の低レイヤを知りたい人のためのCコンパイラ作成入門を参考に下記のようなHello Worldをコンパイルできるところまではたどり着いた。結構ハマったのでメモしておく。セルフホストできるとかはまだまだっぽい。 #include <stdio.h> int main() { printf("Hello,</stdio.h>…