gcc はバッファ オーバーフロー攻撃を防ぐためにメモリ割り当てをインテリジェントに行いますか?
int function(char *str) {
int a = 0; // See the
char b[16] = "abcd"; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
と
int function(char *str) {
char b[16] = "abcd"; // See the
int a = 0; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
gdb でデバッグすると、メモリは常に最初に整数変数に割り当てられ、次に文字配列に割り当てられます。変数宣言の順序は関係ありません。つまり、上記の両方のケースで、コンパイラはメモリを最初に に割り当てa
、次に に割り当てますb
。
(higher address)
Memory
| |
| |
+--------+
| |
| |
| |
| |
+--------+ <----- b (16 bytes)
| |
+--------+ <----- a (4 bytes)
| |
(lower address)
そのため、 に 16 文字を超える文字を指定しstr
ても、 の値には影響しませんa
。誰か助けてくれませんか?
ありがとうございました。