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

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

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

452 ◆rCEzuNnL0g:2008/09/19(金) 18:33:55
絶対出来ない。
メンバ関数ポインタなんてもう嫌だ><

453 ◆rCEzuNnL0g:2008/09/19(金) 19:00:28
このアセンブリ読みたくないwww
-----
#include <iostream>

class CSuper{
public:
virtual
int
Get(){
return 0;
}
};

class CSub1 : virtual public CSuper{
public:
virtual
int
Get(){
return 1;
}
};

class CSub2 : virtual public CSuper{
public:
int
Get(){
return 2;
}
};

class CSubSub : public CSub1, public CSub2{
public:
virtual
int
Get(){
return 3;
}
};

int main(int argc, char **argv){
int (CSubSub::*func1)() = &CSuper::Get;
int (CSub1::*func2)() = (int (CSub1::*)())func1;
int (CSub2::*func3)() = (int (CSub2::*)())func1;
CSubSub c;
(c.*func1)();
(c.*func2)();
(c.*func3)();

std::cout << sizeof(func1) << std::endl;
}

454 ◆rCEzuNnL0g:2008/09/19(金) 20:34:31
MemoPanel更新した。
EditWindowExで編集したときに、編集が適用されないことがあった。
前書いた、物理の原稿が消えていることから発覚した。
いやあ、バグを見つける&作らないということは本当に難しい。

455 ◆rCEzuNnL0g:2008/09/19(金) 21:24:43
int main(int argc, char **argv){
00413C10 push ebp
00413C11 mov ebp,esp
00413C13 sub esp,154h
00413C19 push ebx
00413C1A push esi
00413C1B push edi
00413C1C lea edi,[ebp-154h]
00413C22 mov ecx,55h
00413C27 mov eax,0CCCCCCCCh
00413C2C rep stos dword ptr es:[edi]
int (CSubSub::*func1)() = &CSuper::Get;
00413C2E mov dword ptr [ebp-14Ch],offset CSuper::`vcall'{0}' (41122Bh)
00413C38 mov dword ptr [ebp-148h],0
00413C42 mov dword ptr [ebp-144h],4
00413C4C mov eax,dword ptr [ebp-14Ch]
00413C52 mov dword ptr [func1],eax
00413C55 mov ecx,dword ptr [ebp-148h]
00413C5B mov dword ptr [ebp-0Ch],ecx
00413C5E mov edx,dword ptr [ebp-144h]
00413C64 mov dword ptr [ebp-8],edx
int (CSub1::*func2)() = (int (CSub1::*)())func1;
00413C67 mov eax,dword ptr [func1]
00413C6A mov dword ptr [func2],eax
00413C6D mov ecx,dword ptr [ebp-0Ch]
00413C70 mov dword ptr [ebp-20h],ecx
00413C73 mov edx,dword ptr [ebp-8]
00413C76 mov dword ptr [ebp-1Ch],edx
int (CSub2::*func3)() = (int (CSub2::*)())func1;
00413C79 mov eax,dword ptr [func1]
00413C7C mov dword ptr [ebp-138h],eax
00413C82 mov ecx,dword ptr [ebp-8]
00413C85 neg ecx
00413C87 sbb ecx,ecx
00413C89 and ecx,4
00413C8C add ecx,0FFFFFFFCh
00413C8F add ecx,dword ptr [ebp-0Ch]
00413C92 mov dword ptr [ebp-134h],ecx
00413C98 mov edx,dword ptr [ebp-8]
00413C9B mov dword ptr [ebp-130h],edx
00413CA1 mov eax,dword ptr [ebp-138h]
00413CA7 mov dword ptr [func3],eax
00413CAA mov ecx,dword ptr [ebp-134h]
00413CB0 mov dword ptr [ebp-34h],ecx
00413CB3 mov edx,dword ptr [ebp-130h]
00413CB9 mov dword ptr [ebp-30h],edx
CSubSub c;
00413CBC push 1
00413CBE lea ecx,[c]
00413CC1 call CSubSub::CSubSub (41112Ch)
(c.*func1)();
00413CC6 mov eax,dword ptr [c]
00413CC9 add eax,dword ptr [ebp-8]
00413CCC mov ecx,dword ptr [eax]
00413CCE lea ecx,c[ecx]
00413CD2 add ecx,dword ptr [ebp-0Ch]
00413CD5 mov esi,esp
00413CD7 call dword ptr [func1]
00413CDA cmp esi,esp
00413CDC call @ILT+380(__RTC_CheckEsp) (411181h)
(c.*func2)();
00413CE1 lea eax,[c]
00413CE4 mov dword ptr [ebp-124h],eax
00413CEA mov ecx,dword ptr [ebp-124h]
00413CF0 mov edx,dword ptr [ecx]
00413CF2 mov eax,dword ptr [ebp-1Ch]
00413CF5 mov ecx,dword ptr [ebp-124h]
00413CFB add ecx,dword ptr [edx+eax]
00413CFE add ecx,dword ptr [ebp-20h]
00413D01 mov esi,esp
00413D03 call dword ptr [func2]
00413D06 cmp esi,esp
00413D08 call @ILT+380(__RTC_CheckEsp) (411181h)

456 ◆rCEzuNnL0g:2008/09/19(金) 21:24:57
(c.*func3)();
00413D0D lea eax,[c]
00413D10 test eax,eax
00413D12 je main+112h (413D22h)
00413D14 lea ecx,[c]
00413D17 add ecx,4
00413D1A mov dword ptr [ebp-154h],ecx
00413D20 jmp main+11Ch (413D2Ch)
00413D22 mov dword ptr [ebp-154h],0
00413D2C mov edx,dword ptr [ebp-154h]
00413D32 mov dword ptr [ebp-118h],edx
00413D38 mov eax,dword ptr [ebp-118h]
00413D3E mov ecx,dword ptr [eax]
00413D40 mov edx,dword ptr [ebp-30h]
00413D43 mov eax,dword ptr [ebp-118h]
00413D49 add eax,dword ptr [ecx+edx]
00413D4C add eax,dword ptr [ebp-34h]
00413D4F mov esi,esp
00413D51 mov ecx,eax
00413D53 call dword ptr [func3]
00413D56 cmp esi,esp
00413D58 call @ILT+380(__RTC_CheckEsp) (411181h)

std::cout << sizeof(func1) << std::endl;
00413D5D mov esi,esp
00413D5F mov eax,dword ptr [__imp_std::endl (4192A4h)]
00413D64 push eax
00413D65 mov edi,esp
00413D67 push 0Ch
00413D69 mov ecx,dword ptr [__imp_std::cout (41929Ch)]
00413D6F call dword ptr [MSVCP90D_NULL_THUNK_DATA (4192ACh)]
00413D75 cmp edi,esp
00413D77 call @ILT+380(__RTC_CheckEsp) (411181h)
00413D7C mov ecx,eax
00413D7E call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (4192A8h)]
00413D84 cmp esi,esp
00413D86 call @ILT+380(__RTC_CheckEsp) (411181h)
}
00413D8B xor eax,eax
00413D8D push edx
00413D8E mov ecx,ebp
00413D90 push eax
00413D91 lea edx,[ (413DB4h)]
00413D97 call @ILT+155(@_RTC_CheckStackVars@8) (4110A0h)
00413D9C pop eax
00413D9D pop edx
00413D9E pop edi
00413D9F pop esi
00413DA0 pop ebx
00413DA1 add esp,154h
00413DA7 cmp ebp,esp
00413DA9 call @ILT+380(__RTC_CheckEsp) (411181h)
00413DAE mov esp,ebp
00413DB0 pop ebp
00413DB1 ret

457 ◆rCEzuNnL0g:2008/09/19(金) 21:27:05
>>453の逆アセンブリが>>455-456

458 ◆rCEzuNnL0g:2008/09/19(金) 23:51:06
因みにDebugでコンパイルしたから、最適化は一切無し。
どうでも良いけれども、ある関数の全ての動作をインライン化したいんだったら、
マクロで定義すればいいことに最近気が付いた。

459 ◆rCEzuNnL0g:2008/09/19(金) 23:52:53
遅くなるか早くなるかはどうかとして、そっちの方がある程度の難読化に繋がると思う。
つまり、最適化=難読化だと思っている。
まあ、そうであるといえないことも多々あるのだが。

460 ◆rCEzuNnL0g:2008/09/20(土) 22:53:12
MemoPanelにまたバグが見つかったので更新した。
此れでEditWindowExのバグは殆ど潰せたと思う。
他の部分も弄くったので、バグが増えてないといいが・・・

461 ◆rCEzuNnL0g:2008/09/20(土) 22:56:51
俺的には参照で渡すのは嫌いだ。
少なくとも俺が参照で渡すならば、const T&で渡す。
関数の中で値を変える場合は、ちゃんとポインタを渡して明示したい。
まあ、&演算子がオーバーロードされていたが困るのだが。

462 ◆rCEzuNnL0g:2008/09/20(土) 22:59:38
個人的には、参照があるのは、構造体を渡すときに普通に渡すととてもオーバーヘッドが大きいから、
それを防ぐためにあるのであると思っている。
std::stringを普通に渡すととてもオーバーヘッドが大きいが参照で渡せば、
大抵ポインタがスタックに詰まれるので、非常に早い。
だから、普通にスタックに積む代替策だと思っている。
だから、不用意にポインタの内容を書き換えないためにそうしたいと思っている。

463 ◆rCEzuNnL0g:2008/09/20(土) 23:01:03
#include <iostream>

class CSuper1{
public:
virtual
int
Get1(){
return 0;
}
};

class CSuper2{
public:
virtual
int
Get2(){
return 1;
}
};

class CSub1 : virtual public CSuper1{
public:
virtual
int
Get1(){
return 2;
}
};

class CSub2 : virtual public CSuper1, virtual public CSuper2{
public:
virtual
int
Get1(){
return 3;
}
virtual
int
Get2(){
return 4;
}
};

class CSub3 : virtual public CSuper2{
public:
int
Get2(){
return 5;
}
};

class CSubSub : public CSub1, public CSub2, public CSub3{
public:
virtual
int
Get1(){
return 6;
}
virtual
int
Get2(){
return 7;
}
};

int main(int argc, char **argv){
{
int (CSubSub::*func1)() = &CSuper1::Get1;
int (CSub1::*func2)() = (int (CSub1::*)())func1;
int (CSub2::*func3)() = (int (CSub2::*)())func1;
CSubSub c;
(c.*func1)();
(c.*func2)();
(c.*func3)();
}
{
int (CSubSub::*func1)() = &CSuper2::Get2;
int (CSub2::*func2)() = (int (CSub2::*)())func1;
int (CSub3::*func3)() = (int (CSub3::*)())func1;
CSubSub c;
(c.*func1)();
(c.*func2)();
(c.*func3)();
}
}

464 ◆rCEzuNnL0g:2008/09/20(土) 23:02:09
>>463はメンバ関数ポインタ検証用に作ったソース。
意味は無い。

465 ◆rCEzuNnL0g:2008/09/20(土) 23:07:24
普通に渡すとコピーコンストラクタを呼び出さなくてはいけなくなるので、最適化が行われない。

466 ◆rCEzuNnL0g:2008/09/20(土) 23:08:13
実際の逆アセンブルはこんな感じ。最適化は一切無し。
-----
print(str);
0041167E sub esp,20h
00411681 mov ecx,esp
00411683 mov dword ptr [ebp-100h],esp
00411689 mov esi,esp
0041168B lea eax,[ebp-34h]
0041168E push eax
0041168F call dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (4192ACh)]
00411695 cmp esi,esp
00411697 call @ILT+340(__RTC_CheckEsp) (411159h)
0041169C mov dword ptr [ebp-108h],eax
004116A2 call print (411050h)
004116A7 add esp,20h
printp(&str);
004116AA lea eax,[ebp-34h]
004116AD push eax
004116AE call printp (41100Ah)
004116B3 add esp,4
printr(str);
004116B6 lea eax,[ebp-34h]
004116B9 push eax
004116BA call printr (4111EFh)
004116BF add esp,4

467 ◆rCEzuNnL0g:2008/09/20(土) 23:09:51
ポインタと参照は全く同じ。
だけれども呼び出し方が違う。
もう面倒だから、自分で調べてね。勉強をしたい人は。

468774さん:2008/09/21(日) 22:23:00
取り敢えず、メンバ関数ポインタはsizeof(int)には等しくないということだ。

469774さん:2008/09/22(月) 23:31:31
今日はプログラミングについて何も研究しなかった。

470 ◆rCEzuNnL0g:2008/09/22(月) 23:50:56
さて、今からPEヘッダについて勉強するか

471 ◆rCEzuNnL0g:2008/09/23(火) 00:32:37
今度時間があったら、バイナリエディタでEXEを打ってみたい。
というか、世界最小のEXEを作りたかったりする。
一筋縄ではいかなさそうだが、面白そう。

472 ◆rCEzuNnL0g:2008/09/23(火) 00:35:34
アセンブラとPEフォーマットとマシン語の注入
http://ruffnex.oc.to/kenji/text/exe_inj/

473 ◆rCEzuNnL0g:2008/09/23(火) 00:37:54
>>472
ずらしたソースに、他のセクションへの相対ジャンプ命令があったら、不味いんじゃないかなと思う。
だけれども、全体をずらせばいいか。
.dataが最初にあれば、それごと全体を倍数倍だけずらして、コードを最初に入れて、最初にjmpすればいい。
という事で、今度作ってみよう。出来るならばね。

474 ◆rCEzuNnL0g:2008/09/23(火) 00:53:46
IOIの問題難しすぎ。
数学の問題なんだけれども、難しい。
という事で、一番最初の問題は解けるけれども、他は分かりませんということです。

475 ◆rCEzuNnL0g:2008/09/23(火) 13:20:30
#include <iostream>
#include <string>
#include <cstdlib>
#include <clocale>

std::wstring GetWStr(const char *str, const char *loc = "japanese"){
size_t size = std::mbstowcs(NULL, str, 0) + 1;

wchar_t *wc = new wchar_t[size];

std::mbstowcs(wc, str, size);

std::wstring wstr(wc);
delete wc;

std::setlocale(LC_ALL, loc);

return wstr;
}

std::wstring GetWStr(std::string str, const char *loc = "japanese"){
return GetWStr(str.c_str(), loc);
}

int main(int argc, char **argv){
std::wcout << GetWStr("testtest").c_str() << std::endl;
}

476 ◆rCEzuNnL0g:2008/09/24(水) 20:05:14
Brainfuckを実装してみた。まあ「,」は実装していないけれども。
-----
#include <iostream>
#include <string>

int main(int argc, char **argv){
static char test[10000];
register unsigned int ptr = 0;
memset(test, 0, sizeof(test));

std::wstring wstr;
std::getline(std::wcin, wstr);

for(unsigned int c = 0, size = wstr.length(); c < size; c++){
switch(wstr[c]){
case L'>': ptr++; break;
case L'<': ptr--; break;
case L'+': test[ptr]++; break;
case L'-': test[ptr]--; break;
case L'.': std::cout << test[ptr] << std::flush; break;
case L',': break; //TODO:
case L'[': if(!test[ptr]){while(wstr[++c] != L']');} break;
case L']': if(test[ptr]){c--; while(wstr[c--] != L'[');} break;
}
}
}

477 ◆rCEzuNnL0g:2008/09/24(水) 20:15:01
うまくうごいたー。
-----
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Owner>"C:\Documents and Settings\Owner\My Documents\Vi
sual Studio 2008\Projects\test_test\Release\test_test.exe"
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++
++++++.--------.+++.------.--------.>+.
Hello, world!
C:\Documents and Settings\Owner>

478 ◆rCEzuNnL0g:2008/09/24(水) 20:36:04
BrainCrashを実装してみた。あんまり代わってない。
-----
BrainCrash
http://cfs.maxn.jp/neta/BrainCrash.php
-----
#include <iostream>
#include <string>

int main(int argc, char **argv){
static unsigned char test[10000];
register unsigned int ptr = 0;
memset(test, 0, sizeof(test));
strcpy((char *)test, "Hello, world!");

std::wstring wstr;
std::getline(std::wcin, wstr);

for(unsigned int c = 0, size = wstr.length(); c < size; c++){
switch(wstr[c]){
case L'>': ptr++; break;
case L'<': if(ptr) ptr--; break;
case L'+': test[ptr]++; break;
case L'-': test[ptr]--; break;
case L'.': std::cout << test[ptr] << std::flush; break;
case L',': break; //TODO:
case L'[': if(!test[ptr]){while(wstr[++c] != L']');} break;
case L']': if(test[ptr]){c--; while(wstr[c--] != L'[');} break;
case L'|': test[ptr + 1] |= test[ptr]; ptr++; break;
case L'&': test[ptr + 1] &= test[ptr]; ptr++; break;
case L'~': test[ptr] = ~test[ptr];
case L'^': test[ptr + 1] ^= test[ptr]; ptr++; break;
}
}

while(test[ptr]){
std::cout << test[ptr] << std::flush;
ptr++;
}
}

479 ◆rCEzuNnL0g:2008/09/24(水) 20:41:54
MemoPanelにBrainfuckの機能を実装しよう!

480 ◆rCEzuNnL0g:2008/09/24(水) 21:14:59
あ、
BrainFuckもCrashも仕様どおりじゃないじゃん。
対応した括弧まで戻らなければいけないから此れじゃあ駄目ですね。
書き直さないと。
だけれども今日は早く寝る。

481 ◆rCEzuNnL0g:2008/09/24(水) 21:33:21
戻るときに]の数を数える。[についたら一つ減算して0の時に止まる。
また逆も然りだが、そういうことか。

482 ◆rCEzuNnL0g:2008/09/24(水) 21:33:43
東方むずい><

483 ◆rCEzuNnL0g:2008/09/25(木) 21:44:13
完全な実装にした。ついでにoperator[]は使わないようにした。
-----
#include <iostream>
#include <string>

int main(int argc, char **argv){
std::wstring wstr;
std::getline(std::wcin, wstr);
static unsigned char data[100000];
memset(data, 0, sizeof(data));
const wchar_t *pstr = wstr.c_str();
unsigned int ptr = 0, c = 0;
unsigned int length = wstr.length();

for(; c < length; c++){
switch(pstr[c]){
case L'>': ptr++; break;
case L'<': if(ptr) ptr--; break;
case L'+': data[ptr]++; break;
case L'-': data[ptr]--; break;
case L'.': std::cout << data[ptr] << std::flush; break;
case L'[':
if(!data[ptr]){
unsigned int m = 0;
while(1){
switch(pstr[++c]){
case L'[': m++; break;
case L']': if(!m--) goto out1;
}
}
out1:;
} break;
case L']':
if(data[ptr]){
unsigned int m = 0;
while(1){
switch(pstr[--c]){
case L'[': if(!m--) goto out2;
case L']': m++; break;
}
}
out2:;
} break;
case L',': break; //TODO:
}
}
}

484 ◆rCEzuNnL0g:2008/09/25(木) 22:35:31
あれ。
とまるしwwwwww

485 ◆rCEzuNnL0g:2008/09/26(金) 21:51:30
兄からデバッグを頼まれたのだが、全く分からん。
ちゃんとHTMLには反映されているのだが・・・

486 ◆rCEzuNnL0g:2008/09/26(金) 23:09:27
yui.innerHTML = yui.innerHTML;
とやると、ちゃんと表示された!

これはバグなのか・・・

487 ◆rCEzuNnL0g:2008/09/27(土) 16:07:44
他の実行ファイルに感染するEXEファイルでも作ってみようかと勝手に思っている。
取り敢えず、NASMの使い方を勉強する。多分。
でも眠いから今は寝る。

488 ◆rCEzuNnL0g:2008/09/27(土) 18:12:46
えっと、
寝るといってOS自作入門を読んで、逆に眠気が増えた。
でも作るのも面白そう。
ソース上での最適化の技術も面白いし、なんだかアセンブリ言語が書きたくなる本である。
取り敢えず、全部読み終わったので、CDを使ってそのOSで遊びたい。

それにしても
gccとかNASMとか勉強したい。
ついでにコマンドラインも本格的に使えるようになりたい。
Linuxコマンドもね。

489 ◆rCEzuNnL0g:2008/09/27(土) 23:27:19
Linuxコマンド
http://cyberam.dip.jp/linux_command/command/com_main.html
viを使い倒そう
http://www.linux.or.jp/JF/JFdocs/vi-user-usage.html

490 ◆rCEzuNnL0g:2008/09/28(日) 14:18:47
#include <iostream>
#include <string>
#include <sstream>

bool Brainfuck(std::basic_istream<wchar_t> &s, std::basic_ostream<char> &out, std::basic_istream<char> &in){
std::wstring wstr;
s >> wstr;

static unsigned char data[100000];
memset(data, 0, sizeof(data));
const wchar_t *pstr = wstr.c_str();
unsigned int ptr = 0, c = 0;
unsigned int length = wstr.length();

for(; c < length; c++){
switch(pstr[c]){
case L'>': ptr++; break;
case L'<': if(ptr) ptr--; break;
case L'+': data[ptr]++; break;
case L'-': data[ptr]--; break;
case L'.': out << data[ptr] << std::flush; break;
case L'[':
if(!data[ptr]){
unsigned int m = 0;
while(1){
switch(pstr[++c]){
case L'[': m++; break;
case L']': if(!m--) goto out1;
}
}
out1:;
} break;
case L']':
if(data[ptr]){
unsigned int m = 0;
while(1){
switch(pstr[--c]){
case L'[': if(!m--) goto out2;
case L']': m++; break;
}
}
out2:;
} break;
case L',': break; //TODO:
}
}

return true;
}

int main(int argc, char **argv){
std::wstring wstr;
while(1){
std::wstring buff;
std::getline(std::wcin, buff);
if(buff == L"end") break;
wstr += buff;
}
std::basic_istringstream<wchar_t> buff(wstr);
Brainfuck(buff, std::cout, std::cin);
}

491774さん:2008/09/28(日) 15:58:37
CreateProcess 関数
http://msdn.microsoft.com/ja-jp/library/cc429066.aspx
---
>>CreateProcess 関数は、新しいプログラムを実行するために使います。WinExec 関数や LoadModule 関数も利用できますが、これらは内部で CreateProcess 関数を呼び出す形で実装されています。
-----
な、なんだってー!

492774さん:2008/09/28(日) 16:02:40
あ。
LoadModuleとLoadLibraryを間違えていたwwww

493774さん:2008/09/28(日) 16:51:19
exit関数は内部でExitProcessを読み出しているんだなあ。
予想通り過ぎてつまらない。

494774さん:2008/09/28(日) 17:14:41
ホワイトハッカー道場:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070927/283156/?ST=csirt

495774さん:2008/09/30(火) 20:28:06 ID:CENbthlg0
本当の最近のSleipnirの更新はしょぼいので、もうちょっと頑張ってほしい。
ユーザーが楽しくない。

496774さん:2008/10/02(木) 19:40:12 ID:CENbthlg0
RFC1321のソース読んでた。
分からん。

497774さん:2008/10/02(木) 19:59:12 ID:CENbthlg0
なるほど。
MDInit

MD_CTX context;
を初期化。
MDUpdate (&context, buffer, len);
で、contextを更新。
で内部では、必要な分contextの中に溜まったら、実際に演算を行う。
それよりも少なかったら、バッファに溜める。
変換する文字列はbufferに、lenにはその長さ。
文字列とは限らないので、必要なのである。
で、最後に
MDFinal (digest, &context);
として、バッファに溜まった分と、その他の処理を行って、結果を(ここでは)digestに格納していると。
おおすげえ、此れならばワーキングメモリーはほぼバッファの分だけ。
他には今までに処理を行った文字数(64bitとMD5で決められている)の分だけであるw
すごい。此れがプロの犯行という奴か。

498774さん:2008/10/02(木) 20:21:09 ID:CENbthlg0
と、言うことで、此れを参考にしながら書いてみる。
まあ、殆どそのままコピペになりそうだけれどもw

499774さん:2008/10/02(木) 20:28:04 ID:CENbthlg0
おお、すげえええええ。
ちゃんとrol命令に最適化されている・・・

500774さん:2008/10/02(木) 20:43:14 ID:CENbthlg0
やっぱり時間があったときにしよう・・・

501774さん:2008/10/02(木) 21:35:06 ID:CENbthlg0
Amazon.co.jp: 実例で学ぶゲーム3D数学: Fletcher Dunn, Ian Parberry, 松田 晃一: 本
http://www.amazon.co.jp/exec/obidos/ASIN/4873113776/

502774さん:2008/10/02(木) 21:38:46 ID:CENbthlg0
map、filterなどを使う時の便利な関数(__noSuchMethod__) - 素人がプログラミングを勉強するブログ
http://d.hatena.ne.jp/javascripter/20081002/1222940338
----
bind

503774さん:2008/10/02(木) 21:40:04 ID:CENbthlg0
明後日ぐらいにはWizerd Bibleでるかな。

504774さん:2008/10/02(木) 21:40:40 ID:CENbthlg0
Wizard Bibleだた。。。

505774さん:2008/10/02(木) 23:41:43 ID:CENbthlg0
こんな風にすれば、百分の一度(degree)刻みで、sin/cosを
1/2^32の精度で得られるねえと。
-----
#include <iostream>
#include <cmath>

#define PI 3.141592653589793238462643383279

int main(int argc, char **argv){
unsigned int sinm[9000] = {0};
for(int i = 0; i < 9000; ++i){
sinm[i] = (int)(sin(((double)i / 100) / 180 * PI) * 0xFFFFFFFF);
}

unsigned int cosm[9000] = {0};
for(int i = 0; i < 9000; ++i){
cosm[i] = (unsigned int)(cos(((double)i / 100) / 180 * PI) * 0xFFFFFFFF);
}
}

506774さん:2008/10/02(木) 23:49:09 ID:CENbthlg0
少なくとも10^-9ぐらいの精度はあるようだ。
間違いなくこんな精密である必要性は無い。
こっちのソースの方が更にいいかな
-----
#include <iostream>
#include <cmath>

#define PI 3.141592653589793238462643383279

int main(int argc, char **argv){
unsigned int sinm[9000] = {0};
for(int i = 0; i < 9000; ++i){
sinm[i] = (unsigned int)(sin(((double)i / 100) / 180 * PI) * 0xFFFFFFFFU);
}

unsigned int cosm[9000] = {0};
for(int i = 0; i < 9000; ++i){
cosm[i] = (unsigned int)(cos(((double)i / 100) / 180 * PI) * 0xFFFFFFFFU);
}
}

507774さん:2008/10/02(木) 23:51:29 ID:CENbthlg0
こっちだと1/2^64の精度。
だけれども、ここまで行くとlong doubleの精度が追いついてない。
-----
#include <iostream>
#include <cmath>

#define PI 3.141592653589793238462643383279

int main(int argc, char **argv){
unsigned __int64 sinm[9000] = {0};
for(int i = 0; i < 9000; ++i){
sinm[i] = (unsigned __int64)(sin(((long double)i / 100) / 180 * PI) * 0xFFFFFFFFFFFFFFFFU);
}

unsigned __int64 cosm[9000] = {0};
for(int i = 0; i < 9000; ++i){
cosm[i] = (unsigned __int64)(cos(((long double)i / 100) / 180 * PI) * 0xFFFFFFFFFFFFFFFFU);
}
}

508774さん:2008/10/02(木) 23:53:33 ID:CENbthlg0
理論上10^-19ぐらいの精度があるようです。
どんな綿密なゲーム作る気だよwwwww

509774さん:2008/10/02(木) 23:56:11 ID:CENbthlg0
C++でシューティングゲーム、特に綺麗に弾を動かしたいんだったら、
起動時点の初期化ルーチンでarctanのマップを作っておいたほうが良いかもしれない。
sin/cosも良く使うから、それもあったほうが良いかもしれない。
tanは要らないと思う。

510774さん:2008/10/03(金) 00:02:02 ID:CENbthlg0
それと、普通に幾何学の中学ぐらいまでの知識は必須らしい。
まあ、三平方とか押さえておけば良いかと。
俺が思うに、全ての座標は2^16しておくと良いと思う。
だけれども出力の度に2^-16は手間かなあ・・・
だけれどもdoubleとかそのままで計算するよりかは早いと思うからお勧め。
二乗しても多分オーバーフローはしないと思う。

511774さん:2008/10/03(金) 00:04:31 ID:CENbthlg0
と、思ったら普通にしやがる。
まあ、2^5倍でも0.05以上の精度があるから、大丈夫だと思うけれども。
此れならば800px画面とってもオーバーフローしないね!

512774さん:2008/10/03(金) 00:11:09 ID:CENbthlg0
二乗するのは何故かって?
円形の当たり判定を持つ弾と自分の当たり判定には、ピタゴラスの定理しかないだろ。
ということです。
if(x^2 + y^2 < (自機の半径 + 弾の半径)^2){当たった!}
かな。
だけれどもx^2+y^2はオーバーフローするかもしれないので、右辺に移項したほうが良いかも。
もっと良い判別方法もあるのかな?
まあ、それより前に、かすり判定もしなきゃいけないけれども、右辺に適当な値を足せば良いと思う。

513774さん:2008/10/03(金) 17:56:45 ID:CENbthlg0
JavaScript と SVG で swf ファイルを再生する JSplash が凄すぎる件について - IT戦記
http://d.hatena.ne.jp/amachang/20081003/1223006976
-----
すげーなー。すげーなー。

514774さん:2008/10/03(金) 23:19:05 ID:CENbthlg0
どうでもいいけれども、
Cだったら何も起きないだろうと思うことでも、C++やJavaScript+DOMだったらあったりする。
それが仕様というものだ。

515774さん:2008/10/03(金) 23:22:55 ID:CENbthlg0
C++は、演算子のオーバーロードが可能である。
だから、
Class c;
c = c;
とか言う代入でも、副作用が発生する可能性がある。
JavaScript+DOMだったら、
a.href = a.href;
というのが、とても意味がある場合がある。
まあ、ここまで来ると、ハックというレベルになるのだろうw

516774さん:2008/10/03(金) 23:43:24 ID:CENbthlg0
今日のJOI:JOI2006年模擬試験1 問題1@C++(88) - 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力
http://d.hatena.ne.jp/qnighy/20081003/1223038024
今日のJOI:JOI2006年模擬試験1 問題2@C++(87) - 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力
http://d.hatena.ne.jp/qnighy/20081003/1223039382
今日のJOI:JOI2006年模擬試験1 問題3@C++(86) - 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力
http://d.hatena.ne.jp/qnighy/20081003/1223041517

517774さん:2008/10/03(金) 23:54:51 ID:CENbthlg0
バーコードと二次元コードの知識
http://www.phoenix-denshi.co.jp/page/series.htm

518774さん:2008/10/03(金) 23:56:03 ID:CENbthlg0
QRコード - Wikipedia
http://ja.wikipedia.org/wiki/QR%E3%82%B3%E3%83%BC%E3%83%89

519774さん:2008/10/03(金) 23:58:19 ID:CENbthlg0
日本工業標準調査会:データベース-JIS詳細表示
http://www.jisc.go.jp/app/pager?id=110947
-----
QRコードの規格

520774さん:2008/10/04(土) 00:00:02 ID:CENbthlg0
>誤り訂正レベル (Error Correction Level)
>QRコードに汚れなどがあっても正確に読み取れるように、読み取り不能や読み取り間違いのモジュールを 修正するために付けられる誤り訂正語のデータ語に対する割合。下記の4レベルがある。
> レベルL - コード語の約7%が復元可能
> レベルM - コード語の約15%が復元可能
> レベルQ - コード語の約25%が復元可能
> レベルH - コード語の約30%が復元可能
レベルを高くして、適当なロゴマークとかを入れればQRコードにロゴマークが入れれるね。

521774さん:2008/10/04(土) 00:01:59 ID:CENbthlg0
携帯で確実に読み込めるのは、バージョン10までらしい。

522774さん:2008/10/04(土) 01:20:39 ID:CENbthlg0
Flash不要!JavaScriptで派手なWebデザイン
http://ascii.jp/elem/000/000/176/176751/

523774さん:2008/10/04(土) 01:45:01 ID:CENbthlg0
ニコニコ動画の、無限にマイリストガ拡張できる奴があるけれども、あれは簡単じゃん。
データベースの書式は、evalするだけでデータが取得できるようになっているので、
小学生でも弄くれると思うよ。
まあ、小学生でもアセンブリを操ることも出来るだろうから。
本当にそんな風にちゃんと使える奴は居るのか?

524774さん:2008/10/04(土) 01:52:39 ID:CENbthlg0
Firefox4ではXPCOMを使わないとか。
XPCOMはクロスプラットホームクラスオブジェクトモデルだったかな?

525774さん:2008/10/04(土) 18:29:52 ID:CENbthlg0
WinAsm Studio, The Assembly IDE - Free Downloads, Source Code
http://www.winasm.net/

526774さん:2008/10/04(土) 18:31:16 ID:CENbthlg0
目次
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
-----
PEヘッダ関連

527774さん:2008/10/04(土) 18:35:26 ID:CENbthlg0
特集:Windows 9x or Windows 2000 ?
http://www.atmarkit.co.jp/fwin2k/special/win9xorwin2k/

528774さん:2008/10/04(土) 21:14:19 ID:CENbthlg0
ん?
LoadLibraryでEXEを読み込むと、IATが初期化されない?

529774さん:2008/10/05(日) 18:57:19 ID:CENbthlg0
digital hole ≫ Blog Archive ≫ Sleipnirの検索ボックスのホイール動作を無効化
http://mofmof.nsf.tc/soft/?p=122

530774さん:2008/10/05(日) 22:00:49 ID:CENbthlg0
俺のポータブルハードディスク内にあるSleipnirでRSSを購読した後終了すると、保存動作が行われるので終了がとてつもなく遅い。
で、俺はもう一つSleipnirをパソコンに入れている。
でも、違うSleipnirでも他のSleipnirが終了中には起動できない。
此れは困る。
という事で、改造した。説明が難しいので省略ですが・・・

531774さん:2008/10/05(日) 22:25:05 ID:CENbthlg0
Sleipnir.ips
50 41 54 43 48 0D 58 27 00 08 67 EB 4B 8B 84 24 F4 01 0D 58 30 00 3B 00 56 C6 00 01 57 33 C0 8D 74 24 0C E8 D0 AA FB FF 8B C6 E8 59 A4 FB FF 84 C0 5E 8D 4C 24 04 75 0E E8 31 80 F6 FF 83 F8 02 8D 4C 24 04 75 11 E8 0D AA FB FF 32 C0 5F 81 C4 EC 01 0D 58 6C 00 1E 00 C2 04 00 E8 FC A9 FB FF 57 FF 15 60 18 40 00 57 FF 15 5C 18 40 00 B0 01 5F 81 C4 EC 01 0D 58 8B 00 04 00 C2 04 00 45 4F 46

532774さん:2008/10/05(日) 22:27:29 ID:CENbthlg0
>>531は他のSleipnirが終了処理中でも起動するようにするパッチ。
Unicode版じゃないと動きません。

533774さん:2008/10/05(日) 23:32:14 ID:CENbthlg0
取り敢えず、サイドバーにニコニコ動画の動画を表示させれるようにしてみた。

534774さん:2008/10/06(月) 01:03:45 ID:CENbthlg0
Nicovideo.MiniPlayerオブジェクトさえ手に入れば何でも出来るな。
mp.variables["fv_autoplay"] = 1;
とすれば、自動再生が出来るね!

535774さん:2008/10/06(月) 01:08:32 ID:CENbthlg0
主要部分のソースはこれくらい。
-----
function main(){
s = w.sleipnir;
init_nv(); //initialize window.Nicovideo
override_nv(); //override window.Nicovideo.MiniPlayer.prototype.write

var mp = GetMiniPlayer("sm2959233");

mp.variables["fv_autoplay"] = 1;

var div = d.createElement("div");
div.innerHTML = mp.getHTML();
d.getElementsByTagName("body").item(0).appendChild(div);

var ob = d.getElementsByTagName("object").item(0);

}

function GetMiniPlayer(id){
var http = s.CreateObject("MSXML2.ServerXMLHTTP");
http.open("GET", ["http://ext.nicovideo.jp/thumb_watch/&quot;, id].join(""), false);
http.setRequestHeader("Referer", "http://www.nicovideo.jp/&quot;);
http.send(null);

var aod = s.CreateObject("ADODB.Stream");
aod.Type = 1; //adTypeBinary == 1, adTypeText == 2
aod.Open();
aod.Write(http.responseBody);
aod.Position = 0;
aod.Type = 2;
aod.Charset = "shift_jis";

var t = aod.ReadText();

//aod.Savetofile("C:\\Documents and Settings\\Owner\\デスクトップ\\test__.txt", 2); //adSaveCreateNotExist == 1, adSaveCreateOverWrite == 2

aod.Close();
http = null;
aod = null;

w.eval(["(function(){", t, "})();"].join(""));

return g_mp;
}

function override_nv(){
var old_write = Nicovideo.MiniPlayer.prototype.write;
Nicovideo.MiniPlayer.prototype.write = function(){
g_mp = this;
this.write = old_write;
}
}

536774さん:2008/10/06(月) 01:23:40 ID:CENbthlg0
//Nicovideo.MiniPlayer::variablesの設定について
//fv_autoplay : false == 自動再生しない, true == する
//fv_no_logo : false == 上に出るニコニコ動画のロゴを表示する, ture == しない
//fv_no_link : false == 画面をクリックすると動画のページに飛ぶ, true == 飛ばない
//fv_new_window : false == 動画に飛ぶときの推移ウィンドウが_top, ture == _blank
//fv_watch_ref : 不明
//他は下のほうの設定で分かる

537774さん:2008/10/06(月) 01:25:57 ID:CENbthlg0
正直、ここまで設定を用意しておいてくれるなんて、ニコニコ動画の中の人って優しすぎるだろ・・・

538774さん:2008/10/06(月) 01:36:38 ID:CENbthlg0
取り敢えず、Sleipnirの左側のパネルで、色々と無限マイリストとかの管理がしたかったりする。
特に意味は無い。

539774さん:2008/10/06(月) 20:42:17 ID:CENbthlg0
掲示板用アップローダー - sub_chon_uljp00050.png ダウンロード
http://www6.uploader.jp/dl/sub_chon/sub_chon_uljp00050.png.html
-----
取り敢えず、他のウィンドウに動画を表示させることは出来るようになりました。
自動再生もします。
swfを逆コンパイルして解析した。
でその結果が、>>536である。
まあ、上の画像のように表示させてみたが、特に意味は無い。

なんだか文字化けするのが気になる・・・

540774さん:2008/10/06(月) 20:43:44 ID:CENbthlg0
ソースのほうは、完成したら載せます。
まあ、>>535が全てなんだけれども。

541774さん:2008/10/07(火) 16:53:19 ID:CENbthlg0
mylist[0].id = sm1433582
mylist[0].v = false
mylist[0].t = ニコニコ動画の創り方 - 戀塚昭彦さん
mylist[0].c =
mylist[0].tags =
mylist[0].reg = Thu Apr 3 20:28:05 UTC+0900 2008
mylist[1].id = sm2795744
mylist[1].v = false
mylist[1].t = 避暑地
mylist[1].c =
mylist[1].tags =
mylist[1].reg = Thu Apr 3 20:30:44 UTC+0900 2008
mylist[2].id = sm2398881
mylist[2].v = false
mylist[2].t = 20Hz〜20kHz 可聴域の音を発生中!
mylist[2].c =
mylist[2].tags =
mylist[2].reg = Thu Apr 3 20:32:13 UTC+0900 2008

542774さん:2008/10/07(火) 18:00:20 ID:CENbthlg0
ちょっと作ったら遊ぶ。
それが、俺のプログラミング。

543774さん:2008/10/07(火) 18:01:58 ID:CENbthlg0
再生用のウィンドウは複数出ないほうが良いよね・・・
出すならば自動再生は無いほうが良い。
そこらへんの仕様を固めてからちゃんと作りこむ。

動画の表示の大きさも指定できると尚良いと思っている。

544774さん:2008/10/07(火) 18:04:10 ID:CENbthlg0
誰かそこらへんの仕様を考えてー
まあ、ちゃんと作るかわからないが。
取り敢えず、HTMLファイルでどんな感じのHTMLを打ち出すかを決めてから、JavaScriptの製作に取り掛かったほうが良いかな。

545774さん:2008/10/07(火) 20:59:49 ID:CENbthlg0
JOI2006年模擬試験2 問題1@C++(65) - 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力
http://d.hatena.ne.jp/qnighy/20081006/1223296283
JOI2006模擬試験2 問題2@C++(58) - 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力
http://d.hatena.ne.jp/qnighy/20081007/1223375095

546774さん:2008/10/08(水) 16:49:28 ID:CENbthlg0
Black Hat Japan 2008:ブラックハットジャパン2008
http://www.blackhat.com/html/bh-japan-08/brief-bh-jp-08-speakers.html#Aiko
--
>愛甲健二
>ネットエージェント株式会社 取締役。
-----
取締役wwww

547774さん:2008/10/08(水) 21:57:59 ID:CENbthlg0
スピードダイアルで、ポップアップが出るのだが、
あれ、どうやって消しているのかなあと。
だって、他の場所を押すと消えるからあれの実現方法が分からない。

548774さん:2008/10/09(木) 19:47:46 ID:CENbthlg0
うーん、
何だか、上手くいかない。
CSSは適用されているのに、文字の大きさがおかしい。

549774さん:2008/10/09(木) 20:02:41 ID:CENbthlg0
右クリックのメニューでここまで苦戦するとは・・・

550774さん:2008/10/09(木) 20:35:23 ID:CENbthlg0
取り敢えず、今日は早く寝て明日の朝、早くから勉強するよ!

551774さん:2008/10/10(金) 04:01:43 ID:CENbthlg0
今朝だから、勉強してるよ!


新着レスの表示


名前: E-mail(省略可)

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

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

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

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