teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]

 投稿者
  題名
  内容 入力補助 youtubeの<IFRAME>タグが利用可能です。(詳細)
    
 URL
[ ケータイで使う ] [ BBSティッカー ] [ 書込み通知 ] [ 検索 ]

スレッド一覧

  1. 対応するソフト(0)
スレッド一覧(全1)  他のスレッドを探す 

*掲示板をお持ちでない方へ、まずは掲示板を作成しましょう。無料掲示板作成


なるほど

 投稿者:Imaha486  投稿日:2010年 6月14日(月)08時34分45秒
  とりあえずemuhaste本体をデバッガで監視してみますかねぇ。
Dで不具合が出てるということは、どこかでsignedで処理してるところがあるのかも。

ただ、今月はラボ連載と特集2本と本業があるので、6月中にできるかは微妙なところで・・・。
今しばらくお待ちください。
 
 

emuhaste 本体から D コードを DLL へ渡すときの不具合に関して

 投稿者:John  投稿日:2010年 6月12日(土)19時08分37秒
   どうもお久しぶりです。また長文になってしまいました(汗)。

 先日ちょっと書きましたが、ps2par.dll の D コードの 0010 (Not Equal)
が、[更新&適用]クリック時と[常に実行]時で動作が違っていたので
ps2par.dll の問題かと思い、ソースを見ていたのですが、どうもソースは問
題ないようなので、ps2par.dll の CheatEngine 関数の開始直後に、emuhaste
本体から渡されたパラメータのログを取って確認したところ、以下のように
No 1, 2 の[常に実行]時は [NG] になることが分かりました。

No 入力したコード   ps2par.dll に渡される値(m_ulWriteAddress[0], m_ulWriteParam[0])
            [更新&適用]クリック時  [常に実行]時
------------------------------------
1 D08F2F04 00100000  D08F2F04 00100000 OK  D08F2F04 00000000 [NG]
2 D08F2F04 00101234  D08F2F04 00101234 OK  D08F2F04 00001234 [NG]
3 D08F2F04 00000000  D08F2F04 00000000 OK  D08F2F04 00000000 OK
4 D08F2F04 00001234  D08F2F04 00001234 OK  D08F2F04 00001234 OK

 これを見ると、ps2par.dll の問題ではなく、emuhaste 本体が DLL に値を
正しく渡せていないようです。

 emuhaste 本体が DLL に値を渡すところを確認されてみてください。


 あと、ps2par.dll のソースは MFC を除外していましたが、CString など使
えると文字列操作が格段に楽になるのと、MFC のスタティックライブラリをリ
ンクしてしまえば再配布のときも問題ないので開発効率を考えると MFC を使っ
た方が便利だと思います。ps2par.dll の場合、MFC なしだと 28K くらいです
が、今回のログを取るために MFC のスタティックライブラリをリンクしたと
ころ、Release バージョンで 120K くらいでした(後述のログ関数入り)。100K
増えますが、今は100K くらい増えてもどうってことないと思います。これは
あくまで意見ですが。


 参考に、今回作ったログ関数を貼っておきます。宜しければ DLL のデバッ
グにお使いください。

======================================================================
1. ps2par.cpp
 CheatEngine 関数直後に WriteParamLog を呼び出してください。
 ログファイル名は WriteLog の中に直接埋め込んでます。
 基本的に Unicode 対応で書くようにしている人なので、_T マクロや ts 系
関数を使ってますがそのままコンパイル/リンクできます。
 こんな感じのログが emuhaste 本体のディレクトリに作成されます。

[ps2par.dll.log]
2010/06/12 18:36:30 00000228, 04C01000, 00000000, 2, 0
2010/06/12 18:36:30 00,D08F2F04,00101234
2010/06/12 18:36:30 01,108F2F04,00000258
======================================================================

void WriteParamLog( unsigned long m_ProcessID,  // プロセスID
     unsigned long m_ulRealStartAddress,   // プロセスの基準となるベース開始アドレス
     unsigned long m_ulVirtualStartAddress,  // emuhasteのヘキサビューワの開始アドレス
     unsigned long m_ulCodeCount,       // 入力された改造コードの数
     unsigned long m_ulWriteAddress[],    // 改造コードのアドレス配列
     unsigned long m_ulWriteParam[],     // 改造コードのパラメータ配列
     unsigned char m_ucAdvancedCheck)     // DLL拡張チェックの値(チェック=1)
{
 CString sLog;

 sLog.Format(_T("%08X, %08X, %08X, %ld, %d\n"),
  m_ProcessID,
  m_ulRealStartAddress,
  m_ulVirtualStartAddress,
  m_ulCodeCount,
  (int)m_ucAdvancedCheck);

 WriteLog(sLog);

 for (unsigned long i = 0; i < m_ulCodeCount; i ++) {
  sLog.Format(_T("%02d,%08X,%08X\n"), i, m_ulWriteAddress[i], m_ulWriteParam[i]);
  WriteLog(sLog);
 }
}

BOOL WriteLog(CString sLog)
{
 CTime tm = CTime::GetCurrentTime();
 CString sDateTime;
 FILE* fp;

 sDateTime.Format(_T("%04d/%02d/%02d %02d:%02d:%02d "),
  tm.GetYear(),
  tm.GetMonth(),
  tm.GetDay(),
  tm.GetHour(),
  tm.GetMinute(),
  tm.GetSecond());

 if (NULL == (fp = _tfopen(_T("ps2par.dll.log"), _T("at")))) {
  return FALSE;
 }

 _fputts(LPCTSTR(sDateTime), fp);
 _fputts(LPCTSTR(sLog), fp);

 fclose(fp);

 return TRUE;
}


======================================================================
2. StdAfx.h
 抜粋。#include <windows.h> は削除。#include <afxwin.h> を追加。
======================================================================
// この位置にヘッダーを挿入してください
#define WIN32_LEAN_AND_MEAN // Windows ヘッダーから殆ど使用されないスタッフを除外します

// TODO: プログラムで必要なヘッダー参照を追加してください。
#include <afxwin.h> // MFC のコアおよび標準コンポーネント

//{{AFX_INSERT_LOCATION}}


======================================================================
3. プロジェクトの設定
 [プロジェクト][設定][Microsoft Foundation Class] に
 [MFC のスタティックライブラリを使用]を選択。Release/Debug 両方。
======================================================================
 

(無題)

 投稿者:Imaha486  投稿日:2010年 5月26日(水)22時47分36秒
  >Johnさん
とりあえずその辺も考慮して実装してみます。
(恐らく次は6月入ってからですが)
 

T 検索の続き。IEEE754 ではない float の値 0 への対応

 投稿者:John  投稿日:2010年 5月25日(火)04時25分48秒
   度々すみません。前の投稿で T 検索のことを書いたので、ついでに書かせ
ていただきます。

 検索するときに、1 バイトずつずらして検索していけば、当然ながら IEEE754
ではないバイト列が大量に出てくると思います。そのときに、前の投稿の float
を変換ライブラリ代わりに使う方法の場合、特に例外が発生することはなく、
0 が返ってくるようです。例えば、01 01 01 01 のようなバイト列のとき。

 となると、「減少[-]」ボタンで検索したとき、上に書いたようにほとんど
のバイト列は float に変換すると 0 になりますから、みんなヒットしてしま
う結果になり、それでは実用にならないと思います。

 そのときの対処法として、バイト列を float で表わしたときに 0 となった
としても、IEEE754 での 0 は 00 00 00 00 ですから、例えば 01 01 01 01
といった IEEE754 ではないバイト列が float として 0 だとしても、そのと
きは 00 00 00 00 ではないので検索対象から除外することで、減少検索した
ときにヒットしまくる問題はかなり軽減されると思います。

 あとは、たまたま IEEE754 になっているバイト列があった場合には有効な
値になってしまいますが、それはその他の整数型の検索でも同じことですから
特に問題ないと思います。

 この点、前の投稿の後、気になっていたので書かせていただきました。では。
 

emuhaste v2.51 リリースのお礼と T 検索

 投稿者:John  投稿日:2010年 5月23日(日)19時38分33秒
   v2.51 リリースお疲れ様です。リリース直後から使わせてもらってます。
 いまさっきまでやってたゲームがまたまた IEEE754 多用しているゲームで、
R 検索非常に役に立ちました。終了確認も何度か助かってます(笑)。


 あと T 検索に関してですが、VC6 でしたら float 型がそのまま IEEE754
みたいですから、これを利用されてみてはいかがでしょうか。

 以下はサンプルプログラムです。

======================================================================
float f1 = 100;
unsigned char* puc1 = (unsigned char*)&f1;
CString s;

s.Format("%02X%02X%02X%02X", puc1[0], puc1[1], puc1[2], puc1[3]);

TRACE("%s\n", s);


float f2;
unsigned char* puc2 = (unsigned char*)&f2;

puc2[0] = puc1[0];
puc2[1] = puc1[1];
puc2[2] = puc1[2];
puc2[3] = puc1[3];

TRACE("%f\n", f2);

--- 実行結果 ---
0000C842
100.000000
======================================================================
 

emuhaste v2.50beta 動作確認しました

 投稿者:John  投稿日:2010年 5月 9日(日)18時48分19秒
   早速使ってみました。

1.ESC 終了確認メッセージに関して
 確認しました。しかし [X] ボタン終了でも表示されますね。
 これは意図してかどうかわかりませんが・・・
 これでも親切だと思いますが、その場合「Enable ESC End Message Flag」
より「Enable End Message Flag」の方が適切だと思います。同様に INI の
キーの名前も(ESC_MESSAGE -> ?)。

 もし ESC 終了のみということで、ESC 押下を判定したいのでしたら以下の
コードで可能です。一例としてご参考まで。

 if (::GetKeyState(VK_ESCAPE) < 0) {
  // ESC が押されている場合の処理
 }


2.R プリフィックス
 こちらも確認しました。
 ちょっと試したところでは問題ないみたいですね。IEEE754 に限らず 16 進
数そのままのイメージで入力・検索できるので思った以上に便利に感じていま
す。


 いずれにしても早速の対応ありがとうございました。以前以上に便利かつ安
心して使えるようになりました。
 

とりあえず

 投稿者:Imaha486  投稿日:2010年 5月 9日(日)16時15分18秒
  http://hp.vector.co.jp/authors/VA018359/beta/emuhaste.exe

・Extra→Enable ESC Message Flagを1にするか、emuhaste.iniのESC_MESSAGEを1にすると
 終了確認メッセージを表示します。

・エンディアン反転16進サーチは、PARAM & STRING SEARCHで"R00112233"と打つと、
 "33 22 11 00"バイト列を検索するようになりました(最大255バイト列まで)。

とりあえずEXEのみをアップしましたので、差し替えて使ってみてください。
 

Re: れす

 投稿者:John  投稿日:2010年 5月 8日(土)09時52分47秒
  >Imaha486 さん
ご検討ありがとうございます。その内容で十分です。対応楽しみにしています。
 

れす

 投稿者:Imaha486  投稿日:2010年 5月 7日(金)21時43分32秒
  >Johnさん
とりあえずESC終了についてはINIに隠しオプションで実装してみます。
ちなみにPCSX2は「一時停止」が目的ならば"F10"のほうが安全です。
(「メニューリターンによるストップ」ではなく「完全に停止」させますので)。

またバイト列の直接検索についても了解しました。
Iは既にインデックスサーチで使用済みなので、とりあえずRで実装してみます。
いずれはエンディアン変換サーチも実装したいところですが、それはまだ先でしょうねぇ。
 

emuhaste 要望です

 投稿者:John  投稿日:2010年 5月 6日(木)23時45分19秒
  要望1 ESC 終了はなしまたはオプションにして欲しい

 コード検索中は pcsx2/emuhaste を切り替えながらコード検索を行っていま
すが、emuhaste がたまたまアクティブなときに pcsx2 を一時停止するつもり
で ESC を押してしまったために、絞り込み途中で意に反して終了してしまっ
たということが何度かありました。以前はXボタンで終了すると Vista だと
異常終了していましたが、現在は修正していただいて発生しないようなので、
できれば ESC でいきなり終了するというのはなしにしていただくか、もしく
は ESC 終了使い慣れている人もいるかもしれないのでオプションにしていた
だくことはできないでしょうか。


要望2 IEEE754 の検索をバイナリで指定できるようにして欲しい

 プリフィックス T の検索がバグがあるらしいのは大変そうなのでとりあえ
ずそのままでいいのですが、4 バイトの並びをそのまま指定して検索できるプ
リフィックスに対応していただけないでしょうか。
 例えば 100 は IEEE754 だと 42C80000 となりますが、これを検索するのに
現在だと DWORD で 0000C842 とバイト並びを逆に指定して検索することにな
ると思います。
 これを、例えばプリフィックス I として、I42C80000 と入力して検索する
と、内部的には DWORD で 0000C842 と検索したのと同じに扱ってくれるとい
う機能です。
 ついこの間、数値がほとんど IEEE754 で扱われているゲームをプレイして
いて、10進数 と IEEE754 の変換をしてくれるツールを見つけたのでそれで
バイナリの値は簡単に分かるのですが、検索するたびに変換した値を手作業
で逆順に並べ替えて(DWORD)検索して・・・とかなり面倒に感じましたので。
 もしくは IEEE754 限定ではなく、例えばプリフィックス R(everse) として、
R123456 とあればバイト並びを逆順にして 563412 と入力したものとして扱っ
てくれるなど。そうすると IEEE754 だけではなく汎用的に使えますので。

お手数ですがご検討されてみてください。
 

レンタル掲示板
/19