ご来訪ありがとうございます。
当サイトは http://www.kmonos.net/ へ移転しました。
(2002/08/11)


b2e station

B2E(Bridge To Executables) Script 仕様書

はじめに

仕様書だけじゃ全然わからん、という方。あるいは、作ってみたけど 果たしてこれでよいのか自信ないから合わせてみたいという方。これからb2eを 書こうと思っているので、いろいろ弄れる叩き台が欲しいという方、 そんな方々向けの情報サイトとしてこんなページを作ってみました。

街で見かけたb2e勝手にリンク集

SB氏のトコ
定番が揃ってます。あとb2eの書き方ケーススタディ等、情報充実。BBSに現れるb2eはかなりマニアック。
yc氏のトコ
120種類か130種類か、とにかく数え切れないほどのb2eスクリプト在り。最強。
okamitsu氏のトコ
DLL利用のマイナー系形式b2e。あとbhとか。
N2氏のトコ
対StuffIt Expander。
サト氏のトコ
yz2a, upx, zzip。
Mez氏のトコ
rk, uharc, arhangel, 777 他。
chu-氏のトコ
Noahによるrk圧縮法を詳しく解説。BMSの作者向けのようです。
pocho氏のトコ
なんかゴツいの(ぉ
Landy氏のdairy
7zip, rar, ace
>>129 >>179 >>200 >>259 @ 2ch
gz/bz2単独圧縮, 7zip。しかし最強スレなのにNoahの話題とはそぐわないと思うよ。^^;

標準では対応してない統合アーカイバDLL用

bel.b2e
load:
 (name Unbel32.dll)

decode:
 (cmd (arc) (dir))
ish.uue.b2e
load:
 (name Aish32.dll)
 (type ish sjis jis7 jis8 nk-sjis uuencode)

decode:
 (cmd (arc))

encode1:
 (cd (arc d))
 (if (method 1) (cmd -s -d (list f)))
 (if (method 2) (cmd -7 -d (list f)))
 (if (method 3) (cmd -8 -d (list f)))
 (if (method 4) (cmd -n -d (list f)))
 (if (method 5) (cmd -u -d (list f)))

内蔵のDLL対応ルーチンとほぼ等価なもの

lzh.lzs.lha.b2e
load:
 (name Unlha32.dll)
 (type lzh lh5 lh6 lh7)

check:
decode:
 (cmd x -a1 -jf0 (arc))
decode1:
 (cmd x -a1 -jf0 -p1 -n -gm -- (arc) (list))

encode:
 (if (method 1) (cmd a -d -jso1 -- -jm2 (arc.lzh) (list)))
 (if (method 2) (cmd a -d -jso1 -- -jm3 (arc.lzh) (list)))
 (if (method 3) (cmd a -d -jso1 -- -jm4 (arc.lzh) (list)))

sfx:
 (cmd s -gw3 -x1 (arc))
#zip.b2e
load:
 (name Zip32j.dll)
 (type zip store *normal password)

encode:
 (if (method 1) (cmd -rS0  (arc.zip) (list\*.*)))
 (if (method 2) (cmd -rS9  (arc.zip) (list\*.*)))
 (if (method 3) (cmd -rS9e (arc.zip) (list\*.*)))

sfx:
 (cmd --sfx (arc))
zip.jar.b2e
load:
 (name UnZip32.dll)

check:
decode:
 (cmd -x (arc))
decode1:
 (cmd -x --i -o (arc))
rar.b2e
load:
 (name Unrar32.dll)

check:
decode:
 (cmd -x (arc))
decode1:
 (cmd -x -s -y -- (arc))
arj.b2e
load:
 (name Unarj32j.dll)

check:
decode:
 (cmd x -jyc (arc))
decode1:
 (cmd x -y -p -hm -i -! (arc))
gca.b2e
load:
 (name UnGCA32.dll)

check:
decode:
 (cmd e -sx1 (arc))
decode1:
 (cmd ex -xx1 -sx0 (arc))
cab.b2e
load:
 (name Cab32.dll)
 (type cab MSZIP *LZX21)

check:
decode:
 (cmd -x (arc))
decode1:
 (cmd -x -i -o (arc) (list))

encode:
 (if (method 1) (cmd -a -r -mz (arc.cab) (list\*.*)))
 (if (method 2) (cmd -a -r -ml:21 (arc.cab) (list\*.*)))

sfx:
 (cmd -f (arc))
yz1.b2e
load:
 (name Yz1.dll)
 (type yz1 normal password)

check:
decode:
 (cmd x (arc))
decode1:
 (cmd x -y -z -i2 -- (arc) (list))

encode:
 (if (method 1) (cmd c (arc.yz1) (list)))
 (if (method 2) (cmd c -p (arc.yz1) (list)))

sfx:
 (cmd s (arc))
gza.bza.b2e
load:
 (name Bga32.dll)
 (type bga gzip *bzip2)

check:
decode:
 (cmd x -a (arc))
decode1:
 (cmd x -a -i -o (arc) (list))

encode:
 (if (method 1) (cmd a -r -a (arc.gza) (list\*.*)))
 (if (method 2) (cmd a -r -a (arc.bza) (list\*.*)))

sfx:
 (cmd s (arc))
tar.tgz.tbz.gz.bz2.z.taz.rpm.deb.ar.b2e
load:
 (name Tar32.dll)
 (type tar normal *gzip bzip2)

check:
decode:
 (cmd -xvf (arc))
decode1:
 (cmd --check-all-path=1 --display-dialog=0 -xvf (arc) (list))

encode:
 (if (method 1) (cmd -cvf  (arc.tar) (list\*.*)))
 (if (method 2) (cmd -cvfz (arc.tgz) (list\*.*)))
 (if (method 3) (cmd -cvfB (arc.tbz) (list\*.*)))
7z.b2e (1)
load:
 (name 7-zip32.dll)
 (type 7z LZMA PPMd)

check:
decode:
 (cmd x (arc))
decode1:
 (cmd x -y -hide (arc) (list))

encode:
 (if (method 1) (cmd a -t7z -m0=LZMA -r0 -mx (arc.7z) (list\*)))
 (if (method 2) (cmd a -t7z -m0=PPMd -r0 (arc.7z) (list\*)))

sfxd:
 (if (method 1) (cmd a -t7z -sfx7z.sfx -m0=LZMA -r0 -mx (arc.7z) (list\*)))
 (if (method 2) (cmd a -t7z -sfx7z.sfx -m0=PPMd -r0 (arc.7z) (list\*)))
#7zip.b2e (2)
load:
 (name 7-zip32.dll)
 (type zip 7-zip)

encode:
 (cmd a -tzip -r0 (arc.zip) (list\*)))

ややこしいfunctionの解説

list
(list)     == ReadMe.txt b2e Noah.exe NoahXt.dll
(list\*)   == ReadMe.txt b2e\* Noah.exe NoahXt.dll
(list\*.*) == ReadMe.txt b2e\*.* Noah.exe NoahXt.dll
(listr)    == ReadMe.txt b2e\jak.b2e b2e\aboutb2e.txt Noah.exe NoahXt.dll

Noahに「ReadMe.txt」「jak.b2eとaboutb2e.txtの入ったb2eフォルダ」「Noah.exe」「NoahXt.dll」の 4つがドロップされた場合、list命令はそれぞれ上のように展開されます。違うのはフォルダの扱いだけ、ということが解るかと思います。

resp, resq
(resp (listr)) ==
    ReadMe.txt
    b2e\jak.b2e
    b2e\aboutb2e.txt
    Noah.exe
    NoahXt.dll
  という中身のファイルをテンポラリに書き出し、そのファイルの名前を返す。つまり、

(cmd a (arc.cab) (resp (listr)))
  と言う文は、
    a d:\desktop\ReadMe.cab c:\temp\filelist
  などというコマンドをexeやdllに送ることになる。
  c:\temp\filelistは、上に書いたような5行のテキストファイルになっている。

(listr) を使うと、ファイル名の数が増えすぎて、上手く圧縮できなくなることがあります。 パラメータは1024個まで…などの制限が加わっているソフトは結構ありますので。 その場合、「レスポンスファイル」という機能をアーカイバがもし持っていれば、これを 活用することが出来ます。

大抵は、@listfile や !listfile という形でリストファイルを指定すると、 その中からファイル名を読み込んで圧縮する…という機能なので、上の例のように 直接リストファイル名を指定してしまうと、そのリストファイル自体が圧縮されてしまって 困ってしまいます。ちゃんと @listfile 形式にするには、下のようにやります。

(cmd a (arc.cab) (resp@ (listr)))
  と言う文は、
    a d:\desktop\ReadMe.cab @c:\temp\filelist
  などというコマンドをexeやdllに送ることになる。

resq と resp は、ファイル名に半角スペースが入ったときの扱いが違います。 (resq は ""でくくらない、respは""でくくる。) これも、どちらが適切かはアーカイバ次第なので、試して決めましょう。

(xcmd xcopy.exe (resp (listr)) (arc d))

余談ですが、↑のようにするとリストファイルを圧縮先に残せたりするので、 デバッグに便利かもしれません。^^;

いろいろサンプル

#upx.b2e
load:
 (name Upx.exe us)
 (type upx best)
encode1:
 (cmd --best --compress-icon=0 (list))
#rar.b2e
load:
 (name Rar.exe)
 (type rar maximum *max+media)

encode:
 (if (method 1) (cmd a -s -m5     -r0 (arc.rar) (list\*.*)))
 (if (method 2) (cmd a -s -m5 -mm -r0 (arc.rar) (list\*.*)))

sfx:
 (cmd s (arc))
rk.b2e
load:
 (name Rk.exe us)
 (type rk fast *max)

decode:
 (cmd -x (arc))

encode:
 (if (method 1) (cmd -mf1 -I5 (arc.rk) (listr)))
 (if (method 2) (cmd -mx3 -I5 (arc.rk) (listr)))

sfxd:
 (if (method 1) (cmd -SFX -mf1 -I5 (arc.exe) (listr)))
 (if (method 2) (cmd -SFX -mx3 -I5 (arc.exe) (listr)))
#gca.b2e
load:
 (name Gcac.exe)
 (type gca normal *solid single)

encode:
 (if (method 1) (cmd a (resq-o (listr)) (arc.gca)))
 (if (method 2) (cmd s (resq-o (listr)) (arc.gca)))
 (if (method 3) (cmd s (arc.gca) (list)))

   (comment method 1,2ではディレクトリ構造が無視されます。
            method 3ではファイルもしくはフォルダ一つしか圧縮できません)