
タイトルどおりですが分かりにくいと思いますので説明します。
ここにあるtxtファイルがあるとします。
そのファイルはtxtファイルとして正常に開くことができ、再保存してもファイル内容が壊れることはありません。
そしてそのファイルの拡張子をtxtからexeに変更するだけで、実行可能で、何らかの動作をします。
…と、このようなファイルを作ることは可能か? ということが質問です。
制御文字の文字コードに相当する機械語を使わずに実行可能形式のファイルが作れるか? と言い換えることもできます。
文字コードはUnicodeやShift_JISなど一般的なものであればなんでも構いません。
また、もし無理なら最低で何バイト書き換えれば実行可能になるファイルが作れますか?
No.9ベストアンサー
- 回答日時:
他の方が書いている通り、exeは無理ですが、comでいいなら、任意のcomファイルに対してcom2txtを使えばテキストと改行だけからなるcomファイルが出来ます。
http://www.vector.co.jp/soft/dos/util/se004841.h …
確かASCIIの英数字と若干の記号だけしか使ってなかったと思います。
No.8
- 回答日時:
Unicode でいいとすると, 実質的に C800~CFFF 以外は全部使っていいことになるのでかなり反則っぽい気がするんだけど....
ちなみに MS-DOS (や Windows) は拡張子に騙されない (実際にファイルの中身を見る) ので「拡張子は exe だけど実際には com」というフォーマットでファイルを作ることができます. で com モデルを使うと「何もしない」最短のプログラムは int 20h, つまり機械語に直すと CD 20 になります. これは Shift_JIS で解釈すると「半角かたかなのヘ」+「半角空白」.
回答ありがとうございます。
>Unicode でいいとすると, 実質的に C800~CFFF 以外は全部使っていい
そんなに多いのですか。未定義部分などもう少しあった気もしますが…。
>拡張子は exe だけど実際には com
そんなことができたのですか。してみるとNo3さんのa\nも実際はcomとして動作していたわけですね。
610D0Aで…POPして即値とレジスタをOR。あまり意味のある動作ではありませんね。
>int 20h
こんなに簡単にできるんですね。ためしに作ってみました。
次はもう少し意味のある動作をするものを作ってみたいと思います。
No.7
- 回答日時:
>バイト数を書いてあるだけでうまい値を当てはめればテキストで
>読める部分だけでかけそうな気がしてしまいます。
実行対象のCPUの情報等も入っています。
例えばIntel386以降だと
0x014cとか入っています。(この0x01が表示できないと思います)
他にもセクション数、作成日時、ビットフラグがたっていたりします。
それに実行部は純粋な機械語なのです。
そこにはニーモックやアドレス、レジスタ等の情報が指定されているわけですが
txtで見れるコードだけでは無理です。
どらぐらいの割合で非印字コードが含まれるかは
プログラムの種類による影響が大きいのでわかりません。
BASE64等を使って意図的に割合の大きいプログラムは作れるでしょうが
それでもデコード部分は機械語ですから。
回答ありがとうございます。
なるほど、CPU名はどうしようもないですね。セクション数は適に数を合わせて作成日時はデタラメを書いても、ビットフラグが鬼門ですね。
>txtで見れるコードだけでは無理です。
>それでもデコード部分は機械語ですから。
まあ自分としてもあまり可能性が高いとは思っていませんが、試してみもせずに否定されるのはあまり納得がいきません。
…と思っていたらNo9さんのソフトで可能なようですよ。
No.6
- 回答日時:
★回答者 No.1、No.3 です。
・バッチファイルで思い出しました。
バッチファイルの先頭に機械語の16進ダンプ(数字文字列)を追加して、拡張子を
『com』や『exe』にすると実行できたような事を思い出しました。ただし、昔の
MS-DOS という OS 上で動く場合で Windows の OS でどうなるかは分かりません。
・また、その方法も『なぜ?』この16進の数字列をバッチファイルの先頭に『:』文字で
コメントアウトしているのに動くの?と不思議でした。→よって詳しい仕組みが全く
分かりません。→『過去に経験しました』という事なので、こちらの路線で調べてみたら
何か発見できるかも…。
最後に:
・上記の仕組みが分かっても Windows 上で動作するかどうかは不明です。
・また、基本的にテキストとして読める文字コード部分(機械語)だけで『exe』の実行可能
ファイルが出来るとは思えません。単なる好奇心で出来そうか、どうかという事ならば
私は『無理じゃないの?』とアドバイスします。
・以上。おわり。→今後の参考意見として下さい。
>バッチファイルの先頭に機械語
興味深い情報をありがとうございます。その機械語の内容が分からないことには何とも言えませんが、バッチファイルも奥が深いものですね。
No.5
- 回答日時:
OSとして何を使用するかの条件がついていないので.....
LinuxやUNIX等のUNIX系OSでは、拡張子のEXEは実行
モジュールとしての意味を持たないので、拡張子に
EXEを使ったスクリプトを作れば、テキストのみで
実行形式のファイルが作れますが?
この回答への補足
すいません。Windowsを考えています。
また、スクリプトのようなものではなく、純粋に機械語で書いてあるにもかかわらずテキストとしても読めてしまうようなものを求めています。
No.4
- 回答日時:
無理です。
exeはPEフォーマットと呼ばれるフォーマットですが
txtファイルで(メモ帳)で見れるということは
全てのバイナリがアスキーコードの英数字及び記号 と SJISのコードのみで
構成されなければならずPEフォーマットのヘッダからして既に無理です。
詳しくは「PEフォーマット」で検索してください。
(変換しても良いのならBASE64にすれば可能ですけどね)
>また、もし無理なら最低で何バイト書き換えれば実行可能になるファイルが作れますか?
それは元の実行ファイルのサイズにもよります。
半分ぐらいは書き換えになると思いますが。
もし掲示板やメール等でテキスト文書としてexeファイルを送りたいとかなら
上記に書いたとおりBASE64で可能です。
回答ありがとうございます。
PEフォーマットのヘッダを調べてみましたが、バイト数を書いてあるだけでうまい値を当てはめればテキストで読める部分だけでかけそうな気がしてしまいます。
>元の実行ファイル
少々勘違いされているようですが、特に元のファイルというものがあるわけではなく、なるべく印字可能文字だけで書けるコードを作ったときにそのコードに非印字可能文字がいくつ含まれているかという質問です。
実行する動作は文字を表示するなりファイルを作成するなり、何らかの確認可能な動作をすればOKです。
>もし掲示板やメール等でテキスト文書としてexeファイルを送りたいとかなら
そういうわけではありませんが、BASE64というのも面白そうですね。
BASE64のデコードプログラムが書ければどんなプログラムでも作れますし。
No.3
- 回答日時:
★よくは分かりませんが、最低『3バイト』で何かが出来ました。
・メモ帳を開き『a』という1文字と改行を入力します。→『3バイト』
そして適当にテキスト・ファイルに保存して下さい。
・それで拡張子を『.exe』にリネームすると見た目上は MS-DOS アプリケーション用の
アイコンに見えます。ダブル・クリックするとすぐに画面が消えてしまいます。
・そこで『コマンド・プロンプト』を起動してから実行します。
実行すると私の環境では『KKCFUNC が組み込まれました.』というメッセージとともに
『マイクロソフトかな漢字変換 バージョン 2.51』となり、プロンプト入力待ちになりました。
その後、普通にコマンド入力可能になります。→このとき、プロンプトのパスがロング
ネームからショートネームに代わりました。
ロングネーム『C:\Documents and Settings\(ユーザ名)\My Documents\My HomePage』
ショートネーム『C:\DOCUME~1\(ユーザ名)\MYDOCU~1\MYHOME~1』
・なお、ファイル内容は『a』~『e』の5文字を試しましたが、実行後にエラーが出なかったのは
『a』文字だけでした。→『f』~『z』や『A』~『Z』を試したら何か発見できるかも知れませんね。
・以上。よく分かりませんがこの回答は『3バイト』かな?
回答ありがとうございます。
不思議な現象ですね。ただそれは本当に実行ファイルができているのか疑わしいと思います。
たったの3バイトでできる命令は限られています。起こったことの大半はその命令とは関係ないところで起こっているものと思います。
ただ、このような現象がテキストで、しかもたった3バイトで引き起こされるというのは非常に興味のあることです。

No.2
- 回答日時:
拡張子がbatなら、このような実行可能なファイルは出来ますが、exeでは、出来ないとおもいます。
私は、今まで、exeの場合、テキストファイルとして読めるものは、作れない、と考えていました。又、それが、特に問題になることもありませんでした。むしろ、質問者様が、どうしてこのような質問をされたかに、非常に興味があります。差し支えなければ、その理由を教えていただけませんでしょうか。
この回答への補足
そういえばbatもありましたね。さすがにbatではあまり面白くないので対象外にします。
そもそもbatではあまり自由なコードが書けないですよね。
質問理由ですが、単に好奇心からです。
普通に考えたらtxtとして読めるexeなんて作れるとは考えもしませんが、それができたらちょっと面白いのではないか、と。
No.1
- 回答日時:
★無理だと思いますが…。
・『exe』の実行可能ファイルは、EXEヘッダというバイナリ部分が必ず必要ですので、
テキストとして読めるようなコード部分ではありません。ですので、この質問に対する
回答は不可能な事だと思います。
・昔、『com』の実行可能ファイルがあったころ、テキストの文章に数バイトの機械語を
追加するだけで実行可能ファイルな『com』に出来ました。拡張子を『com』にすれば
確かに実行されました。→これは、『com』モデルが『exe』形式のようにバイナリ部分の
ヘッダが特にないため、テキスト文章の先頭に数バイトの機械語コードを付加するだけで
実行可能なファイル『com』に出来たのです。→『exe』では無理だと思います。
・以上。参考までに。→機械語コードの部分はやっぱりバイナリですよ。
この回答への補足
comについてはあまり知らなかったのですが、どうやらexeより作りやすそうですね。実行できるなら別にexeでなくとも構いません。
>機械語コードの部分はやっぱりバイナリですよ。
ですから、テキストで読める機械語だけを使って何か意味のあるコードが書けないかと言っているんですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
exeファイルをすぐに終了させな...
-
ローカルのHTMLからexeファイル...
-
vscodeを最近いれてjavaを勉強...
-
ASPからexeプログラムへ引数
-
c/c++ ビルドしたにもかかわら...
-
Access クエリ実行が急に非常に...
-
ネットワーク越しのEXEファ...
-
MDBファイルをCSV出力したい
-
指定URLでブラウザを開くほか
-
SWTとSwingの違い
-
【緊急】ウイルス:ANTINNYが増...
-
exeファイルをホームページ上で...
-
HTMLのメールリンクに添付ファ...
-
LAN接続された外部フォルダに出...
-
ファイル入出力をサーブレット...
-
a.outはどこへ?
-
ダイアログボックスについて
-
コンパイル ./aと./a.out の違い
-
エクセルVBA:perlで作成したex...
-
VBSでファイル存在の有無チェック
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
JavaScriptでコマンドプ...
-
OLE又はDDEを使うVISUAL BESIC...
-
c/c++ ビルドしたにもかかわら...
-
コマンドプロンプトで外のexeや...
-
VB6.0で作ったプロジェクトが起...
-
VBAでEXEファイルを動かす方法...
-
VC++から引数付きexeファイルの...
-
以下のように複数のファイルを...
-
LINK : fatal error LNK1104に...
-
VBAで他のプログラムが起動して...
-
JAVA .jarファイルに再圧縮する...
-
batからexeを起動した際の戻り...
-
コンポーネント`MSCOMM32.cox'...
-
WScript.Echo と msgbox
-
jarの開き方を教えてください。
-
batからexeを実行し戻り値を受...
-
JARファイルをEclipseを使って...
-
なぜプロセスはファイルにアク...
-
Web上からExeを実行する場合に...
おすすめ情報