• ベストアンサー

このようなプログラム言語はありますか?

簡単に言うと、 「自分自身のプログラムを実行して、自分自身のプログラム自体を書き換えてしまう」 このようなプログラムを作成できるプログラム言語ってあるのでしょうか? 無いとしたら、なぜ無いのか推測でいいので答えてください。 わかりにくい説明ですみません。m(__)m

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.11

コンパイルを必要とする言語で考えると, コンパイルしないとダメなので大変なのです。 最初からコンパイルしないプログラムだと,簡単にできますよ。 ---kakikae.vbs------------------------------ Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.CreateTextFile("A:\kakikae.vbs",True) f.Write "msgbox " & Chr(34) & "私はすでに死んでいます。" & Chr(34) ------------------------------------------ たったこれだけ。 上の点線内の4行をメモ帳などテキストエディタにコピペして, フロッピーディスクに,「kakikae.vbs」というファイル名で保存し, そのVBSを「ダブルクリック」して開いてみてください。 「kakikae.vbs」自体が「kakikae.vbs」によって書き替わります。 書き替わることによって,元のプログラムは死にます。 (死んだヤツが「死んだ」と言うのだろうか?) フロッピーディスクがAドライブでない場合は, 3行目の A:\ を B:\ などに書き替えてください。 また,ドライブは,Aドライブである必要はありません。任意のフォルダでも動作します。 勝手に,HD内でプログラムを動作させるのは悪いかなと思ったのと, フォルダ構造はPCによって違うので無難なAドライブにしただけです。 JavaScriptをされているということですが, 工夫すればJavaScriptでも同様なことはできると思います。 サーバー上にあるHTMLに貼り付いたJavaScriptや .jsファイル では大したことはできません。 ローカルに保存した .jsファイル やJavaScriptを組み込んだHTAファイルだとかなり強烈なことができます。 JSはVBSに比べて,若干制約が多いのと,動作が不安定になります。 上記のものを改良すると,自己増殖も可能ですし,ウイルスも作れます。 今回は自分自身をターゲットにしていますが,自分自身以外のファイルを削除したり,別の場所にコピーすることもできます。 また他のファイルも生成可能で,レジストリの書き替えなどもバキバキにこなすことができます。 つまりPC内をぐちゃぐちゃにしてしまうのは簡単。 また,「kakikae.vbs」 みたいなVBSを自動作動させるVBSを作れば,「kakikae.vbs」 をダブルクリックする必要さえなくなります。 つまり,いわゆる時限爆弾的な物もできます。 改良すると危険な物にもなります,扱いには注意してください。 また,くれぐれも犯罪行為には使用しないでください。

rouden
質問者

お礼

VBScriptですか! 大変参考になりました。 ウイルスを作成する気はまったくないので、誤解しないでください。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (14)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.4

ANo.2 の方もおっしゃってますが、インタプリタでもできますね。 たとえばperlとかで、 eval 文字列変数 で文字列変数を変更しておけば。 これを、ご質問が意図する書き換えと呼ぶならですが。

rouden
質問者

お礼

「perl」は専門外なのでちょっと戸惑っています。 何はともあれ、 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.3

完全にご希望に沿わないですが、自己増殖型プログラムとして「FORTH」 があります。 かのスターウォーズEP4(初回)のコンピュータ画面の一部分はFORTHでプログラムされたとか。 別に人工知能のために「LISP」があります。 「FORTHが共にあらんことを」 http://kaiunix.cs.shinshu-u.ac.jp/Lesson/ProgLangT/2005/VariousLanguage.html http://ja.wikipedia.org/wiki/Forth http://ja.wikipedia.org/wiki/Lisp http://www.google.co.jp/search?hl=ja&c2coff=1&rls=GGLD%2CGGLD%3A2004-41%2CGGLD%3Aja&q=%E8%87%AA%E5%B7%B1%E5%A2%97%E6%AE%96%E5%9E%8B%E8%A8%80%E8%AA%9E&lr=

rouden
質問者

お礼

自己増殖型ですか! 少し興味がある範囲です。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • gatyan
  • ベストアンサー率41% (160/385)
回答No.2

アセンブラはできますよね。 インタプリタ系言語は、似たようなことが…できるはず javaも関数の動的な定義ができたと思います 完全にバイナリにコンパイルする言語は、インラインアセンブラを駆使すれば可能かも その言語自身でコーディングされたスタイルではちょっと無理かも…コンパイルされたプログラムにコンパイラ自身が組み込まれていないと実行可能なコードを生成できません

rouden
質問者

お礼

>コンパイルされたプログラムにコンパイラ自身が組み込まれていないと実行可能なコードを生成できません やはり、コンパイラが付いてないと実行形式ファイルは無理ですか・・・。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • JUN-2
  • ベストアンサー率26% (360/1349)
回答No.1

アセンブラ言語(機械語)を使えば、自分自身のコードを書き換えることが可能ですね。 プログラムコードのあるアドレスが判れば、目的のアドレスのコードを書き換え、書き換えた場所にジャンプすれば、その書き換えたコードを実行することができます。

rouden
質問者

お礼

アセンブラ言語ですか・・・。 いきなり難しい言語が出てきて驚きました。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • BASIC言語のプログラムについて

    もし条件が成立したら、行番号の○○から○○までを実行するというようなプログラム、 つまり、GOTOのように指定した行番号に飛んでしまうだけで元の行に戻らないのではなく、指定した行番号からある程度の行までを実行したら、その命令をした次の行から実行するようなプログラムはどのように作れば良いのでしょうか。 一応、調べてはみたのですが、自分でも何と言えば良いのかあまりわからないということもあり、見つかりませんでした。 BASIC言語初心者ということもあり、わかりにくい説明かもしれませんが、お願いします。

  • Javaのプログラムから、C言語のプログラムを呼び出す方法

    こんばんわ。 もうすぐ2008年もおしまいですね。 本日お聞きしたいのは、タイトルの通り、 Javaで書いたプログラムで、C言語のプログラムを呼び出し、 実行するプログラムはどのように書いたらよいかということです。 実際に行いたい内容は以下の通りです。 ・JavaからC言語で書かれたNN.exeを呼び出し、実行する。 です。 どのようなプログラムで呼び出すことができるのでしょうか。 あまりプログラムの知識がなく、説明に不備がありましたらすいません。 お力添え、宜しくお願いいたします。

  • プログラム言語について・・・

    レポートをやっているのですが分からなくて・・・ ベンチマークテストで使用されるプログラムは「      」で書かれ、いろいろな機種で実行可能です。 この問題に空欄のところです。 プログラム言語をいれればいいのでしょうか?

  • プログラム言語の覚え方

    こんばんは、お世話になります。 私は、いつもプログラム言語の例題を勉強するときは、 まずそのプログラムの仕組み、動作や意味などを理解して 覚えてようとするのですが、 それも一つなのですが、 やっぱりその例題自体を暗記して覚えたいのですが、 何か覚えるのにいい方法はないでしょうか? ご教示お願いします。

  • プログラムの言語について

    プログラムの言語について 私は今プログラムの勉強をしてるんですが 自分はどんな言語からいこうかと思っています 私は将来的にコンピュータ関係の仕事をしたいと思っています といってもソフト開発かゲームプログラマーとか細かいことはまだ考えていないんですが そんなことも考えて 今は、プログラムの構造を理解するために言語を勉強すれば良いのか それとも、将来役に使う見込みのある言語を勉強すればいいのかわかりません わたしはHSPという言語?をつかってゲームを作ったりしています なの、変数の定義などあまり細かいことはわからなくても プログラムがどんなのかというものはちょっとわかります そもそも、言語が変わることで、”どうすればいいの~~”くらいに変わるものですか? あと、言語にはいろいろありますが、個々にどんなことに特化しているなどのことはあるでしょうか また、お勧めの言語などがありましたら、使いやすい(あなたが使っていて満足な)エディタなどあれば ご紹介よろしくお願いします

  • C言語のプログラム集

    こんにちは。C言語のテキストにはプログラムとその説明が書いていますが、 このC言語のプログラムが多くのっているような本はありますか?本屋さんで探したのですが、プログラムがものすごく多くのっているようなものがなかったので、もしお分かりの方がおられましたが、本の紹介をお願いします。

  • windows自体のプログラム言語

    ウィンドウズ自体もプログラム言語によって作られていると思うのですが ウィンドウズ自体はどういうプログラム言語で書かれているのですか? ご存知の方ご回答よろしくお願い致します。

  • C言語プログラムを用いた画像表示プログラム

    おはようございます。 お時間ありましたら、ご教授よろしくお願いいたします。 C言語を使って、画像の表示、画像の処理ができるプログラムを作成したいのですが、私自身、JAVAを少しかじった程度の知識しかなくなかなかうまくいきません。 やっかいなことに、ただ画像を表示させるだけでなく、JPEGライブラリを用いた(JPEG画像を読み込んで処理できる)C言語プログラムのプログラムを作成したいのですがうまくいかずご質問させていただきました。 参照できるサイト、ご自信の作られたプログラム、プログラムを経験されている方の記述など教えていただければ幸いです。 明確な質問ではないのでご回答が非常に難しいと思いますが、よろしくお願いいたします。 早朝からお忙しいと思いますが、お時間がありましたら是非ご教授よろしくおねがいします。

  • ラダープログラムはプログラム言語ですか

     制御盤の制御では、シーケンサ(PC)を使って専用ラダーソフトで作成されることが多いのですが、これもプログラム言語の一種でしょうか。  また、C言語などの構造化に適したプログラム言語にくらべて、ラダーソフトは規模が大きくなると非常に見にくくなります。 それでも、このスタイルのプログラミングが支持されてているのは、なぜでしょうか?

  • VBAと似たプログラム言語を教えてください。

    仕事場ではエクセルVBAを使い簡単なプログラムを作ってエクセルをいじっているのですが、自宅にはofficeがありません。 自宅でも似たようなプログラム言語を使って簡単な個人用アプリケーションを作りたいのですが、何か良い言語はないでしょうか? 言語、フォーム作成、共にわかりやすいのがあればいいのですが。