制作日記

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

なんか調べようと思った

generanaiを2体対戦させつつ、EIPレジスタダンプを100msec毎に100回実施したら
このあたりが良く引っかかった
00457098  |> 8A16           |/MOV DL,BYTE PTR DS:[ESI]
0045709A |. 84D2 ||TEST DL,DL
0045709C |. 74 16 ||JE SHORT winmugen.004570B4
0045709E |. 8B6C24 5C ||MOV EBP,DWORD PTR SS:[ESP+5C]
004570A2 |. 81E2 FF000000 ||AND EDX,0FF
004570A8 |. 66:8B5455 5C ||MOV DX,WORD PTR SS:[EBP+EDX*2+5C]
004570AD |. 8B6C24 14 ||MOV EBP,DWORD PTR SS:[ESP+14]
004570B1 |. 66:8910 ||MOV WORD PTR DS:[EAX],DX
004570B4 |> 8B5424 30 ||MOV EDX,DWORD PTR SS:[ESP+30]
004570B8 |. 83C0 02 ||ADD EAX,2
004570BB |. 03CA ||ADD ECX,EDX
004570BD |. 8BD1 ||MOV EDX,ECX
004570BF |. 81E1 FFFF0000 ||AND ECX,0FFFF
004570C5 |. C1EA 10 ||SHR EDX,10
004570C8 |. 2BF2 ||SUB ESI,EDX
004570CA |. 4F ||DEC EDI
004570CB |.^75 CB |\JNZ SHORT winmugen.00457098



perfというか重い箇所を調べてみようと思って、ついでにmemRead作り直そうしてた
で、ipレジスタのモニターだけサクッと作ってやってみた

https://github.com/drab-l/memRead
Makefileは完全自分用、ビルドしたければlinuxにmingw64入れてどうぞ

ipダンプする以外の機能ないけど、使い方は
memRead [-p プロセスID | -c 実行ファイル名(部分一致)]
で実行、メインスレッドに対して100msecごとにipレジスタをダンプ
実行ファイル名指定時は検索して最初に見つかったやつ

次は指定箇所の処理時間計測やろうかなと思ったけど、どういう方式にすべきか

RISCとか固定長命令のアーキテクチャなら指定箇所を逆アセンブラして計測開始終了箇所時に自前のコードに飛ぶようにしてってので良いかもだけど
可変長命令のx86でそれは面倒くせー、もうBP張る方法で良いかな
という状態で、GW終わってから絶賛放置中

コメントの投稿

非公開コメント

プロフィール

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

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