2019-2020-1 20199314 <Linuxカーネルの原理と分析>仕事の第2週

1.基本的な学習コンテンツ

1.1ノイマン型

コンピュータコントローラは5つの部分、演算装置、メモリ、入力装置、出力装置から成ります。

1.1.1特性ノイマン型コンピュータ
(1)記憶されたプログラムモード、無差別な混合の命令と同一のメモリに格納されたデータを使用して。
(2)リニアアドレッシングによってアクセスされる一次元構造のメモリアドレスであり、セル当たりのビットの数が固定されています。
(3)命令オペコードとアドレス。オペレーションコードは、本命令の動作の種類を示し、オペランド・アドレス・コードは、アドレスを示します。それ自体は、そのデータ型は、オペレーションコードによって決定される、いかなるオペランドデータタイプフラグを有していません。
(4)命令を実行することによってコンピュータに直接動作制御信号を発行します。メモリに格納された命令、存在を実行すべき命令の命令アドレスによって指定されたカウンタ手段の実行の順序。
(5)センタオペレータに、I / Oデバイス間のデータ転送は、メモリ及び計算を経ます。
(6)バイナリデータで表されます。

に例えば32ビットシステム、 - コンパイル1.2を登録します

1.2.1分類レジスタ

4つのデータ・レジスタ(EAX、EBX、ECX、およびEDX)
2変種アドレスおよびポインタレジスタ(ESIおよびEDI)
2ポインタレジスタ(ESPとEBP)
。6つのセグメント・レジスタ(ES、CS、SS、DS 、FS 、及びGS )
命令ポインタレジスタ(EIP)
フラグレジスタ(EFLAGS)

1.2.2一般的な詳細と命令ポインタ・レジスタ

CPUは、4つの32ビット汎用レジスタEAX、EBX、ECX、EDXとを有しています。下位16ビットのデータへのアクセスは、16ビットの高いデータには影響しません。名前のこれらの下位16ビットのレジスタ:AX、BX、CX、およびDX。
次に4 16ビット・レジスタは、8つの別々の8ビット・レジスタ(:AH-AL、BX AXに分ける :BH-BL、CX:CH-CL、DX:DH-DL)、 各レジスタは、独自の名前を持ちます、独立してアクセス。以下に。

1.3コンピュータは、命令を実行します

PC(プログラムカウンタ、システム32はEIP)フェッチ - >命令デコード - >オペランドフェッチ - >命令実行 - >バック結果を書き込む - > PCの値を変更する - >続行次の命令。図に示すように。

1.4アドレッシング

  • 即値アドレッシングモード(即値アドレッシング)
    に直接命令に含まれるオペランド、オペレーションコードがアドレッシングモード即時呼び出された直後アドレッシングモードでは、オペランドは、即値と呼ばれます。
  • アドレッシング登録

  • アドレッシング即時

  • ダイレクトアドレッシング

  • 間接アドレッシング

  • アドレス指定のインデックス付き

2.アセンブリ言語学習

2.1アセンブラ言語の基本的な考え方

  • アセンブラ命令:マシンコードニーモニック、対応するマシンコード
  • 指令:なし対応するマシンコード、コンパイラによって実行され、コンピュータが実行されません。
  • その他の記号:例えば:+、 - 、*、/、等、コンパイラによって識別あり、該当するマシンコード
  • アセンブリ言語の機能:
    ①フットプリント、実行速度と類似した機械語
    に完全にコンピュータのハードウェア機能を制御することができ、②直接、簡単な

    2.2スタック

    2.2.1基本的な概念は、スタック
    順序に積層されているデータ項目のデータ構造を、一端のみを挿入してデータ項目を削除する(スタック(トップ)の上面と呼びます)。図に示すように。

2.2.2スタックが上下増殖成長
256の想定スタックサイズは、32ビットの汎用システムスタックは、方向下向きに成長します。

  • 成長ダウン、成長は、上位アドレスから下位アドレスです。スタックは&Taskstk [255]です。
  • 上位アドレスに下から成長する、育ちます。スタック&Taskstk [0]です。

2.2.3スタックの基本的な操作とそれに対応するアセンブリ言語

  • プッシュ命令PUSH

  • ポップ命令POP

  • CALL呼び出し元のプロセス

  • RETの復帰処理

  • クリアプロセスLEAVE

2.3課題

vimのエディタを使用して実験棟の環境では、簡単なCプログラムを書き、およびアセンブリ言語のコンテンツとフォーマット変換C言語を探ります。アセンブラ言語ファイル32にC言語では、関数呼び出しのカーネルコード、スタックの変更。

2.3.1ステップ
C言語プログラムで記述されました

  • gccのコンパイルされたコード

  • アセンブリ言語に変換

  • 補助情報を削除します

2.3.2コード分析
コールフロー主な機能

コールスタックアセンブリ言語の変更プロセス

  • 初期段階、ESP、EBPポインタ1000の位置を指している(1000のスタック・サイズを仮定)

  • 主な機能を実行します

  • 実行

  • 実行は、関数fを実行するためにジャンプ

  • 実行

- 実行は、関数gにジャンプ

  • 実行

  • 実行

  • 実行

  • 実行


  • 実行

  • 実行

  • 実行

上記のプロセスに関数を呼び出すコードの簡単な部分を示しています。
占有からスタック全体を表示- > [リリースプロセス。

概要

Linuxのに関して今週の研究では、先進的な基盤先週で、Linuxカーネルを理解し始め、32と16を学び、64ビットシステムとの違いは、分類・レジスタだけでなく、レジスタの有用性を学びました。勉強いくつかの低レベルの呼び出しは、任意のC言語は、単純な追加プログラムは、高レベルの言語、アセンブリ言語で書かれた後、高レベルの言語の構文は単純ですが、見つけることができる基本的な呼び出し、と解釈されて学習する前に、最下層にアセンブリ言語に変換されます\強力な可視性が、それはハードウェアを直接識別することはできませんので、スピード\信頼性はアセンブリ言語としてではなく、今後の動向が少なく、時間を学ん\、より多くの知識を来て、成長している言語パッケージである\今後の動向を行うと、この動作がますます受け入れられている車を組み立てるために人工的な部分の前に良い使用、人気のPython言語は一致していないのですか?

おすすめ

転載: www.cnblogs.com/morvalhe/p/11567506.html