HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
1202
曲者実行ファイルをpackして実行できるようにしたかったのですが...7解決


曲者

リンク

2018/12/2(Sun) 15:11:59|NO.85918

はじめまして。

ランタイムや拡張DLLを使わずにどこまでできるかを目指す曲者です。

既に作っておいてある実行ファイルAを、
別のソースでpackして、そのソースを実行ファイルBにして、
そのBを実行するとAも起動される、というようにしたかったのです。

勿論、作りたてほやほやなBはそのディレクトリ内では
想定通りにAを起動してくれました。

しかし作成したBをディレクトリ移動させると、
「内部エラーが発生しました」と表示されます。
エラー発生場所とソースを照らし合わせるとexec命令をさしています。

packされていなければBを作成するときにメッセージが出るはずです。
packされたであろうAを起動するにはどうすればいいのでしょうか。
ただしあえてランタイムや拡張DLLは使いません。
素のHSPで作り上げてみたいという謎のこだわりがあります。



この記事に返信する


MillkeyStars

リンク

2018/12/2(Sun) 16:03:15|NO.85920

パックされた実行ファイルを実行ファイルとして取り出さなきゃ、起動できないよ。
exec するときに、実行ファイルがストレージに存在しなきゃいけないから。



掘木

リンク

2018/12/2(Sun) 16:44:19|NO.85921

テンポラリフォルダにpack済みのファイルのバイナリをぶちまけて、
それを実行するってのでどうだろう。

明確なファイルを生成したくないなら、名前付き共有メモリを用意して、
バイナリデータをメモリにぶちまけて、実行権限を与えて動くかもしれないってくらいの勝負。
そんなことはやったことがないので動くかはよくわからない。

少なくとも、Windowsがファイルとして認識するだけの仕組みが必要。
そして、HSPのpack機能はwindows上のファイルという取り扱いで動いていない。



曲者

リンク

2018/12/2(Sun) 18:08:19|NO.85922

なるほど、つまり

packしたものをbload。
bloadした物をテンポラリフォルダ(のような物)として書き出し&実行。
そしてプログラムの終了時に書き出した物を消す。

といった感じでなら動くという事でしょうか?試してみます。



曲者

リンク

2018/12/3(Mon) 17:11:20|NO.85931

現在の進捗を記させていただきます。
非常に私にとっては興味深いです。

ひとまずは、packしたファイルを
読みだして書き出すスクリプトを作りました。

bload命令でpackしたヤツを変数に読みだして、
bsave命令で変数の内容を書き出してみると、
exeファイルがダメになってしまいました。

しかしbcopy命令でやってみるとどういうわけか、
exeファイルはpackされたものそのままでした。

#epack "something.exe"
#epack "anything.exe" *static ef.0 = "something.exe"//ファイル名です。 ef.1 = "anything.exe"//同じく。 sdim rf , , 2   //bload,bsave用でした。 bcopy ef.0 , ef.0 bload ef.1 , rf.1 bsave ef.1 , rf.1

上記スクリプトのようになりました。
packファイル名は一応違いますが。



リンク

2018/12/3(Mon) 18:44:17|NO.85932

exeのようなバイナリファイルをbloadやbsaveで読み書きする場合、サイズを正しく指定しないと、余計な物まで読み込み/書き出ししたり、途中で書き出しを中断されたりしてしまいます。

exist "packed_exe.exe" exeSize=strsize sdim fb,exeSize+1//(念のため+1する、実際必要かどうかは微妙) bload "packed_exe.exe",fb,exeSize bsave "saved.exe.exe",fb,exeSize
これで壊れないと思います。



曲者

リンク

2018/12/4(Tue) 15:45:08|NO.85940

なるほど、ファイルサイズが原因だったのですね。
原因がわかってスッキリしました、ありがとうございます!



曲者

リンク

2018/12/8(Sat) 18:19:56|NO.85965

あれから色々試してみたら、
なんとかやりたい事が出来ました!
皆さま、ありがとうございました!



ONION software Copyright 1997-2021(c) All rights reserved.