pdoc 0.1 documentation

C++

«  C   ::   Contents   ::   C#  »

C++

http://www.intel.com/jp/download/#ia32

gccに関するメモ

CentOS 6.0だと、デフォルトでカナリアが付かない?

-fno-stack-protector-allでも付ければいいんだろうか

16byteアライン

配列変数のスタック領域は16Byteアラインされる。

厳密にどのCPUアーキテクチャとコンパイラの組み合わせだと発生するのかは知らないんだ...

例えば、下記(セキュアコードじゃない?あぁ!)

char array[10];
memset(array, 0, sizeof(array))

のように宣言、初期化しても、スタック上では16バイト使われる可能性がある。(そして、XXはプログラム上からは不定と言える)

0000 | 00 00 00 00
0004 | 00 00 00 00
0008 | 00 00 XX XX
000c | XX XX XX XX

そもそもスタック領域全体の16Byteアラインについては、以下のオプションで実現されているが、これ自体は配列変数のスタックポインタの整列とは関係ない(ハズ)

gcc -mpreferred-stack-boundary=N

-fno-stack-protector

カナリアと呼ばれる4byte(i386)/8byte(x86_64)のデータを付与して、スタックオーバーフロープロテクションを実現する。

VC++における/GSオプションと同等だけど、詳細は違うようだね

Table Of Contents

Previous topic

C

Next topic

C#

This Page

«  C   ::   Contents   ::   C#  »