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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0620
zezenanaHSP生成 exeファイルからHSPバージョンを知る方法2解決


zezenana

リンク

2022/6/20(Mon) 22:04:20|NO.96691

いつもお世話になっております。

HSPスクリプトにて生成された exeファイルを解析することで
HSPのバージョン(Ver3.51、3.6、3.7betaなど)を知る方法があれば教えて頂きたいです。

調査した感じではバージョンコードの埋め込みは無いみたいなので
exeファイルの内包されているバイナリデータやアドレス構成の違いなどで判断する
方法でも構いません。


「HSP3.7に向けたβテストについてのお願い」にて
http://hsp.tv/play/pforum.php?mode=all&num=94865#96356

HSP生成 exeファイルの実行にて長時間稼働すると動作が停止する
報告の再確認を 1ヶ月経過でPC連続稼働がやっと終わったのですが、
awaitの問題点が再現できませんでした。。

次の確認を行うにはまた 1ヶ月近くかかるので
できれば 前回の exeファイルのHSP生成バージョンが 3.51か
3.6(3.6 beta3 await対策版?)かを判明することで解決させたいと思っています。

すみませんが、分かる方がおられましたらご教授願います。



この記事に返信する


猪野

リンク

2022/6/21(Tue) 21:08:18|NO.96698

exeファイルにはバージョン番号(システム変数hspverの値)が含まれているようなので、
バイナリエディタで検索するか、以下のようなスクリプトを組めば簡易的に判別することができます。

#include "hspda.as" *startup version="3.51","3.6","3.7beta2" sdim data,64,3 lpoke data(0),0,$3508 lpoke data(1),0,$3607 lpoke data(2),0,$3702 *select dialog "exe",16 exist refstr if strsize=-1 | getpath(refstr,2+16)!".exe" { end } else { sdim buf,strsize+1 bload refstr,buf } *check foreach data binmatch buf,data(cnt),varsize(buf),4 if stat { mes version(cnt)+"で作成されている可能性があります。" } loop if ginfo_cy=0 { mes "それ以外のバージョンで作成されています。" }
(※3.7beta2で追加されたbinmatchを使用しているため、それより前のバージョンでは動作しません。)



zezenana

リンク

2022/6/24(Fri) 08:43:56|NO.96713

>猪野 さん

ご返答とバージョン判別のスクリプトありがとうございます。

hspverがロング値(4バイト)で埋め込まれているのですね。。
ワード検索で大量にヒットして諦めていました。。調査不足ですみません。

提供のスクリプトは私の制作した exeファイルでは複数表示されましたが、
アドレスの範囲を限定したことで解決しました。
.textセクションに限定した所、3.51のみ表示することが出来ました。

HSPランタイム(hsprt)を他に変えた所バージョン番号の位置が変化するので
多分、ランタイム内部に組み込まれているのかも知れません。

3.6beta3より前のバージョンであることが判明したので報告できそうです。
ありがとうございました。



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