@gomi_ningen's Website

コンピュータシステムとプロセスの概要

Linux のしくみを読んで、気になった点、ちょっと深い情報が欲しいなと思い調べた点、ポイントとしてまとめておきたいと思った点、実際に自分の手を動かしてやってみた実験結果などをメモ。

[amazon template=wishlist&asin=477419607X]

コンピュータシステムの概要

  • 種類が同じデバイスは、デバイスドライバを通して同じインターフェースで操作
  • CPU やメモリなどリソースはカーネルが管理している
    • プロセス管理システム
    • プロセススケジューラ
    • メモリ管理システム
    • デバイスドライバ
  • ストレージはデバイスドライバを通じて直接命令することができるが、通常はファイルシステムを介してアクセスする
    • ファイルシステム

CPU のモード遷移

  • CPU の動作モードにはユーザーモードとカーネルモードがある
  • プロセスは通常ユーザーモードで動作しているが、システムコールが発行されると、CPU に割り込みというイベントが発生し、これによりカーネルモードに遷移...
Read More

Cの基本的なコードとアセンブリコード

if 文

int abs(int i) { if (i > 0) { return i; } else { return -1 * i; } }

絶対値を返す簡単な関数について見てみる。まずは最適化なし(-O0

_abs: ## @abs push rbp mov rbp, rsp mov dword ptr [rbp - 8], edi ## 引数をdword ptr [rbp-8]領域へ格納 cmp dword ptr [rbp - 8], 0 ## 0と比較 jle LBB0_2 ## 0と同じかそれ以下だったら LBB0_2 ラベルへジャンプ ## BB#1: mov eax, dword ptr [rbp - 8] ## eax レジスタへdword ptr [rbp-8]領域の値をロード mov dword ptr [rbp - 4], ...
Read More

関数呼び出しとアセンブリコード

関数呼び出しとアセンブリコード

次のような簡単な関数について見ていく。return_twotwice 関数を呼び出している。

int twice(int i) { return i * 2; } int return_two() { return twice(1); }

こいつはどのようなアセンブリコードになるのだろうか。とりあえず clang -S -mllvm --x86-asm-syntax=intel call.c をしてみる。

.globl _twice .align 4, 0x90 _twice: ## @twice push rbp mov rbp, rsp mov dword ptr [rbp - 4], edi mov edi, dword ptr [rbp - 4] shl edi, 1 mov eax, edi pop rbp ret .globl _return_two .align 4, 0x...
Read More

グローバル変数とローカル変数とアセンブリコード

次のようなグローバル変数がどのように扱われるかを確認する

int a = 10; int add() { return a * 2; }

clang -S -mllvm --x86-asm-syntax=intel global.c で以下のようなコードが生成される。

.section __TEXT,__text,regular,pure_instructions .macosx_version_min 10, 11 .globl _add .align 4, 0x90 _add: ## @add .cfi_startproc ## BB#0: push rbp ## いつもの Ltmp0: .cfi_def_cfa_offset 16 Ltmp1: .cfi_offset rbp, -16 mov rbp, rsp ## いつもの Ltmp2: .cfi_def_cfa_register rbp mov eax, dword ptr [rip + _...
Read More

定数を返すだけの関数のアセンブリコード

いろいろあって、必要に迫られアセンブラの勉強を始めた。基本的に知識が全くないので非常に低レベルな自分用のまとめです。

定数を返すだけの関数

とりあえず定数を返すだけの関数を定義してみる。

int one() { return 1; }

clang -S -mllvm --x86-asm-syntax=intel const.c で生成されたファイルが以下のような具合。

.section __TEXT,__text,regular,pure_instructions .macosx_version_min 10, 11 .globl _one .align 4, 0x90 _one: ## @one .cfi_startproc ## BB#0: push rbp Ltmp0: .cfi_def_cfa_offset 16 Ltmp1: .cfi_offset rbp, -16 mov rbp, rsp Ltmp2: .cfi_def_cfa_regi...
Read More

Copyright © 53ningen.com