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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0317
kanamaruhspによって作成したexeの仕組み8解決


kanamaru

リンク

2016/3/17(Thu) 16:46:02|NO.74932

ふと思ったんですが、hspによって作ったexeって
hspランタイムの末尾にdpmファイルを結合した構造になっているらしいですが、
そのようなexeってどうやって作れるのですか?
hspで作れるようだったら、作ってみたいです。
(時々独自言語を作ったりするので、exe変換機能とか作れるかなと思ったりもします。)



この記事に返信する


KA

リンク

2016/3/17(Thu) 22:45:54|NO.74935

>>hspで作れるようだったら、作ってみたいです。
作ることは出来るけど、結果的には無意味になります。

スクリプトエディタを使わずにHSPの機能を使うEXEを
作る事と同じです。



kanamaru

リンク

2016/3/17(Thu) 23:01:17|NO.74936

なぜ無意味になるのでしょうか?
スクリプトエディタを使わずにhspの機能を使うexeと同じということは
dir_cmdlineを使うということでしょうか?



zakki

リンク

2016/3/17(Thu) 23:29:57|NO.74938

static変数をプレイスホルダにしておいて実行ファイル内にファイルサイズとチェックサムを書き換えつつdpmと結合。
http://dev.onionsoft.net/trac/openhsp/browser/trunk/hspcmp/win32dll/dpm.cpp#L445

実行時にはその変数からオフセットとチェックサムを読み込んで実行。
http://dev.onionsoft.net/trac/openhsp/browser/trunk/hsp3/dpmread.cpp#L185

もっと手を抜いくなら copy /b runtime.exe+magic.bin+foo.script みたいに単に連結して
マジックナンバー探すのでも実現できるんじゃないかと思います。



kanamaru

リンク

2016/3/18(Fri) 07:07:50|NO.74940

意外と難しい…。
winapiに専用のAPIがあるのかと思った。
結合されるランタイム側ってhspで作れないかな?
staticな変数って作れたっけ?
と言ってもhspって変数pvalで管理してるから、
変数じゃなくてメモリ領域の問題かも。



tds12

リンク

2016/3/18(Fri) 22:15:36|NO.74954

optmesにあたる部分を#packして
ランタイムを作ればよいかなと思ったのですが、
実行ファイルになったときに元のhrt(HSPで作ったもの)の後に
バイナリが付くと元hrt起動時点でstartup failedを起こすようです。

http://dev.onionsoft.net/trac/openhsp/browser/trunk/hsp3/dpmread.cpp#L253

上リンクを見る限りでは、HSPで作った実行ファイルに
DPM(チェックサムが変化するようなバイナリ)
を付け足して実行させることはできないようです。

HSPのランタイムは無理そうですが、
HSPのランタイム以外(独自言語等)のために作る分には、
EXEファイル内のDPMファイルをいじればよいと思います。



kanamaru

リンク

2016/3/18(Fri) 22:36:33|NO.74957

exe内のdpmをいじるってかなり難しいですよね。
dpmって中暗号化されてるし。
もうランタイムだけcで作るか、
一旦hspに変換させて、hspcmpに任せようかな?



tds12

リンク

2016/3/18(Fri) 23:27:51|NO.74958

>dpmって中暗号化されてるし。
暗号化されたDPMファイルの操作については、
下リンクが参考になると思います。
http://hsp.tv/play/pforum.php?mode=pastwch&num=66673
http://hsp.tv/play/pforum.php?mode=pastwch&num=66681

書き忘れていました、
optmesのhsp_sum(おそらく29バイト目)を
正しく書き換える必要もあります。



kanamaru

リンク

2016/3/19(Sat) 00:12:57|NO.74959

そうか、その手があったか。
その方法なら、独自言語のexeを作成できる。わざわざhspに変換する必要はない。
既に作ったdpmに同時言語のソースファイルを追加したのをexeにすればいいのか。
どっちにしろhspcmpの力を借りるけど。
dpmに追加する時のファイル名は固定でやれば。



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