;packlist.as #include "anthspex.as" #define MAX_PATH 260 sdim file,MAX_PATH ;対象ファイル file=cmdline if file=="" { dialog "exe",16,"HSP exe ファイル": if stat==0: end file=refstr } exist file: flen=strsize: if flen<0: dialog "not found "+file: end ;exe解析 sdim buf,flen bload file,buf,flen peek c,buf,0: peek d,buf,1 if (c!='M')|(d!='Z'): dialog file+"は実行ファイルではありません": end longpeek p,buf,60 ;PEフォーマットヘッダ先頭 peek c,buf,p: peek d,buf,p+1: wpeek e,buf,p+2 if (c!='P')|(d!='E')|(e!=0) { dialog file+"のファイルフォーマットには対応していません": end } longpeek align,buf,p+60 ;ファイルアラインメント wpeek nsec,buf,p+6 ;IMAGE_SECTION_HEADERの数 p+=248: maxtop=0 repeat nsec longpeek c,buf,p+20 ;IMAGE_SECTIONのファイル上先頭位置 if c>maxtop: maxtop=c: longpeek d,buf,p+16 ;同上長さ p+=40 loop pend=(maxtop+d+align-1)/align*align ;↑多くの場合、pendが「DPMX」の位置だが、例外もある s="DPMX": bfind buf,s,4,pend: pdpm=stat if pdpm>=(flen-4): dialog "HSPで作成されたexeファイルではありません": end ;ファイルのリストアップ wpeek num,buf,pdpm+8 ;4バイトかも p=pdpm+16 repeat num ;strmid s,buf,p,16 ;HSP Ver. 3.1のstrmidのバグに対応 memcpy s,buf,16,0,p mes s p+=32 loop stop