したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

1みみず★:2008/08/10(日) 23:28:15
あまりにもプログラミングの内容が増えすぎた。
よって隔離スレの中を更に隔離。

2774さん:2008/08/10(日) 23:32:49
このスレは、
Sleipnir 50%、プログラミング 50%で出来ています。

3774さん:2008/08/10(日) 23:34:49
Sleipnirの戻る、進むの復元はそのページが全て読み込まれてから行われる。
JavaScriptで例えるならば、
window.onload
のタイミングである。
よって、画像の読み込みも全て含めてから復元が行われる。
ただ、此れは瞬間的に読み込まれるサイトならば問題ないのだが、
画像が一杯のサイトだと復元できるまでの所要時間が長すぎる。
是非ともタブを復元した瞬間に前後移動が出来るようにして欲しい。

4774さん:2008/08/11(月) 02:08:37
スーパープログラマーへの道
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html
----
トリプルバッファリング。
それと描画の部分は関数ポインタにしてやるっていうのも俺の妄想と一緒だなあ。

5774さん:2008/08/11(月) 02:12:19
以下全て引用
-----
第4F回 正確な60FPSの実現(ウエイトタイマ構成法) 99/6/8

どことなくマニアックになってきた、この連載であるが、今回は、正確な60FPS(秒間60フレーム)を実現するためのウエイトタイマ(時間待ち)ルーチンについて説明する。

よく、タイミングはDirectDrawでflipすれば速いマシンなら60FPSになるので、それで調整するという人もいるが、これは、

1.遅いマシンでは60FPSにならない(タイミングが必要ならtimeGetTimeで調整すべき。第49回参照)
2.Flipは、使わないほうが無難。(第44回参照)
3.画面のリフレッシュレートは60Hzとは限らない。

という3つの理由で間違っている。

あと、正確に60FPS刻むような待ち時間を計算できない人がよくいるが、以下のソースを見れば、なんとなくコツがつかめるはずである。コツとしては、

1.システムに負荷をかけないよう、余分な時間はSleepする。(Sleepの精度を考慮に入れて、直前まではSleepさせない)
2.今回の待ち時間は、1000/FPSとやってしまうと、端数分だけおかしくなる
3.かと言って、精度を出すためにdouble型で今回の待ち時間を計算するのは少し、無駄

の3ポイントぐらいであろう。速いマシンで正確に60FPSを刻まないのは、この待ち時間の消費のさせかたが間違っているからである。描画(blt)の直前にこのルーチンを呼べば、必ず安定して、指定のFPSになる。


--------------------------------------------------------------------------------

void ys::ElapseTime(void){ // (C)yaneurao 1998-1999
// 厳粛かつ正確かつ効率良く時間待ちをする

if (iFPS == 0) return ; // Non-wait mode

static DWORD lastdraw = 0; // 前回の描画時刻
// (不運にも第一発目のtimeGetTime() == 0とかゆーこともあるが、それは構わない)

DWORD t = timeGetTime(); // 現在時刻

dwFPSWaitTT = (dwFPSWaitTT & 0xffff) + dwFPSWait; // 今回の待ち時間を計算

// dwFPSWaitは、待ち時間の小数以下を16ビットの精度で持っていると考えよ
// これにより、double型を持ち出す必要がなくなる。
// dwFPSWaitTT = 1000 * 0x10000 / FPS;である

DWORD dwWait = dwFPSWaitTT >> 16; // 結局のところ、今回は何ms待つねん?

// 1フレーム時間を経過しちょる。ただちに描画しなちゃい!
DWORD dwElp = (DWORD)(t - lastdraw); // 前回描画からいくら経過しとんねん?
if (dwElp>=dwWait) {
lastdraw = t;
return ;
}

// ほな、時間を潰すとすっか!

// まだ時間はたっぷりあるのか?
// 4ms以上消費する必要があるのならば、Sleepする
if (dwWait-dwElp >= 4) Sleep(dwWait-dwElp-3);
// いまdwWait>dwElpなのでdwWait-dwElp>=0と考えて良い

// 95/98/NTで測定したところSleep(1);で1ms単位でスリープするのは可能
// ただし、実装系依存の可能性もあるのでSleepの精度は3ms以内と仮定

while ((timeGetTime()-lastdraw)<dwWait) ;
// ループで時間を潰す(あまり好きじゃないけど)

// これで、時間つぶし完了!

lastdraw += dwWait; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}


--------------------------------------------------------------------------------

しかし、きちっと、このようなFPS調整のための時間待ちルーチンを書いている人を見たことがない。

小数点以下をdoubleで表記するのではなく、256倍や65536倍して整数で代用するのは、常用テクなのだが、意外と知らない人が多い。もっとも、なんでもかでも1命令1クロックで実行してしまう最近のCPUではあまり意味のないことなのかも知れない。しかし、最近のプログラマは、lineやcircleをアセンブラで実装した経験が無いのか?cos,sinを65536倍した整数テーブルをいじくり回すプログラムを書かないのか?そんな人たちが3Dでぐりぐり動くゲームを作っているのか?!まったくもって驚きである。8月に恐怖の大王が来るというよりは、65536倍衝撃的なんだってば!!

6774さん:2008/08/11(月) 14:56:27
int main(int argc, char **argv){
const int count = 100;
const int * const p = &count;
const int * const * const pp = &p;
const int * const * const *ppp = &pp;
}

7774さん:2008/08/11(月) 15:15:06
>>http://jbbs.livedoor.jp/bbs/read.cgi/computer/38153/1205557370/492
が大体理解できた。
---
メタ関数::テンプレート・メタプログラミング
http://cppemb.blog17.fc2.com/blog-entry-90.html
---
のおかげ!

8774さん:2008/08/12(火) 01:31:44
JavaScript:document.body.innerHTMLのガイドライン4
http://society6.2ch.net/test/read.cgi/gline/1171265251/122
---
122 :水先案名無い人:2007/11/02(金) 12:04:48 ID:7m0B59Ki0
ちょっと趣旨違うと思うけど

①メモ帳開く

②以下の文を貼りつける

<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y()
{C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/
A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1
if(e=!e){if(f|B){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;)
Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="<br>",S+=X
[i]?"■":"_";document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script>

③html形式で保存して、起動する
---
テトリス。

9774さん:2008/08/12(火) 02:26:04
ブラウザでc言語 part1‐ニコニコ動画(夏)
http://www.nicovideo.jp/watch/sm3702138
---
codepad
http://codepad.org/
---
こんなサイトがあったのか・・・

10774さん:2008/08/15(金) 11:51:04
プログラミングキャンプの講義資料を公開します - IT戦記
http://d.hatena.ne.jp/amachang/20080814/1218677014

11774さん:2008/08/15(金) 11:51:40
>>10
正直なところ、
全体のフィールドと、あるブロックを同じ関数で描画させる方法は凄いなと思った。

12774さん:2008/08/15(金) 13:41:20
俺もゲームプログラミングを本格的に始めるべきなのか。
でも普通のプログラミングも出来ないのにどうすればいいんだああああああああああああああああああああああ

13774さん:2008/08/15(金) 22:03:25
ちょwwwwwwwwwwwwwww
----
素人がプログラミングを勉強するブログ
http://d.hatena.ne.jp/javascripter/
----
こいつ中学生wwwwwwwwwwwwww

14774さん:2008/08/15(金) 22:26:15
>>13
っ!
俺も中学生の時ちゃんとプログラミングを勉強しておかないといけなかったっ!

15774さん:2008/08/20(水) 17:35:38
>>14
取り敢えず最新の仕様を勉強してYahoo!したいと思う。
__noSuchなんとか__とか、
__proto__とか
__defineGetter__とか
__defineSetter__とか
function.next()とか頑張って覚えちゃうぞー!

16774さん:2008/08/20(水) 17:36:14
と言って、殆ど分かっているつもりなんだけれども。
配列の分割代入って面白いの?

17774さん:2008/08/20(水) 17:43:21
サブクラス化したウィンドウに対してウィンドウ毎に変数を確保する方法は直接無い。
SetWindowLongPtr()とかを使おうとしても、自分でExtraなメモリを確保していないし、元々内部で使用しているかもしれない。
だから無理である。
しかし、EditBoxに対して、Ctrl+Aを押したときに全て選択だとかはみなロジックは一緒なので、サブクラス化するためごとに関数を用意するというのもとてもソースの無駄遣いである。
だからそこらへんアセンブリ言語レベルでどうにかならないかなと思って適当に書いて、二時間ぐらいかけて上手くいった。
時間かかりすぎだろうJK。
&nbsp;が利用できるかテスト。

18774さん:2008/08/20(水) 17:45:07
void *SetProcMod(
&nbsp;&nbsp;LRESULT (CALLBACK *proc)(LPVOID, HWND, UINT, WPARAM, LPARAM),
&nbsp;&nbsp;SIZE_T bytes = 0
) const
{
&nbsp;&nbsp;static const BYTE code[] = {
&nbsp;&nbsp;&nbsp;&nbsp;0x53,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PUSH EBX
&nbsp;&nbsp;&nbsp;&nbsp;0x89, 0xE3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//MOV EBX, ESI
&nbsp;&nbsp;&nbsp;&nbsp;0x81, 0xC3, 0x04, 0x00, 0x00, 0x00,&nbsp;&nbsp;//ADD EBX, 4
&nbsp;&nbsp;&nbsp;&nbsp;0xB8, 0x00, 0x00, 0x00, 0x00,&nbsp;&nbsp;&nbsp;&nbsp;//MOV EAX, imm32
&nbsp;&nbsp;&nbsp;&nbsp;0x87, 0x03,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//XCHG EAX, [EBX]
&nbsp;&nbsp;&nbsp;&nbsp;0x5B,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//POP EBX
&nbsp;&nbsp;&nbsp;&nbsp;0x50,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PUSH EAX
&nbsp;&nbsp;&nbsp;&nbsp;0xB8, 0x00, 0x00, 0x00, 0x00,&nbsp;&nbsp;&nbsp;&nbsp;//MOV EAX, imm32
&nbsp;&nbsp;&nbsp;&nbsp;0xFF, 0xE0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//JMP EAX
&nbsp;&nbsp;};
&nbsp;&nbsp;
&nbsp;&nbsp;BYTE *p = (BYTE *)VirtualAlloc(
&nbsp;&nbsp;&nbsp;&nbsp;NULL,
&nbsp;&nbsp;&nbsp;&nbsp;sizeof(code) + sizeof(WNDPROC) + bytes,
&nbsp;&nbsp;&nbsp;&nbsp;MEM_COMMIT,
&nbsp;&nbsp;&nbsp;&nbsp;PAGE_EXECUTE_READWRITE
&nbsp;&nbsp;);
&nbsp;&nbsp;
&nbsp;&nbsp;memcpy(p, code, sizeof(code));
&nbsp;&nbsp;
&nbsp;&nbsp;*((DWORD *)(p + 10)) = (DWORD)(p + sizeof(code) + sizeof(WNDPROC));
&nbsp;&nbsp;*((DWORD *)(p + 19)) = (DWORD)proc;
&nbsp;&nbsp;*((WNDPROC *)(p + sizeof(code))) = SetProc((WNDPROC)p);
&nbsp;&nbsp;
&nbsp;&nbsp;return p + sizeof(code) + sizeof(WNDPROC);
}

19774さん:2008/08/20(水) 17:48:29
codeは雛型。
codeとWNDPROC型と指定されたバイト数のメモリを確保し、実行、読み込み、書き込みを許可する。
次に雛形をコピー。
そして、必要な情報を書き込んだ後、サブクラス化を実行する。
そして、確保されたメモリのポインタを返すと。

20774さん:2008/08/20(水) 17:51:01
こうすると、procの第一引数に確保されたメモリのポインタが入っている。
また、次に呼び出すプロシージャのアドレスは、pを渡されたアドレスだとすると。
*(((WNDPROC *)p) - 1)
で取得できるという代物だ。
此れで態々グローバル変数を利用する必要が無くなる。
メモリの管理についてはもう少し良い方法があるが、64kb程しか一回にリークしないので問題ないかと。
此れでソースが少なくてすむね!

21774さん:2008/08/20(水) 17:57:09
というか、二時間というのはバイトコードの打つ方法に時間がかかった。
Intelの資料糞読みにくい。

22774さん:2008/08/20(水) 18:00:45
何故[ESP]を直接参照する方法が無いんだ!
0x89, 0xE3, //MOV EBX, ESI

0x89, 0xE3, //MOV EBX, ESP
の間違えですた。

23774さん:2008/08/20(水) 18:01:57
[ESP]を直接参照できればもう少しソースコードを短くすることが出来るのだがなあ。
というか此れ自体も適当に入力したので、もうちょっと短く出来るのかもしれない。

24774さん:2008/08/20(水) 18:09:44
一応、返却値として、その確保されたメモリへのポインタを返しているので、
bytesに適当な値を指定したら、
*((int *)p) = 123;
とかすれば、初期状態で変数を与えることも出来るねえと。
因みに、VirtualAllocの仕様上メモリの内容は0で初期化されてます。

25774さん:2008/08/20(水) 18:10:26
と言うことで、此れをMemoPanelに利用しようかなあと。
環境依存だから動かない環境があるかなあ?

26774さん:2008/08/20(水) 18:42:44
おしゃべり総合商社「ネイリー」
http://narude531masu.blog59.fc2.com/
---
P検なんてあったなあ。
なつかしす。
今じゃ要らない資格ですね。因みに俺は四級のはず。
Wordとかエクセルは全然使わないんだけれどもwwww

27774さん:2008/08/20(水) 19:55:58
うはwww、VirtualAlloc関数滅茶苦茶メモリ勿体無いwwwww
ちゃんとメモリ管理はした方が良いようですwwwww

28774さん:2008/08/20(水) 21:58:36
operator new[]で確保したメモリは実行できることが保証されているの?
良く分からんwww

29 ◆rCEzuNnL0g:2008/08/21(木) 18:40:10
Sleipnir.APIが利用できれば、かなりスクリプト+EXEで色々と正確に出来そう。
正確というのは、違うウィンドウとかに効果を起こさないとかそんなことね。

Sleipnir.API.Handleを見ればウィンドウハンドルが分かるので、GetWindowThreadProcessId()を利用すればプロセスIDを取得することが出来る。
で、そこでOpenProcess()を利用すれば、プロセスハンドルを取得できる。
という事で、此れを利用すれば色々とウマーなことが出来るのはではなかろうかと。
VirtualAllocEx()とか使ったり、WriteProcessMemory()とか使うとウマーじゃなかろうか。
まあここら辺でも見ればいいかと。
-----
常駐プログラム隠蔽テクニック
http://ruffnex.oc.to/kenji/text/dll_inj/
-----

30 ◆rCEzuNnL0g:2008/08/21(木) 18:42:56
---
ProcessHandle_ProcessID_WindowHandle - trick-with-Wiki
http://wiki.trick-with.net/ProcessHandle_ProcessID_WindowHandle.html
---
プロセスIDとプロセスハンドルとウィンドウハンドルの件
良いサイト発見!

31 ◆rCEzuNnL0g:2008/08/21(木) 20:40:14
次の JavaScript の仕様はこうなる! ECMAScript 3.0 から 3.1 への変更点まとめ - IT戦記
http://d.hatena.ne.jp/amachang/20080821/1219302804
---
ちょwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
IEでもgetter、setter始まったなwwwwwwwwwwwwwwwwwwwwwwwwww
まだちょっと理解できていない部分があるので、これから勉強を。

32 ◆rCEzuNnL0g:2008/08/21(木) 20:43:39
__defineGetter__、__defineSetter__
で定義したGetter,Setterはfor inで列挙できるみたい。
まあ、どうでもいいことか。

33 ◆rCEzuNnL0g:2008/08/21(木) 20:47:13
MemoPanelに検索機能があったほうがウマーかなあ。

34 ◆rCEzuNnL0g:2008/08/21(木) 20:56:33
>>29
スクリプトからEXEを起動するには、
new ActiveXObject("WScript.Shell").Run()
で。
---
1.10 プログラムを実行する、ファイルやフォルダを開く(Runメソッド) - VBScript & JScript(JavaScript) Tips for WSH
http://www.happy2-island.com/vbs/cafe02/capter00110.shtml
---

35 ◆rCEzuNnL0g:2008/08/21(木) 20:58:41
最近Sleipnir関連のtwitterの動きが熱すぎるw

36 ◆rCEzuNnL0g:2008/08/21(木) 21:00:58
正直な所、キャッシュポッドパネルがspxプラグインだったのは吹いたw
sqlite3.dllも使ってみるか?

37 ◆rCEzuNnL0g:2008/08/21(木) 22:12:23
SUB ESP, 4
PUSH EAX
PUSH EBX
ADD ESP, 12
MOV EAX, imm32
POP EBX
PUSH EAX
PUSH EBX
SUB ESP, 8
POP EBX
POP EAX
JMP cd

38 ◆rCEzuNnL0g:2008/08/21(木) 22:24:12
0x81, 0xEC,&nbsp;&nbsp;&nbsp;&nbsp;0x04, 0x00, 0x00, 0x00&nbsp;&nbsp;&nbsp;&nbsp;//SUB ESP, 4
0x50,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PUSH EAX
0x53,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PUSH EBX
0x81, 0xC4, 0x0C, 0x00, 0x00, 0x00&nbsp;&nbsp;&nbsp;&nbsp;//ADD ESP, 12
0xB8, 0x00, 0x00, 0x00, 0x00,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//MOV EAX, imm32
0x5B,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//POP EBX
0x50,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PUSH EAX
0x53,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PUSH EBX
0x81, 0xEC,&nbsp;&nbsp;&nbsp;&nbsp;0x08, 0x00, 0x00, 0x00&nbsp;&nbsp;&nbsp;&nbsp;//SUB ESP, 8
0x5B,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//POP EBX
0x58,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//POP EAX
0xE9, 0x00, 0x00, 0x00, 0x00,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//JMP cd

39 ◆rCEzuNnL0g:2008/08/21(木) 22:44:01
今までは、EAXレジスタとEBXレジスタを利用して、引数を積んでいたが、
EAXレジスタの値が変わってしまっていた。
という事でEAXレジスタの内容も変わらないようにした。
それが上のアセンブリ。

40 ◆rCEzuNnL0g:2008/08/21(木) 23:18:11
取り敢えず、やりたいことはやったので、(本当はもう一つあるのだが、スクリプトで代用可能)
一部環境で起動出来ない問題を究明したい。

sqlite3.dllがエクスポートしている関数は0x64個か・・・
結構少ないなあ。

41 ◆rCEzuNnL0g:2008/08/21(木) 23:23:34
因みにFenrirLib.fxがエクスポートしているのは0x0729個。
vcl100.bplは0x1D19個。

取り敢えずfxプラグインは、FPI_CreateInstanceをエクスポートすれば良いみたい。

42 ◆rCEzuNnL0g:2008/08/21(木) 23:25:46
_FPI_CreateInstance@4
って何だ?

43 ◆rCEzuNnL0g:2008/08/21(木) 23:29:42
あ、MemoPanel.spxも
SPX_GetPluginInfo
SPX_Initialize
_SPX_GetPluginInfo@0
_SPX_Initialize@4
の四つをエクスポートしていた。
下の二つが何かが気になるなあ。

44 ◆rCEzuNnL0g:2008/08/21(木) 23:30:18
@の後は、引数の数*4だと思われ。

45 ◆rCEzuNnL0g:2008/08/21(木) 23:31:01
FPI = Fenrir Plugin Interface?

46 ◆rCEzuNnL0g:2008/08/21(木) 23:32:58
JIT Actionsも含めて全て、
FPI_CreateInstanceを呼んでいる。

47 ◆rCEzuNnL0g:2008/08/22(金) 18:43:34
レンコン=拳銃… ネット隠語検知 「犯罪」を防止 総務省がソフト開発へ:ニュース - CNET Japan
http://japan.cnet.com/news/media/story/0,2000056023,20379040,00.htm?ref=rss
---
備忘録。メモ。

48 ◆rCEzuNnL0g:2008/08/22(金) 21:04:01
これがC++のソースなんだぜ?
-----
const BYTE *p = ((BYTE *)_p - sizeof(WNDPROC) - sizeof(void *));
SetProc(*((WNDPROC *)(p + sizeof(void *))));
void * const p_code = (void *)(*((DWORD *)p));
void * const base = (void *)((DWORD)p_code & 0xFFFF0000);
SIZE_T * const used = (SIZE_T *)base;
const SIZE_T code_size = *((SIZE_T *)((BYTE *)base + sizeof(SIZE_T)));
BYTE ** const p_p = *((BYTE ***)((BYTE *)base + sizeof(SIZE_T) + sizeof(SIZE_T)));
void * const now_base = (void *)((DWORD)*p_p & 0xFFFF0000);

49 ◆rCEzuNnL0g:2008/08/23(土) 16:27:15
SPXプラグインからアクションを実行する方法を考え中。

50 ◆rCEzuNnL0g:2008/08/23(土) 17:03:16
取り敢えずFenrirLibは大量のクラスを出力しているっぽいので、メンバ変数とメンバ関数の解析を・・・

51 ◆rCEzuNnL0g:2008/08/23(土) 17:06:44
DLLの活用
http://www5a.biglobe.ne.jp/~javajava/ari/30bcc/kimitu/kimitu03.html
---
を参考にして、規則性を解読する。

52 ◆rCEzuNnL0g:2008/08/23(土) 17:12:04
-----
private:
string str;
public:
test_class();
void set_str(string &s);
void show();
-----
??0test_class@@QAE@ABV0@@Z
??0test_class@@QAE@XZ
??1test_class@@QAE@XZ
??4test_class@@QAEAAV0@ABV0@@Z
?func@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z
?set_str@test_class@@QAEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z
?show@test_class@@QAEXXZ
-----

53 ◆rCEzuNnL0g:2008/08/23(土) 17:17:21
>>52
駄目です!僕には解読できません><

最近稀に、フィードバックエージェントが出ずにSleipnirが華麗に落ちるときがあるなあ。
間違えて、閉じるを押してしまっているとは到底思えれないし。
何故だ!

54 ◆rCEzuNnL0g:2008/08/23(土) 17:34:27
取り敢えず自分でクラスをエクスポートしたDLLを作ってみた。
上手く行った。上手いもんだなあ。

55 ◆rCEzuNnL0g:2008/08/23(土) 17:38:44
VC++で作ってみた
---
序数: 0001 名前: ??0test_class@@QAE@ABV0@@Z
序数: 0002 名前: ??0test_class@@QAE@XZ
序数: 0003 名前: ??1test_class@@QAE@XZ
序数: 0004 名前: ??4test_class@@QAEAAV0@ABV0@@Z
序数: 0005 名前: ?func@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z
序数: 0006 名前: ?set_str@test_class@@QAEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z
序数: 0007 名前: ?show@test_class@@QAEXXZ
----
一緒だwww

56 ◆rCEzuNnL0g:2008/08/23(土) 17:55:05
うーん。
この情報を見ただけでは、そのクラスがメンバ変数に何を持っているのは分からないんだよなあ。
分かれば、メモリを確保して、ecxレジスタにポインタを入れて、普通に呼び出せば良いのだが・・・

57 ◆rCEzuNnL0g:2008/08/23(土) 17:56:19
??0test_class@@QAE@ABV0@@Z
??0test_class@@QAE@XZ
??1test_class@@QAE@XZ
??4test_class@@QAEAAV0@ABV0@@Z
がコントラスタなのかな?
通常は、
引数なしのコントラスタ。
コピーコントラスタ。
が作られるんだったけなあ。
もう忘れた。

58 ◆rCEzuNnL0g:2008/08/23(土) 17:57:24
だけれども、
str.match(/??[0-9]([^@]+)@@/);
RegExp.$1でクラスの名前は少なくとも取得できるなあ。

59 ◆rCEzuNnL0g:2008/08/23(土) 18:02:36
取り敢えず、手動で列挙してみる。

FActionData
FButton
FButtonEx
FButtonState
FByteArrayInputStream
FByteArrayOutputStream
FCharConv
FClientDC
FCmdUI
FColorManager2
FColorManager3
FColorManager
FComboBox
FComboEdit
FComboListBox
FCustomDialog
FCustomDialogEx
FDataInputStream
FDataOutputStream
FDropDownButton
FEdit
FFileInputStream
FFileOutputStream
FFrameSkinManager
FGZip
FGlobal
FGuiManager
FHistoryData
FHoldWnd
FHttpConnection
FImageList
FIniProfile
FMemoryDC
FMenuBar
FObject
FOptionDialogData
FOwnerDrawItem
FOwnerDrawMenu
FPaintDC
FPlugin
FPluginItem
FProgressBar
FReBar
FRotineChecker
FSearchEngine
FSearchItemCombo
FSearchItemList
FSetting
---100行目まで---

60 ◆rCEzuNnL0g:2008/08/23(土) 18:06:09
FSiSu
FSkinItem
FSmartInstallerItemBase
FSmartInstallerManager
FSpliter
FStartupRotineChecker
FStatic
FStatusBar
FStatusBarEx
FStatusBarItemData
FStdMemoryManager
FString
FStringIdManager
FThemeManager
FThemeMap
FToolBar
FToolBarButtonData
FToolBarButtonDataEx
FToolBarEx2
FToolBarEx3
FToolBarEx
FToolInfo
FToolTipCtrl
FTreeCtrl
FTreeCtrlEx2
FWaitCursor
FWebDataObjectAnalyzer
FWebDataSourceFactory
FWindowDC
FWnd
FXmlDocument
FXmlElement

61 ◆rCEzuNnL0g:2008/08/23(土) 18:07:37
$FDCT
というのがあるのだが、よくわからん・・・

62 ◆rCEzuNnL0g:2008/08/23(土) 18:08:49
取り敢えずメンバ関数も手動で列挙してみる。

63 ◆rCEzuNnL0g:2008/08/23(土) 18:18:40
?$FDCT::AboutDoc()
?$FDCT::AboutPath()
FToolTipCtrl::Activate()
FImageList::Add(,) (四つオーバーロードされている)
FCustomDialog::AddButtonInfo(,)
FCustomDialogEx::AddButtonInfo(,)
FXmlDocument::AddElement(,,,)
FSiSu::AddEntry(,,)
FCustomDialogEx::AddImageInfo(,,)
FSearchItemCombo::AddItem(,)
FSearchItemList::AddItem(,)
FIniProfile::AddKey(,,)
FCustomDialog::AddLink(,,)
FCustomDialogEx::AddLink(,,)
?$FDCT::AddMetaFileComment(,)
FOwnerDrawMenu::AddOwnerDrawSeparator(,,)
FOwnerDrawMenu::AddOwnerDrawSubMenu(,,,,)
FOwnerDrawMenu::AddOwnerDrawText(,,,)
FGuiManager::AddPreTransChain(,)
FActionData::AddRef()

体が持たないので、以下省略

64 ◆rCEzuNnL0g:2008/08/23(土) 18:22:17
一応__thiscallについて復習しておくと、
固定長の引数の場合は、スタックへ最後の引数から積み、thisポインタはecxレジスタへ。
可変長の引数の場合は、スタックへ最後の引数から積み、thisポインタは最後にスタックに積む。
で良いと思う。

65 ◆rCEzuNnL0g:2008/08/23(土) 18:22:37
マイクロソフトの資料から引用。
The __thiscall calling convention is used on member functions and is the default calling convention used by C++ member functions that do not use variable arguments. Under __thiscall, the callee cleans the stack, which is impossible for vararg functions. Arguments are pushed on the stack from right to left, with the this pointer being passed via register ECX, and not on the stack, on the x86 architecture.

66 ◆rCEzuNnL0g:2008/08/23(土) 18:26:07
variable:[形]可変の
via:[前]…を通って, …経由; …によって
さて、皆は翻訳できるかな?

67 ◆rCEzuNnL0g:2008/08/23(土) 18:28:30
convention:[名]集会, 会合, 会議, 大会; ((集合的)) (集会への)出席者[代表者]; 協定, 協約; (社会の)慣例[習], 因襲; (芸術上の)しきたり, 約束; 【コンピュータ】規約

The __thiscall calling convention is used on member functions and is the default calling convention used by C++ member functions that do not use variable arguments.
__thiscall呼び出し規約は、メンバー関数に利用され、可変長でない引数をとらないメンバー関数でデフォルトの呼び出し規約です。

68 ◆rCEzuNnL0g:2008/08/23(土) 18:32:24
Under __thiscall, the callee cleans the stack, which is impossible for vararg functions.
__thiscall呼び出し規約では、呼び出された側がスタックを片付けます、此れは引数をとる関数では重要なことです。

(なんだかwhich以下が訳しにくい。)

69 ◆rCEzuNnL0g:2008/08/23(土) 18:34:01
Arguments are pushed on the stack from right to left, with the this pointer being passed via register ECX, and not on the stack, on the x86 architecture.
x86互換機では、引数は右から左にスタックにプッシュし、thisポインタはスタックではなくECXレジスタを通して渡されます。

70 ◆rCEzuNnL0g:2008/08/23(土) 18:37:12
vararg member functions use the __cdecl calling convention.
可変長の引数をとるメンバ関数は__cdecl呼び出し規約を利用します。
All function arguments are pushed on the stack, with the this pointer placed on the stack last
全ての引数はスタックに積まれ、thisポインタは最後にスタックに詰まれます。
(訳注:__cdeclは呼び出し側がスタックを綺麗にする。引数は右から左へ積む。)

71 ◆rCEzuNnL0g:2008/08/23(土) 18:37:43
__thiscall (C++)
http://msdn.microsoft.com/ja-jp/library/ek8tkfbw(VS.80).aspx
---
詳しくはここへね。

72 ◆rCEzuNnL0g:2008/08/23(土) 19:03:36
あくまでも此れは、Microsoftのソフトだけの話。
他のコンパイラでは違う実装かもしれない。

73 ◆rCEzuNnL0g:2008/08/24(日) 09:13:13
(´・ω・`)ショボーン
昨日試したけれども、メンバー関数のアドレスが取得できない・・・
どんなに頑張っても__thiscallな関数はvoid *にすら型変換できない・・・

74 ◆rCEzuNnL0g:2008/08/24(日) 09:13:49
馬鹿野郎!

75 ◆rCEzuNnL0g:2008/08/24(日) 19:04:14
es3.1:es3.1_proposal_working_draft [ES4 Wiki]
http://wiki.ecmascript.org/doku.php?id=es3.1:es3.1_proposal_working_draft
---
後で読む。

76 ◆rCEzuNnL0g:2008/08/24(日) 19:39:16
エレメントの大きさと位置を測定する
http://msdn.microsoft.com/ja-jp/library/cc392317.aspx
---
適当なときに読む。

77 ◆rCEzuNnL0g:2008/08/25(月) 17:16:41
Firefox 3.1に搭載予定のJavaScriptエンジン「TraceMonkey」,数倍〜数十倍の高速化:ITpro
http://itpro.nikkeibp.co.jp/article/NEWS/20080825/313337/
----
Firefox 3.1 beta激しく期待。
ブランチ版は入れるのが心配なので敬遠気味。betaならば多分大丈夫。
プログラムフォルダを全て消される可能性は低いだろう(笑)。

78 ◆rCEzuNnL0g:2008/08/27(水) 12:48:28
開発者のFirefox 3:特集 - builder by ZDNet Japan
http://builder.japan.zdnet.com/sp/firefox-3-for-developer-2008/
Google,検索キーワードをリアルタイムで推測する「Google Suggest」を正式提供へ:ITpro
http://itpro.nikkeibp.co.jp/article/NEWS/20080827/313474/
---
すげーーーーー
入れてみようwwwwwwwwwwwwwwww
Canvasを頑張って練習しようwwwwwwwwwwwww
----
うpだて - みみず日記
http://d.hatena.ne.jp/sub_chon/20080827/1219808408
----
更新したよー。

79 ◆rCEzuNnL0g:2008/08/27(水) 12:56:30
Shiretoko(Firefox 3.1a)入れてみた。

80 ◆rCEzuNnL0g:2008/08/27(水) 13:12:14
どうでもいいけれども、
特権を持ったオブジェクトをWebページ側が取得できれば、いろいろなことが出来る。
まあ、此れは当たり前。
此れがISleipnirであったり、GM_XMLHttpRequestであったりするだけ。
根本は何も違わない。

81 ◆rCEzuNnL0g:2008/08/27(水) 13:17:33
JavaScriptエンジンがさらに高速化されたFirefox 3.1を一足早く試す方法 - おさんぽブログ
http://d.hatena.ne.jp/kokoromo/20080827/1219807601
を見て新しいの入れた。

82 ◆rCEzuNnL0g:2008/08/27(水) 15:28:47
Twitter / javascripter: function b_search(a,v)(func...
http://twitter.com/javascripter/statuses/899790598
---
function b_search(a,v)(function s(h,t,w)h>t?-1:(w=(h+t)>>1,v===a[w]?w:(v<a[w]?t=w-1:h=w+1,s(h,t))))(0,a.length-1)
---
よくこんなの書くなー

83 ◆rCEzuNnL0g:2008/08/27(水) 15:32:15
アクセスチャートを作ろう! Pathtraq ページチャート API と Google Chart API の合わせ技! - IT戦記
http://d.hatena.ne.jp/amachang/20080827/1219815788

84774さん:2008/08/27(水) 17:06:55
んな、馬鹿な。
なんかFenrirLib.fxを見ていたのだが、毎回ウィンドウズのバージョンを取得しているのだが。
んなもん、起動中にウィンドウズのバージョンが変わるはずが無いんだから、グローバル変数で取得しておいてキャッシュしておいた方が軽いと思うぞ。
なんか内部ではFStringというクラスを使っているっぽい。
普通にstd::stringを使ったほうが早いんじゃないの?
まあ、FirefoxとかOperaだったら独自のクラスを使っているっぽいと思うので、まあ良いか。
せっかくDLL化しているんだったら、DLLだけ更新すれば良いのにね。

85 ◆rCEzuNnL0g:2008/08/27(水) 17:09:09
OllyDbg2安定してるなあ。

間違えて上げちまった・・・

86 ◆rCEzuNnL0g:2008/08/27(水) 17:22:11
MinGW - Wikipedia
http://ja.wikipedia.org/wiki/MinGW
---
後で試す。

87 ◆rCEzuNnL0g:2008/08/27(水) 17:22:28
>>86
MinGW | Minimalist GNU for Windows
http://www.mingw.org/

88 ◆rCEzuNnL0g:2008/08/27(水) 19:28:45
Sleipnir Part203
http://pc11.2ch.net/test/read.cgi/win/1218261313/888
----
Sleipnir test3
リリース候補版。

89 ◆rCEzuNnL0g:2008/08/27(水) 21:25:52
モジラ、Firefoxプラグイン「Ubiquity」を公開--手軽なマッシュアップが可能に:ニュース - CNET Japan
http://japan.cnet.com/news/media/story/0,2000056023,20379387,00.htm?ref=rss

90 ◆rCEzuNnL0g:2008/08/27(水) 21:26:29
Twitter / javascripter
http://twitter.com/javascripter

91 ◆rCEzuNnL0g:2008/08/28(木) 17:18:40
「Winnyウイルスの被害を疑似体験」、ディアイティがツールを公開:ITpro
http://itpro.nikkeibp.co.jp/article/NEWS/20080828/313664/
外部JavaScriptの動的ロード - 0x集積蔵
http://d.hatena.ne.jp/os0x/20080827/1219815828
HTML5 の DOCTYPE 宣言って IE6 でも標準モードになるんですね - IT戦記
http://d.hatena.ne.jp/amachang/20080828/1219902321
動的ローディング雑感 - IT戦記
http://d.hatena.ne.jp/amachang/20080828/1219898838
【速報】IE8 Beta 2 で DOM オブジェクトに対して Getter / Setter を追加できるように! - IT戦記
http://d.hatena.ne.jp/amachang/20080828/1219888510

92 ◆rCEzuNnL0g:2008/08/29(金) 19:16:31
現在、FStringを研究中。
というか、コントラスタを見ればそのクラスの容量が分かるトラップwwwww
FWndは18bytesっぽい。

93 ◆rCEzuNnL0g:2008/08/29(金) 19:20:55
ん?
なんか一回実行するごとに10bytesメモリリークしていないか・・・?
俺はまだ、解析の基本が分かってません><

94 ◆rCEzuNnL0g:2008/08/29(金) 19:27:13
>>92
最初の四バイトは、virtual用かもしれないな。
アドレスが固定だから。
他の十四バイトは0で初期化されているようだ。

95 ◆rCEzuNnL0g:2008/08/29(金) 19:49:05
うわあああああああああああああああああああああああああああ
クリップボードが開きっぱなしになったああああああああああああああああああ
此れじゃあ、コピーも出来ないし、貼り付けも出来ないいいいいいいいいいい

96 ◆rCEzuNnL0g:2008/08/29(金) 19:50:21
どのウィンドウが悪い!
OllyDbg2.0を終了したら動いた!
やっぱりalpha版だけはあるなwwwwww
何がいけなかったんだろうか。

97 ◆rCEzuNnL0g:2008/08/29(金) 19:50:44
正確には、pre-alpha版だね!
早く新しいバージョンでないかな?

98 ◆rCEzuNnL0g:2008/08/29(金) 21:28:04
CPU Disasm
Address Hex dump Command Comments
41031210 /$ 56 PUSH ESI ; FenrirLib_fx.?GetText@FCmdUI@@UAGXPAPA_W@Z(guessed Arg1,Arg2)

99 ◆rCEzuNnL0g:2008/08/29(金) 21:30:03
此れを呼び出すと、アクションに渡された引数が得られるようだ。

100 ◆rCEzuNnL0g:2008/08/29(金) 21:31:55
どうでもいいけれども、なんだかクラック対策のために、DLLの出力がクラスになっている気がする。
それとも、此れは、namespaceなのかな?
(クラスだったら、呼び出しの前にecxにポインタ入れるからねえ。)

101 ◆rCEzuNnL0g:2008/08/29(金) 21:36:50
今、探しているのは、アクションを呼び出すルーチン。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板