by shigemk2

当面は技術的なことしか書かない

Unix

8086のアセンブラいろいろ #ikebin

8086アセンブラについて 標準出力1でwriteの第一引数はaxに格納する「決まり」となっている で、その決まりを無視すると正しく結果が返ってこなかったり終了コード そのアセンブリをF#で Array.zeroCreate 0x10000 (1つ1つがバイト型で、要素数0x10000の配列…

アセンブリのシステムコールとか #ikebin

しゃーぷで数字を指定する int 7以下.dataでシステムコールの中身が記述する 本当はasmじゃなくて.sファイルですけども。 ! write(1, hello, 6); mov ax, #1 int 7 .data1 4 .data2 hello, 6 ! bx = hello; ! *(uint16_t *)(bx + 2) = 0x4548; mov bx, #hell…

8086で小さなバイナリのインタプリタ #ikebin

let aout = System.IO.File.ReadAllBytes "a.out" let read16 (a:byte[]) b = (int a.[b]) ||| ((int a.[b+1]) <<< 8) let tsize = read16 aout 2 let dsize = read16 aout 4 let mem = aout.[16 .. 16 + tsize + dsize - 1] let mutable ax, ip = 0, 0 whil…

小さなバイナリを使って分析 #ikebin

7shi / ikebin / wiki / 8086 / hello — Bitbucket 全然わからず自力ではできなかったのでコメントだけ書いてみる。 8086のアセンブリのソース write.s ! write(1, hello, 6); mov ax, #1 int 7 .data1 4 .data2 hello, 6 ! exit(0); mov ax, #0 int 7 .data…

8086周辺のメモ

8086 Intel 8086 - Wikipedia インテルが開発した16ビット マイクロプロセッサ(CPU)。x86(80x86)アーキテクチャの最初のマイクロプロセッサで、1978年に発表された。 x86 x86 - Wikipedia x86または80x86は、インテル8086、およびその後継(32ビットではIA-3…

sttyとか、接続のコントロールとか

カーネルは、プロセスとシステム外のものとの間でデータを転送する。システム外のものには、ディスクファイル、端末、周辺機器(プリンタ、テープドライブ、サウンドカード、マウスなど)が含まれる。ディスクファイルとの接続とデバイスとの接続には類似点と…

ファイルシステムについて

P188 Unixはディスクをファイルシステムという形に組織する。ファイルシステムは、ファイルとディレクトリのコレクションである。ディレクトリは、名前tポインタのリストである。ディレクトリの1つ1つのエントリは、ファイルかディレクトリを指している。デ…

pwdコマンド自作 その1

pwdでやっていること ディレクトリを読んで、ディレクトリツリーを上っていく。 毎回のディレクトリの処理では、"."のiノード番号を記録し、親ディレクトリの中でiノード番号に与えられている名前を参照する。 この処理をルートディレクトリに達するまで続け…

PDP-11仕様書あたりのメモ #ikebin

01ssdd mov 8進数にへんかんして、 0500 SSDD SS 05 DD 00 SS Source DD Destination 8進数で2桁 下の位はレジスタ 011402 mov (r4) r2 モード そのレジスタにたいしてどのような操作がなされているか r0 モード0 (r0) モード1 116520 11 movb 65 SS 20 DD m…

Homebrewでclocを入れてみた

概要 Cool, but obscure unix tools :: Software architect Kristof Kovacs いろいろなコマンドがあるんですね、っていう話なので、とりあえず Homebrewでclocを入れてみた。 導入 $ brew install cloc 使用例 左から、ファイル数、空白、コメント、ソースコ…

MacでUNIX V6を動かしてみよう

ヒソヤカにごにょごにょ。 導入 笛吹きプログラマ Mac OS X LionでUNIX V6を動かす http://simh.trailing-edge.com/software.html からunix v6のdisk imageを貰ってくる。 適当な場所に展開。 ここまではいい。 $ simh-pdp11 起動 このコマンドの所在も内容…

V6のPCリラティブモード

最早古文の領域であるが、 PC relative modeのことであろう。 このモードではPCを使ったインデックスモード6である。 オペランドのアドレスは命令語のワードをPCの更新された内容に加算することによって もとめられる。 PC + 4がこのオフセットと加算されて…

用語の復習

スラッシング 仮想メモリと物理メモリの内容の入れ替えが断続的に続き、 コンピュータが外部からの入出力を受け付けられない停止状態に陥ること。 スラッシングとは 【 thrashing 】 - 意味/解説/説明/定義 : IT用語辞典 シリンダグループ あるディスクスラ…

V6 itrunc #ikebin

itrunc ストレージ領域のブロック番号をフリーリストに戻す ファイルサイズ 0 inode.i_addrも0 ただしデータは上書きされるまでストレージ領域に残る コード itruncはあいとらんく、brelseはびーりりーすと読む itrunc() ken/iget.c 引数はipの配列 二重参照…

FreeBSDのはなし ファイルシステムのスナップショット #ikebin

P338 V6 直接 4KB 間接 896KB 二重間接 32MB FreeBSD 三重間接参照が出来るようになった(最大4TB) 拡張属性ブロック 10bとか小さすぎるファイルはそもそもストレージ領域にデータが入っていなくて拡張属性ブロックに直接データが存在する。 inodeの枯渇→動的…

ファイルシステムの話 その1 bmap #ikebin

悪魔合体 UNIX V6 40年前 → FreeBSD 10年前 だいたいつながってる ソースコードをひたすら読む P282 最近のOSがどういう風になっているのか V6本 P282 ファイルシステムってなに ディレクトリとかファイルとかの階層構造を表現するもの /a.txt /sub/b.txt HD…

引き算 #ikebin

概要 引き算により小文字から大文字へ変換。 メモリの中身を引き算を使うことで変更する。 逆アセンブラ let aout = System.IO.File.ReadAllBytes "write-7.out" let read16 (a:byte[]) b = (int a.[b]) ||| ((int a.[b+1]) <<< 8) let tsize = read16 aout …

メモリを直接指定 #ikebin

概要 レジスタ経由じゃなく直接指定でアクセスする。 作業としてはF#のコードに適切にデータを突っ込む。 リンク 7shi / ikebin / wiki / pdp11 / write-6 — Bitbucket ソース shigemk2/compiler · GitHub 逆アセンブラ let aout = System.IO.File.ReadAllBy…

バイト命令 #ikebin

7shi / ikebin / wiki / pdp11 / write-5 — Bitbucket レジスタを movb 命令のソースに使うと、下位の値だけが使われる。 swab 命令で上位と下位を入れ替えることができる。 アセンブリ / write(1, hello, 6); mov $1, r0 sys write hello 6 / r1 = hello; /…

数値をいったんレジスタに入れてからメモリに書き込む #ikebin

明日行こうと思って昨日予約しようとしたら中止になっていた…… 7shi / ikebin / wiki / pdp11 / write-4 — Bitbucket わりと先週の復習もかねてる。 アセンブリ 数値を直接メモリに書き込むのが前回だったけど、今回は変数に数値を入れてそれからメモリに書…

メモリを操作して出力する文字列を変更する

おさらい アセンブルとは、アセンブリ言語をバイナリに変換すること。逆アセンブルはバイナリをアセンブリ言語に変換することである。アセンブルしたものを逆アセンブルしても完全にもとに戻るとは限らない。 アセンブリ言語で書かれたソースコードではなく…

池袋バイナリ勉強会 アセンブリ言語でhelloを書く #ikebin

資料 7shi / ikebin / wiki / pdp11 / hello — Bitbucket sys hello worldですら長い / はコメント(Cで書いたことを想定している) writeっていう関数に引数をわたして実行するイメージ / write(1, hello, 6); mov $1, r0 sys write hello 6 / exit(0); mov $…

ファイル情報表示コマンド自作

statシステムコールを使ってファイル情報を得る。 /* fileinfo.c statを使ってファイルのプロパティを取得し、表示する * 一部のメンバーは、意味のわからない数値のまま */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> int main(int ac, char *av[] ) { struct stat inf</sys/stat.h></sys/types.h></stdio.h>…

lsコマンド自作

ディレクトリの読み込み。 ls1.c /* ls1.c * 目的 ディレクトリの内容をリストアップする * 動作 引数がない場合には . そうでなければ引数のディレクトリに含まれるファイルを出力する */ #include <stdio.h> #include <sys/types.h> #include <dirent.h> void do_ls(char []); main (int ac</dirent.h></sys/types.h></stdio.h>…

bashとかzshとかのコマンドの使い方をより知るために

lsとか ソースコードを読めばいい。 というか読みたい。 というわけでソースコードを探した。 見つけた。 [base] Index of /head/bin/ls ls.cを見ると、なんとなく挙動が分かるかもしれなくて面白い

UNIXドメインソケット

Linuxキーワード - UNIXドメインソケット とは:ITpro プロセスは、お互いのソケットをネットワーク経由で接続し、 そのソケットを通して通信する。これは、ネットワーク経由ではない、ローカルマシン上のプロセスでも同様。 ローカルマシン上のプロセスが利…

シバン(shebang)

スクリプトを実行するときにどのシェル(もしくは言語)を使うか - by shigemk2 シバン (Unix) - WikipediaUNIXのスクリプトの#!から始まる1行目のおまじないのこと。 #! /bin/sh echo 'Hello world!' #! /usr/bin/env ruby puts 'Hello world!'

シェルで整数値を扱う時は8進数に注意する

stack of tips 200611ゼロ(0)で始まる数値は、8進数扱いになる(bash、shなど)。 ただし8進数では'08'という値を表現できない。 echo $(( 88 )) echo $(( 017 )) echo $(( 01111 )) echo $(( 08 )) bash 88 15 585 qr_6920kMW.sh: line 4: 08: value too grea…

touch

UNIXコマンド - touchファイルが保持している最終アクセス日時と最終更新日時を変更できる。 指定したファイルが存在しないと、サイズが0の空ファイルを作成する。コマンド touch (option) [file name] オプション オプション 機能 -a 最終アクセス時刻を変…

sar

sarコマンド@unixsarコマンドではサーバの負荷状況を表示する。 負荷テストをする際にバックグラウンドで実行すると負荷状況を取得できます。 % sar 1 2 ・・・1秒おきに2回CPUの使用状況を表示する 20:07:40 %usr %sys %wio %idle 20:07:41 0 2 0 98 20:07:…