質問: 0x2d1528 "D:\\work\\debug_tst.exe" このように、バックトレースしてもほとんど何の情報もありません。 コンパイルオプションをできる限り削っていくと、-fstack-protector-all があるときだけ即死するようなのですが、バグの入るようなソースでもない上、そもそもmain()に入った途端にSegmentation faultというのが理解に苦しみます。 stack-protectorにバグがあるとは思えませんが、使用法の問題でしょうか? なお、この機能については、「Binary Hacks(オライリー・ジャパン)」の P168 HACK#46 -fstack-protector でスタックを保護する を参考にしています。 ### 補足情報(FW/ツールのバージョンなど) 開発環境 Win7 Home 32bit gcc version 8.2.0 (MinGW.org GCC-8.2.0-3) GNU gdb (GDB) 7.6.1 stack-protectorのバージョンは、次のように表示されています。 ![sspライブラリ](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/19ed6dc9cbe4898093b182c654b6476d.png) よろしくお願いいたします。
回答: Windows固有のヘッダファイル(tchar.h)や定義(_tprintf( _T("c=%d\n"), c );)を使っているのは? 当方Windows環境がないのでわからないのですが、上記2箇所をコメントアウトして printf( "c=%d\n", c );に書き換えコンパイル&実行した所正常に動作しました。 当方の環境↓ Linux Mint191 5.0.0-19-generic gcc-8 (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0 結果: ``` usr ~/Project/test % gcc -std=gnu99 -static -fstack-protector-all t2.c usr ~/Project/test % ./a.out c=4 usr ~/Project/test % echo $? 0 usr ~/Project/test % cat t2.c ``` ``` #include //#include int funct(int a, int b); int funct(int a, int b){ int c; // 無意味な処理です a = b; c = a + b; return c; } int main(int argc, char **argv){ //int _tmain(int argc, TCHAR **argv){ int a, b, c; if( argc>2 || argv==NULL ) return 1; a = 1; b = 2; c = funct( a, b); // _tprintf( _T("c=%d\n"), c ); printf( "c=%d\n", c ); return 0; } ``` usr ~/Project/test %