page0020
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* かなりセキュアなポインタ
-(by [[K]], 2018.08.14)
** (0)
-Essenにはセキュアなポインタを実装しようと思っています。...
-このポインタの仕組みは OSECPU-VM rev.2 で実装したことが...
-[余談] OSECPU-VM rev.2 とは、セキュリティキャンプ2014の...
~
-ここの話題は、[[page0004]]の(5)の「ポインタ関係」に対応...
・ポインタ関係
・ポインタは内部でアクセス可能範囲を持っていて、そ...
・freeしてしまった領域にアクセスしたら教えてくれる。
・freeしたのにまたfreeしようとしたら教えてくれる。
・mallocするときに、どのスコープを抜けるときまでに...
-このうちの最初の3つを実現するためのアルゴリズムです。
** (1)
-Essenでは32bitアーキテクチャを採用していますが、ポインタ...
-すごい量ですよね。単純に代入するだけでも28バイトの転送が...
-Essenのポインタの中身
|フィールド名|ビット数|説明|h
|ptr|32bit|普通の生ポインタ|
|typ|32bit|型情報|
|p0|32bit|アクセス可能なポインタの下限|
|p1|32bit|アクセス可能なポインタの上限|
|blk|32bit|メモリブロック情報構造体へのポインタ(下記参照...
|sig|32bit|シグネチャのコピー|
|flg|32bit|フラグ(write権限があるかどうか、など)|
-メモリブロック情報構造体の中身(これはグローバル領域にあ...
|フィールド名|ビット数|説明|h
|typ|32bit|型情報|
|sig|32bit|シグネチャ|
|p0|32bit|メモリ領域の開始アドレス|
|p1|32bit|メモリ領域の終了アドレス|
|flg|32bit|フラグ(mallocで確保した領域かどうか、など)|
** (2)
-[1] mallocしたり、配列のアドレスをポインタ変数に代入した...
--ptr: 普通のポインタなのでこれは難しくないです。
--typ: intのポインタなのか、charのポインタなのか、double...
--p0,p1: mallocした場合は、領域の上限と下限がセットされま...
--blk: 配列にせよ、malloc時にせよ、とにかくメモリ領域を確...
--sig: メモリブロック情報構造体のsigの内容をコピーしてお...
--flg: writeアクセスを許すかどうかを反映させます。
-[2] ポインタ変数からポインタ変数に代入した場合、224ビッ...
-[3] ポインタ変数に整数を加算したり減算したりしたときは、...
-[4] つまり、プログラムはptr以外の部分の自由に書き換える...
-[5] ポインタを使ってメモリアクセスをするとき、以下のチェ...
--[5-1] writeアクセスの場合、flgを確認して、そもそも書き...
--[5-2] blkの値を使ってsigの値を読み取って、ポインタ変数...
--[5-3] p0,p1を使って、アクセス範囲が適切かどうかをチェッ...
--[5-4] typの情報がアクセスしたい型と一致しているかをチェ...
--これらをすべてクリアして、やっとアクセスができます。チ...
-[6] メモリをfreeするときには、以下のチェックをします。
--[6-1] 上記の[5-2]と同じ方法でsigを確認します。これをや...
--[6-2] メモリブロック情報構造体の中のflgをみて、そのメモ...
-[7] プログラムに謎のメモリリークがある場合、メモリブロッ...
** (3)
-[Q] なぜメモリアクセスするまでp0,p1のチェックをしないの...
-[A] 以下のようなプログラムは普通にあり得ると思うのだけど...
for (p = &a[0]; p < &a[10]; p++) {
....
}
-このプログラムでは、a[10]が実在しない要素で、だから p ==...
-[Q] [5-4]でtypのチェックをするのはなぜか?
-[A] このチェックすることで、データの内部表現の方法に依存...
-[Q] p0,p1はメモリブロック管理構造体の中にあるのだから、...
-[A] 確かにその通りです。でもそうしてしまうと、このポイン...
-[Q] ptr以外の値を見せないのはなぜか?
-[A] ptr以外の値は、システムがセキュリティ例外を検出する...
-[Q] freeしたときにsigを乱数で書き換えるのはなぜか?イン...
-[A] インクリメントの場合、malloc-freeを0xffffffff回繰り...
-まあインクリメントでも悪くはないかなとは思っていますが。
-[Q] sigを使ってポインタが生きているかどうかチェックする...
-[A] freeしたときに、その領域を指しているポインタを低負荷...
* こめんと欄
#comment
終了行:
* かなりセキュアなポインタ
-(by [[K]], 2018.08.14)
** (0)
-Essenにはセキュアなポインタを実装しようと思っています。...
-このポインタの仕組みは OSECPU-VM rev.2 で実装したことが...
-[余談] OSECPU-VM rev.2 とは、セキュリティキャンプ2014の...
~
-ここの話題は、[[page0004]]の(5)の「ポインタ関係」に対応...
・ポインタ関係
・ポインタは内部でアクセス可能範囲を持っていて、そ...
・freeしてしまった領域にアクセスしたら教えてくれる。
・freeしたのにまたfreeしようとしたら教えてくれる。
・mallocするときに、どのスコープを抜けるときまでに...
-このうちの最初の3つを実現するためのアルゴリズムです。
** (1)
-Essenでは32bitアーキテクチャを採用していますが、ポインタ...
-すごい量ですよね。単純に代入するだけでも28バイトの転送が...
-Essenのポインタの中身
|フィールド名|ビット数|説明|h
|ptr|32bit|普通の生ポインタ|
|typ|32bit|型情報|
|p0|32bit|アクセス可能なポインタの下限|
|p1|32bit|アクセス可能なポインタの上限|
|blk|32bit|メモリブロック情報構造体へのポインタ(下記参照...
|sig|32bit|シグネチャのコピー|
|flg|32bit|フラグ(write権限があるかどうか、など)|
-メモリブロック情報構造体の中身(これはグローバル領域にあ...
|フィールド名|ビット数|説明|h
|typ|32bit|型情報|
|sig|32bit|シグネチャ|
|p0|32bit|メモリ領域の開始アドレス|
|p1|32bit|メモリ領域の終了アドレス|
|flg|32bit|フラグ(mallocで確保した領域かどうか、など)|
** (2)
-[1] mallocしたり、配列のアドレスをポインタ変数に代入した...
--ptr: 普通のポインタなのでこれは難しくないです。
--typ: intのポインタなのか、charのポインタなのか、double...
--p0,p1: mallocした場合は、領域の上限と下限がセットされま...
--blk: 配列にせよ、malloc時にせよ、とにかくメモリ領域を確...
--sig: メモリブロック情報構造体のsigの内容をコピーしてお...
--flg: writeアクセスを許すかどうかを反映させます。
-[2] ポインタ変数からポインタ変数に代入した場合、224ビッ...
-[3] ポインタ変数に整数を加算したり減算したりしたときは、...
-[4] つまり、プログラムはptr以外の部分の自由に書き換える...
-[5] ポインタを使ってメモリアクセスをするとき、以下のチェ...
--[5-1] writeアクセスの場合、flgを確認して、そもそも書き...
--[5-2] blkの値を使ってsigの値を読み取って、ポインタ変数...
--[5-3] p0,p1を使って、アクセス範囲が適切かどうかをチェッ...
--[5-4] typの情報がアクセスしたい型と一致しているかをチェ...
--これらをすべてクリアして、やっとアクセスができます。チ...
-[6] メモリをfreeするときには、以下のチェックをします。
--[6-1] 上記の[5-2]と同じ方法でsigを確認します。これをや...
--[6-2] メモリブロック情報構造体の中のflgをみて、そのメモ...
-[7] プログラムに謎のメモリリークがある場合、メモリブロッ...
** (3)
-[Q] なぜメモリアクセスするまでp0,p1のチェックをしないの...
-[A] 以下のようなプログラムは普通にあり得ると思うのだけど...
for (p = &a[0]; p < &a[10]; p++) {
....
}
-このプログラムでは、a[10]が実在しない要素で、だから p ==...
-[Q] [5-4]でtypのチェックをするのはなぜか?
-[A] このチェックすることで、データの内部表現の方法に依存...
-[Q] p0,p1はメモリブロック管理構造体の中にあるのだから、...
-[A] 確かにその通りです。でもそうしてしまうと、このポイン...
-[Q] ptr以外の値を見せないのはなぜか?
-[A] ptr以外の値は、システムがセキュリティ例外を検出する...
-[Q] freeしたときにsigを乱数で書き換えるのはなぜか?イン...
-[A] インクリメントの場合、malloc-freeを0xffffffff回繰り...
-まあインクリメントでも悪くはないかなとは思っていますが。
-[Q] sigを使ってポインタが生きているかどうかチェックする...
-[A] freeしたときに、その領域を指しているポインタを低負荷...
* こめんと欄
#comment
ページ名: