制作日記

こういうの作った方が、逃げにくいじゃない

Assert failure in p-update.c line 241

やっと、時間ができたんで見てみた
結論として、プレイヤー数とかプレイヤーアドレス絡み

アセンブラ読んでの静的解析オンリーで、実動作見てないから裏取りはしてない
それと、前提知識として以下記事を読んでおくこと
http://drabs.blog40.fc2.com/blog-entry-1109.html

行数とエラーメッセージ的に、出してるとこは↓臭い
上リンクの記事で載せてるアセンブラの最後の方、004408ABから飛んでくる
playerenable云々のチェックの次

* Referenced by an (U)nconditional or (C)onditional Jump or (c)all at Address:
| 004408AB(C)
|
004408CC 8B8C9850B70000 mov ecx, [eax+ebx*4+0000B750h] <<<<< eax+0000B750hでプレイヤーアドレスリストの先頭
<<<<< それにebx(多分ヘルパーとか込みのプレイヤー数)*4を足す
<<<<< つまり、存在している中では最終のプレイヤーのアドレスをecxに取得
004408D3 85C9 test ecx, ecx <<<<< それが0か否か
004408D5 7534 jnz 0044090Bh <<<<< 0でなければ問題なし、以下のエラー処理を飛ばす
004408D7 68F1000000 push 000000F1h <<<<< 0xF1=241をスタックに積む

* Possible string reference 4A9F40h "D:\mugenw\src\mugen\p-update.c"
|
004408DC 68409F4A00 push 004A9F40h
004408E1 E86A86FDFF call 00418F50h <<<<< パス名からファイル名を取得するサブルーチンと思えばおk
004408E6 83C404 add esp, 04h
004408E9 50 push eax <<<<< 上のサブルーチンで取得したファイル名をスタックに積む

* Possible string reference 4A9F60h "Assert failure in %s line %i"
|
004408EA 68609F4A00 push 004A9F60h <<<<< Assert~をスタックに積む
004408EF 68606D4B00 push 004B6D60h <<<<< 直下のサブルーチンで作った文字列を書き込むアドレスをスタックに積む
004408F4 E85E190500 call 00492257h <<<<< 引数的にsprintf的な関数、エラーメッセージ作る処理
004408F9 68606D4B00 push 004B6D60h <<<<< 直上のサブルーチンで作った文字列をスタックに積む
004408FE E8CD7EFDFF call 004187D0h <<<<< 多分、メッセージボックス出す処理?
00440903 A14C5B4B00 mov eax, [004B5B4Ch]
00440908 83C414 add esp, 14h

コメントの投稿

非公開コメント

No title

つまりプレイヤーアドレスのリストを変にいじってしまったとかそんな感じですかね

No title

発生時の状況がわからないので断言できないですが、
キャラの記述から直接起こそうと思ったら、そんな感じですね

MUGENの処理によっては、間接的に起こせる可能性があるかもですが
プロフィール

Author:drab
霊夢改変キャラ
「12 3 ! {V} [_]」
公開中
L霊夢でもl_reimuでも好きなように読んでください

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク