お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2011-01-08 12:26:46

hirosandesu
メンバ
登録日: 2010-02-18

Ubuntu6.10でのgccにてstdio.hが見つかりません。

古いバージョンのUbuntuでCのプログラムをテストしたいと思いVmwareにてUbuntu6.10をインストールしました。
isoイメージは
http://old-releases.ubuntu.com/releases/
こちらよりダウンロードしました。

その後、Cのソースでstdio.hをインクルードしてgccでコンパイルしようとすると
error: stdio.h: No such file or directory
と表示されてコンパイル出来ません。

http://web.archiveorange.com/archive/v/F78LpLFCanh95mSvHRty
このあたりを参考に
sources.listに

deb http://old-releases.ubuntu.com/ubuntu/ intrepid main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ intrepid-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ intrepid-security main restricted universe multiverse

を追加して
build-essentialを入れようとしてもうまく入らず結果変わらず結果変わらずです。

Ubuntu6.10でCの環境を新たに作るのは難しいのでしょうか?

オフライン

 

#2 2011-01-08 21:09:19

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

hirosandesuさん による投稿:

Ubuntu6.10でCの環境を新たに作るのは難しいのでしょうか?

敢えてサポート期限が終了しているバージョンで、それも基本的に最新版の環境でも同等と思われるのに、
なぜ拘れるのか理解できません。
なにか特別な理由があるのですか?  こちらの疑問への回答に興味があります。

可能性としては、こちらから検索されるとでてくるかも。。。
http://packages.ubuntu.com/
Search the contents of packages
This search engine allows you to search the contents of Ubuntu distributions for any files (or just parts of file names) that are part of packages. You can also get a full list of files in a given package.
stdio.hを指定し、Ubuntu6.10環境をセットして検索してください。
普通は、~$ sudo apt-get install build-essential でOKなのですが。。。
ダイレクトに指定するなら、~$ sudo apt-get install libc6-dev です。

オフライン

 

#3 2011-01-08 21:32:44

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

追記
こちらにある通り、古いパッケージはLTS版しか保存されてない様です。

Browse through the lists of packages:
    * dapper (6.06LTS)
    * dapper-updates
    * dapper-backports
    * hardy (8.04LTS)
    * hardy-updates
    * hardy-backports
    * jaunty
    * jaunty-updates
    * jaunty-backports
    * karmic (9.10)
    * karmic-updates
    * karmic-backports
    * lucid (10.04LTS)
    * lucid-updates
    * lucid-backports
    * maverick (10.10)
    * maverick-updates
    * maverick-backports
    * natty
There is also a list of packages recently added to natty.
Old releases can be found at http://old-releases.ubuntu.com/.

だから、Ubuntu6.10では導入したくても存在しない可能性があります。後はご自分で探してください。

オフライン

 

#4 2011-01-09 00:25:22

STGSAGWAN
ゲスト

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

hirosandesuさん、

koisan1949さんの投稿と少し被る箇所がありますが、完全に書かれていないので、フォローする形で書きます。

今回の場合はまず、/etc/apt/sources.list を元の状態、つまり、 http://web.archiveorange.com/archive/v/F78LpLFCanh95mSvHRty を参考にして行追加する前に戻した上で、

コード:

sudo apt-get update
sudo apt-get install build-essential

でOKです。

少なくとも6.10では、build-essential は libc6-dev に依存しているので、同時に libc6-dev もインストールされます。
そして、stdio.hはlibc6-devで提供されます。

build-essential、 libc6-dev ともに mainリポジトリにあるので、old-releases にさえ向ければインストールは確実に出来ます。(実際に確認済。)

なお、/etc/apt/sources.listに追加した行は Edgy(6.10)用ではなくIntrepid(8.10)用なので、混ぜるのはNGです。
もし、行追加した後に、何らかのパッケージ追加・更新を行ってしまった場合は、面倒でも6.10を再インストールした方が早いと思います。

 

#5 2011-01-09 00:55:03

STGSAGWAN
ゲスト

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

hirosandesuさん、

hirosandesu による投稿:

古いバージョンのUbuntuでCのプログラムをテストしたいと思いVmwareにてUbuntu6.10をインストールしました。

の書き込みだけで、私は理解できます。
私も、古いバージョンでプログラムを動作させる機会がよくあるので、その動機は容易に想像できますよ。

 

#6 2011-01-09 01:35:57

hirosandesu
メンバ
登録日: 2010-02-18

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

koisan1949さん による投稿:

なにか特別な理由があるのですか?  こちらの疑問への回答に興味があります。

セキュリティの勉強をしようと思い、サンプルコードを実行して実際に動くことを確認したかったのです。
最新のUbuntuだとASLRやstack-protectorを外しても上手く動いてくれず、Ubuntu6.10なら動いたというブログを発見したため試してみたいのです。

STGSAGWANさん による投稿:

build-essential、 libc6-dev ともに mainリポジトリにあるので、old-releases にさえ向ければインストールは確実に出来ます。(実際に確認済。)

6.10を再インストールしてみたのですが、
sourses.listはデフォルトのままでよいのでしょうか?

コード:

sudo apt-get update

を実行するとほとんどのリポジトリへは接続出来ず

コード:

sudo apt-get install build-essential

でbuild-essentialが見つかりませんと出てしまいます。

オフライン

 

#7 2011-01-09 02:06:54

vbk
メンバ
From: Lake Hamana in Hamamatsu
登録日: 2009-12-22

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

サポートが終了しているということは、リポジトリの提供も終了しているということで、apt-getによるアップデートやソフトウェアのインストールは基本的にはできません。

オフライン

 

#8 2011-01-09 02:47:39

vbk
メンバ
From: Lake Hamana in Hamamatsu
登録日: 2009-12-22

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

追記:
古い版を提供しているリポジトリを設定すればインストールはできると思いますが、セキュリティー的に問題がありますし、本当に6.10でなければできないのかどうかを調べてみる必要はあると思います。
サンプルプログラムのことについてもう少し詳しい情報(出典等)を書くと、よりよいアドバイスをもらえるかもしれません。

オフライン

 

#9 2011-01-09 03:21:14

hirosandesu
メンバ
登録日: 2010-02-18

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

vbkさん による投稿:

古い版を提供しているリポジトリを設定すればインストールはできると思いますが、セキュリティー的に問題がありますし、本当に6.10でなければできないのかどうかを調べてみる必要はあると思います。
サンプルプログラムのことについてもう少し詳しい情報(出典等)を書くと、よりよいアドバイスをもらえるかもしれません。

セキュリティに問題があったほうが都合がいいのです。
出典としては
まずソースコードはHacking: 美しき策謀 ―脆弱性攻撃の理論と実際からの最初にある

コード:

#include <stdio.h>

int main(int argc, char *argv[]){
  char buffer[500];
  strcpy(buffer, argv[1]);
  return 0;
}

です。

Ubuntu6.10で動作確認しているという出典は
http://www.ada-u.net/?p=197
こちらを参考にさせていただきました。

オフライン

 

#10 2011-01-09 07:40:13

ry
メンバ
登録日: 2008-07-30

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

hirosandesu さんの投稿 (#6):

セキュリティの勉強をしようと思い、サンプルコードを実行して実際に動くことを確認したかったのです。
最新のUbuntuだとASLRやstack-protectorを外しても上手く動いてくれず、Ubuntu6.10なら動いたというブログを発見したため試してみたいのです。

#3koisan1949 さんが投稿されているように、6.10 のリポジトリは削除されており、インターネット上のどこを探してもまず見つからないでしょう (奇特な人が独自に保存、公開している可能性もゼロではないが、余程の偶然が無い限りは見つけられない)
つまり、ISO イメージで提供されているパッケージ以外の入手は諦めるしかありません

6.06LTS なら凍結されたリポジトリが残っているので、動くかどうかはわかりませんが、これを使ってサンプルコードの動作を確認するのが次善の解ではないでしょうか

オフライン

 

#11 2011-01-09 11:08:09

hmatsue
アドバイザ
登録日: 2009-03-10

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

Kubuntu 10.10で試したところ、

コード:

~/prog/clng/test $ cat test.c
#include <stdio.h>

int main(int argc, char *argv[]){
  char buffer[500];
  strcpy(buffer, argv[1]);
  return 0;
}

~/prog/clng/test $ gcc test.c 
test.c: In function ‘main’:
test.c:5: warning: incompatible implicit declaration of built-in function ‘strcpy’
~/prog/clng/test $ ls
a.out  test.c
~/prog/clng/test $ ./a.out 
セグメンテーション違反です
~/prog/clng/test $ ./a.out hoge
~/prog/clng/test $ ./a.out aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
*** stack smashing detected ***: /home/hiroo/prog/clng/test/a.out terminated
セグメンテーション違反です

のようになりましたが、これは期待と異なる動作でしょうか。期待通りでは無い場合は、
https://wiki.ubuntu.com/CompilerFlags
https://wiki.ubuntu.com/Security/Features
あたりを参照して微調整していただくと最新版のUbuntuでも実験できる内容かも知れません。

オフライン

 

#12 2011-01-09 19:33:34

hirosandesu
メンバ
登録日: 2010-02-18

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

hmatsueさん による投稿:

これは期待と異なる動作でしょうか。期待通りでは無い場合は、
https://wiki.ubuntu.com/CompilerFlags
https://wiki.ubuntu.com/Security/Features
あたりを参照して微調整していただくと最新版のUbuntuでも実験できる内容かも知れません。

私のUbuntu10.10環境でもセグメンテーション違反はするのですが、実際にやりたいことは次のようなことです。
提示しましたソースは脆弱性があるプログラムで、
別のCのプログラムからそのプログラムを起動させてバッファオーバーフローさせ、
スタックにNOPを並べ、その後に機械語のコードを並べて、その機械語のプログラムを実行したいのです。
このためスタックのアドレス空間のランダム化を停止して、スタックの実行可のオプションをgccに指定はしたのですが、
上手く起動しませんでした。
そこで実際に動いたというUbuntu6,10で実行してみたいのです。

オフライン

 

#13 2011-01-09 20:14:01

jackalope
メンバ
登録日: 2009-01-01

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

STGSAGWANさん による投稿:

今回の場合はまず、/etc/apt/sources.list を元の状態、つまり、 http://web.archiveorange.com/archive/v/ … h95mSvHRty を参考にして行追加する前に戻した上で、
sudo apt-get update
sudo apt-get install build-essential
でOKです。

sources.listを元の状態に戻せばパッケージ配布サーバー上にedgy用のディレクトリがないので、apt-get updateは失敗に終わる。
これは、hirosandesuさんが遭遇している問題です。
リンク先を参考にして作業したのはいいのですが、sources.listの理解不足でUbuntuのバージョン指定を間違ってしまったのが原因です。
sources.listを元に戻すのではなく、

コード:

deb http://old-releases.ubuntu.com/ubuntu/ edgy main

の1行だけに変更後、
sudo apt-get update
sudo apt-get install build-essential
で当初の目的は達成できる。
その他main以外のパッケージのインストールが必要であれば、restrictedなどを追加する。

ryさん による投稿:

#3 で koisan1949 さんが投稿されているように、6.10 のリポジトリは削除されており、インターネット上のどこを探してもまず見つからないでしょう (奇特な人が独自に保存、公開している可能性もゼロではないが、余程の偶然が無い限りは見つけられない)
つまり、ISO イメージで提供されているパッケージ以外の入手は諦めるしかありません

「#4でSTGSAGWANさんがbuild-essential、 libc6-dev ともに mainリポジトリにあるので、old-releases にさえ向ければインストールは確実に出来ます。(実際に確認済。)」と書かれているのですが、ryさんはこの内容を検証されたのでしょうか?

オフライン

 

#14 2011-01-09 20:54:20

hirosandesu
メンバ
登録日: 2010-02-18

Re: Ubuntu6.10でのgccにてstdio.hが見つかりません。

jackalopeさん による投稿:

コード:

deb http://old-releases.ubuntu.com/ubuntu/ edgy main

の1行だけに変更後、
sudo apt-get update
sudo apt-get install build-essential
で当初の目的は達成できる。

ありがとうございます。
この方法でCのプログラムをコンパイルすることができました。

オフライン

 

Board footer

Powered by FluxBB