トップページ⇒tech
14コメント3KB

DOSのEXEをバイナリに変換する

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 NGNG
DOSのEXEファイルを純粋なバイナリファイルに変換したいのですが
どうしたら良いですか?

純粋なバイナリというのは、例えばNASMで
nasm -f bin ...
binと指定したような形です。
0002名無しさん@お腹いっぱい。 NGNG
EXE2BINじゃダメなの?
0003名無しさん@お腹いっぱい。 NGNG
>2
良く知らんけどそれCOMにするやつじゃないの?
00041 NGNG
>2
どうやらそのCOMがバイナリらしいです。
nasm -hfすると
bin flat-form binary files (e.g. DOS .COM@` .SYS)
と出ます。
bin = COM@` SYSだったのか。
やっとすっきりしました。
0005名無しさん@お腹いっぱい。 NGNG
なにそれ、リロケータの事??

0006名無しさん@EXE2BIN使い NGNG
アドレス指定してやればCOMやSYSにできないEXEもBIN化できるよ
0007名無しさん@ちがうぜ NGNG
× bin=com@`sys

○ bin⊃com
  bin⊃sys
  com≠sys

00081 NGNG
>7
bin != comならcomってなにか特殊なヘッダとかがついてるんですか?
それとも概念として(???)bin == com@`sysは×だってことですか?
00097 NGNG
comやsysには特殊なヘッダなどついていません。
しかし、すべてのexeがcomやsysに変換できるわけではないのね。
com@`sysに変換できるのは、任意のセグメントで実行できるように
相対的なセグメント値の参照を含まないように作られているものだけ。
一般的な作り方のexeはその相対的なセグメント値の参照をロード時に
解決するようにしているので、6さんがいうようにセグメントのベースを
仮定してやらないとbin化できません。

exe=再配置情報(ヘッダ)がついた実行ファイル。
bin=実行可能な状態でメモリに配置されたイメージと同等なファイル。
com=binの条件を満たし、かつ0100hを先頭アドレスとし、任意のセグメントで動作可能なもの。
sys=binの条件を満たし、かつ0000hを先頭アドレスとし、任意のセグメントで動作可能なもの。

という意味で使っています。実際にはexe2binでcomやsysに変換するには
ファイルのサイズなどにも制約があります。

こんな説明で解かるかな?
0010名無しさん@お腹いっぱい。 NGNG
MS−DOSのどっかのバージョンから、DEVICE=*.EXEの指定が
可能になったから、.SYSの意味ってあんまり無いんでは?
00115 NGNG
リロケータじゃないや、ロケータだ。
http://www.st.rim.or.jp/~prognob/catalog/locate/
ようするにこんなプログラムの事だろ?
0012>10 NGNG
「MS−DOSのどっかのバージョンから、*.EXEの実行が
  可能になったから、*.COMの意味ってあんまり無いんでは?」
とかいってるのとかわんないぞ。スレの趣旨を理解してくれ。

001310>12 NGNG
言いたい事はわからないでもないが、その喩えはハズしてないかい?
0014名無しさん@お腹いっぱい。 NGNG
なんで?
■ このスレッドは過去ログ倉庫に格納されています