2022-01-01から1年間の記事一覧

shellcodeの実装と書式文字列攻撃

shellcodeの実装 shellcodeを実行できるようにするために、何らかの文字列を関数として実行する必要が在る。 文字列の配列を準備 文字列の配列を関数ポインタにキャストする その関数を実行する 関数ポインタ型 (void(*) ()) printf関数は第一引数に指定され…

プログラミング言語のメモリ管理について

最近勉強したプログラミング言語のメモリ管理について紹介する。 参考にした本*1 そもそもなぜメモリ管理が必要なのか 不要なメモリ領域を開放する。必要な時にメモリ領域を割り当てることをメモリ管理と呼ぶ 不要なメモリが開放されないと、例えばwebサーバ…

ページングについてわからなかった所とその現時点での理解

ページングテーブルについて理解が曖昧だった所の理解が進んだのでその記録*1 曖昧だった点 なぜ、ページングテーブルを多段に分けるのか? 多段に分けても、同じアドレス幅で扱えるページ量は変わらないのでは? 現時点での理解 多段に分けるのは、ページン…

OSレベルでのI/Oの制限方法

486でどのようにI/Oコントロールが行わているか。*1 486 ではIOPLビットでIOコントロールをするが、全部禁止、全部許可しかできない。 TSSの中にI/O許可マップというものを準備して、各ポートについての権限を管理する。 また、リアルモード用のアプリケーシ…

関数呼び出しがどうやって実装されているか

アセンブラでの関数呼び出しは以下のように実装されていることが多い。 呼び出す側の関数をA、呼び出される側の関数をBとする 例えば、 int sum(int a, int b){ return a+b } void main(){ sum(1,2) } ならmainがA, sumがBを指す 引数をスタックに積む Aに戻…

Speech and Laugnuage Processing -係り受け解析-

係り受け解析の章のまとめ 最近、係り受けのことを勉強する機会があって以下の教科書を読んだ。 スタンフォードが公開しているNLPの教科書。係り受け解析はその14章 web.stanford.edu この章のまとめ 係り受け解析では、一般的に文の構造を、用語(形態素?)…