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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0428
kanamaruhspのpackfileについて4解決


kanamaru

リンク

2015/4/28(Tue) 17:18:55|NO.68827

今現在、標準命令の応用でdllをpackfileの中に入れられないか
挑戦しています。
ひとまず、peekとpokeを使ってフォーマットを分析するところから始めています。
ただ、dllのフォーマットをわかりやすく解説しているサイトが少ないし、
もしフォーマットを理解できたとしても、dllからマシン語をhspから抽出できるかどうか。
ちなみにアルゴリズムとしては、
1.dllをバッファに読み込む。
2.フォーマットを分析する。
3.マシン語コードを抽出する。
4.マシン語コードをバッファに保存。
5.自作マシン語コードに4のマシン語コードを送る。
6.実行
を考えています。
自作マシン語を使っている時点で標準命令の応用とは言いにくいですが、
これでも外部ファイルは使っていないのでいいと思います。
windowsAPIを使えば少し楽ですが、
有志によってhspはlinuxやmacに移植されている現状、
できる限りwindowsAPIは使いたくないのです。
(dllはwindowsの形式なのでほかのOSでは使わないかもしれないけど。)
少なくとも僕の力では厳しいと思われます。
誰か力になってくれる人はいませんか?



この記事に返信する


cats

リンク

2015/4/28(Tue) 17:27:47|NO.68828

機械語コードを取り出したところで、それを渡すというやり方では実装できない気がします。
DLLにはたくさん関数が入っているので、処理だけを取り出すというのは面倒です。
やるなら、メモリ上に実行可能なバイナリとしてロードしてやればいいです。
が、HSPでは既にDLLをパックできる拡張ライブラリを作られた方がいます。
http://hsp.tv/play/pforum.php?mode=pastwch&num=51630
DLLをパックしたいだけなら上のものを使うことをおすすめします。



kanamaru

リンク

2015/4/28(Tue) 17:54:04|NO.68830

catsさんが提示してくれた、拡張ライブラリなら以前使ったことがあります。
しかし使える命令に制限があるので制限をなくしたいと思ったのです。
しかし、できないまま時間が経過しました。
そんな時にhspからマシン語コードが実行できると知り、
それを利用できないかと思ったのです。
正確にはバッファにマシン語コードを配置してそのバッファのアドレスを関数アドレスとして
使っているのですが。
いい方法がありますか?



skyblue

リンク

2015/4/29(Wed) 10:27:12|NO.68876

DLLの仕組み上、
抽出しただけでは使えません。
書き換えが必要です。
なので逆アセンブリを一度してからJMP命令のアドレスを書き換えるか
独自のランタイムを作って
DLLやオブジェクトファイルの構造を解析して各種アドレス書き換えを行うか
DLLを取り出して実行ファイルのディレクトリなどに再配置をするしかありません


DLLファイル自体はWindowsのものです。他のOSで実行ファイル以外の関連ファイルとしては
*.soというDLLに似て非なる共有ライブラリだけです。



cats

リンク

2015/4/29(Wed) 13:37:26|NO.68878

既に書かれていますが、DLLをハードディスク上に展開してロードするのはダメですか。
展開した後に関数を呼び出せば#uselibでもLoadLibraryでも実行できます。
どうしても機械語が使いたいなら、DLLではなく、その中身の機械語を予めコード内に記述しておけばいいです。



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