質問: gcc 9.3.0でcファイルをコンパイルするときにssp(カナリア)をオプションで指定しているのですが、うまく反映されていません。以下のコマンドを入力しました。 gcc -fstack-protector main.c しかし、checksec a.outで確認しましても、No canary found となってしまいます。 どうしたらsspを有効にできるでしょうか? ・環境 OS:Parrot OS 64bit gcc: 9.3.0
回答: gccのsspオプションは、関数内にバッファが存在しないと有効にならないみたいです。私の場合は以下のようなソースコードだったためsspオプションがつきませんでした。 int main(int argc, char *argv[]) { int a = 1, b = 2; a = a + b; printf(a); } $>gcc -fstack-protector main.c $>checksec a.out $>No Canary sspを有効にするには、 int main(int argc, char *argv[]) { char buffer[16]; strcpy(buffer, argv[2]); printf(buffer); } $>gcc -fstack-protector $>checksec a.out $>Canary Found このコードであれば、関数内でバッファを宣言しているため、sspが有効になりました。 結果、gccがソースコードを解釈しsspの有無を判断していたということになります。回答してくださった方ありがとうございました。