質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Q&A

解決済

3回答

11441閲覧

gccをダウングレードしたい

tukejonnyBot

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

0グッド

1クリップ

投稿2015/06/28 09:44

バッファオーバーフローを勉強したいのですが、現在私が使用しているgccのバージョン(4.8.2)だとスタック保護機能が働いてしまい、実験できません。
そこで、gccをダウングレードしようと考え、以下のような手順を踏みました。(使用ディストリはUbuntu 14.04LTSです。MacOSX上でVirtualBoxを用いて、仮想OSとして立ちあげています。)

Download GCC 3.2

wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-3.4.0/gcc-3.4.0.tar.bz2 tar xjf gcc-3.2.tar.bz2 cd gcc-3.2

Download GMP 5.1.3

wget https://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.bz2 tar xjf gmp-5.1.3.tar.bz2 mv gmp-5.1.3 gmp

Download MPFR 3.1.3

wget http://www.mpfr.org/mpfr-current/mpfr-3.1.3.tar.bz2 tar xjf mpfr-3.1.3.tar.bz2 mv mpfr-3.1.3 mpfr

Download MPC 1.0.1

wget http://ftp.gnu.org/gnu/mpc/mpc-1.0.1.tar.gz tar xzf mpc-1.0.1.tar.gz mv mpc-1.0.1 mpc

Configure & build

mkdir build cd build ../configure --prefix=/usr/local make make install

ですが、どうしてもmake installでこけてしまいます。

make[1]: *** `faster info'に必要なターゲット '../gcc/doc/include/gcc-common.texi'をmakeするルールがありません. 中止.

というエラーが原因のようです。

この問題の解決策、あるいはgccをダウングレードする代替手段を教えていただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Ubuntu 14.04LTSのgccはデフォルトでstack-protectorがenableになってるようです。
Security/Features - Ubuntu WikiのStack Protectorの行参照。

gcc -Q --help=common | grep stackで確認してみてください。私の環境ではdisableになっていました。

$ gcc --version gcc (GCC) 5.1.0 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ gcc -Q --help=common | grep stack -Wstack-protector [disabled] -Wstack-usage= 0xffffffff -fcombine-stack-adjustments [disabled] -fconserve-stack [disabled] -fsplit-stack [enabled] -fstack-check -fstack-check=[no|generic|specific] -fstack-limit -fstack-limit-register=<register> -fstack-limit-symbol=<name> -fstack-protector [disabled] -fstack-protector-all [disabled] -fstack-protector-explicit [disabled] -fstack-protector-strong [disabled] -fstack-reuse= all -fstack-usage [disabled]

-fno-stack-protectorオプションでdisableにできるかもしれません。オプションが反映されているかどうかはgcc -Q -fno-stack-protector --help=common | grep stackで確認することができます。

投稿2015/06/28 13:41

編集2015/06/28 14:09
sharow

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tukejonnyBot

2015/06/28 14:20 編集

ありがとうございます! なぜか、 ``` $ gcc -Q --help=common | grep stack ... -fstack-protector [disabled] -fstack-protector-all [disabled] -fstack-protector-explicit [disabled] -fstack-protector-strong [disabled] ... ``` となっていたのですが、gccに-fno-stack-protectorオプションを付けることで、バッファオーバーフロー攻撃が可能になりました!
sharow

2015/06/28 14:36

おめでとうございます。 ついでにあなたはUbuntuのgccパッチのバグを発見してしまったようですねw 表示上disableなのにenbaleになってるなんて・・・些細なバグではありますが。
tukejonnyBot

2015/06/29 00:42

ありがとうございます! やはりバグだったのですね…(^_^;) こんな意識せずに見つかるものなんですね 初心者故でしょうか笑
guest

0

gccのスタック保護は、-fstack-protectorオプションを付けないと有効になりません。
単純に、-fstack-protectorオプションを付けなければいいのでは?

投稿2015/06/28 11:55

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tukejonnyBot

2015/06/28 12:55

お恥ずかしながら、てっきりデフォルトでスタック保護されているものだと思っていました・・・ 最初の質問内容と異なってしまうようで申し訳ないのですが、おそらく私がスタック保護と勘違いしてしまったのは、以下のような結果が原因だと思われます。 ``` $gcc -o bof bof.c (bof.cは、サイズ5のchar型配列にstrcpyを用いて、コマンドライン引数をコピーするC言語のプログラム) $ ./bof AAAAAAAAAAAAAAAAAAAAAAAA *** stack smashing detected ***: ./bof terminated 中止. (コアダンプ) ``` このような結果は何故出てしまうのでしょうか?また、このような結果が出ないように(出力しないだけではなく、動作が起きないように)する解決策など、教えていただけないでしょうか?
tukejonnyBot

2015/06/28 14:23

cateyeさん、ありがとうございます! ここのサイト、バイナリ系の記事が詳しく書いてありますね! 今後、参考にさせていただきますm(_ _)m
guest

0

「バッファオーバーフローを勉強したい」~「スタック保護機能が働いて」というのは、スタックを壊すコードを書いてでデバッグしたいという事でしょうか?

投稿2015/06/28 11:06

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tukejonnyBot

2015/06/28 11:27 編集

はい、そうです。 自分で作成したC言語のプログラムをGCCでコンパイルし、それに対して、実際にバッファーオーバーフロー攻撃を行ったらどういうことが起きるのか(攻撃コードの実行、デバッグetc...)、ということについて実験したいと考えています。 実験対象は、自分で作ったプログラムに限ります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問