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

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

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

1839 ◆adhRKFl5jU:2009/04/23(木) 20:17:45
ん?
俺の目が悪いのか良く分からないが、0x84でXORしているだけのような?

1840 ◆adhRKFl5jU:2009/04/24(金) 19:04:00
var fso = new ActiveXObject("Scripting.FileSystemObject");

var data = fso.OpenTextFile("data.txt");

while(!data.AtEndOfLine){
var buff = data.ReadLine();
buff.match(/^([^:]+)\s?:(.+)(\.[^.]+)$/);
var from = RegExp.$2 + RegExp.$3, to = "ひぐらしのなく頃に BGM\\" + RegExp.$1 + RegExp.$3.toLowerCase();

fso.CopyFile(from, to);
var file = fso.GetFile(to);
file.Attributes = 0;
}

1841 ◆adhRKFl5jU:2009/04/24(金) 19:04:27
Thanks:WAV\LP\T1.MP3
iru :WAV\LP\IRU.MP3
風車小屋の少年:WAV\LP\Cafe.mp3
d_p_by:WAV\LP\z2_hig3.mp3
What_is_wished:WAV\LP\z2_hig2.mp3
陰(かげ):WAV\LP\demo(48kHz).mp3
Spring_Step :WAV\LP\Mion.mp3
D_Network :WAV\LP\4.mp3
Baby's_Walk :WAV\LP\Rika.mp3
you(M.Box) :WAV\LP\OMAKE2.MP3
古−いにしえ−:WAV\LP\Nazo.mp3
ひぐらしの声:WAV\LP\higurashi.mp3
Soul_scour:WAV\LP\Soul_scour.mp3
違和感の発芽:WAV\LP\IWAKANNNOHATUGA.wav
d_paranoia:WAV\LP\depressive paranoia(心象音楽系).mp3
soak:WAV\LP\z2_hig1.mp3
見えぬ未来:WAV\LP\DEADEND.MP3
狂気への回廊:WAV\LP\getting_mad.mp3
狂気:WAV\LP\hig_sample_kyouki.mp3
祝祭:WAV\LP\higurashi_soundscape.mp3.mp3
Solitude:WAV\LP\Hgrs01.mp3
Confession:WAV\LP\T2.MP3
you :WAV\LP\You.mp3
d_p_by(celesta) :WAV\LP\03_CELE.MP3
スタコラサッサ:WAV\LP\3.mp3
見えない何かに怯える夜:WAV\LP\見えない何かに怯える夜.mp3
Amber :WAV\LP\amber.mp3
Bellflower:WAV\LP\bellflower.mp3
Frozen_Memories :WAV\LP\hgrs_03.mp3
feel:WAV\LP\FEEL.MP3
Birth & death :WAV\LP\Birth_and_death.mp3
Sheep counts:WAV\LP\Sheep counts.mp3
鬱:WAV\LP\higurashi(Utu).mp3
Cradle_song :WAV\LP\Cradle song.mp3
pros:WAV\LP\PROS.MP3
空夢:WAV\LP\SORA-YUME-.mp3
彷徨いの言葉は天に導かれ:WAV\LP\彷徨いの言葉は天に導かれ.mp3
Z・E・R・O:WAV\LP\zero.mp3
−鼓動−:WAV\LP\It moves.mp3
−胎動−:WAV\LP\instict.mp3
r_of_can:WAV\LP\r of can.mp3
Bigbear :WAV\LP\bigbear.mp3
Fearlessness:WAV\LP\Fearlessnessl_E.mp3
パリの午後:WAV\LP\1.MP3
Gray:WAV\LP\Gray_2.mp3
白霧の頂:WAV\LP\白霧の頂〜Blanc_pur〜Ver.β.mp3
C-examination :WAV\LP\omake_01.mp3
一重:WAV\LP\hitoe_2.mp3
conviction:WAV\LP\liveシーン音楽.mp3
LIVE:WAV\LP\LIVE_2.mp3
虚:WAV\LP\Typewriter.mp3
R_disaster:WAV\LP\chants90-AHH.mp3
月<惨⇔賛>歌:WAV\LP\月(惨⇔賛)歌.mp3
そら〜(piano) :WAV\LP\sora_no_mukou_201Ver2.mp3
years :WAV\LP\years_Ver2.mp3
door:WAV\LP\door.mp3
being :WAV\LP\tuika01_Ver3.mp3
rain:WAV\LP\instict2.mp3
ふたりひとり:WAV\LP\er_Ver3.mp3
伝えたいこと:WAV\LP\伝えたいこと(ループ処理).mp3
Testament :WAV\LP\Testament.mp3
squall:WAV\LP\It move2.mp3
Over_the_sky:WAV\LP\As time goes by.mp3
p_b_of_h:WAV\LP\primal-beat-of-horrow_T.mp3
a_operations:WAV\LP\attack_2DJさん_T.mp3
you-destructive:WAV\LP\demo_long._Ver2.mp3
s_a_destroy :WAV\LP\search and destroy(long)_ver3.mp3
祭:WAV\LP\maturi_01_Ver2.mp3
air_pizz:WAV\LP\air pizz_Ver2.mp3
Liberating:WAV\LP\Liberating.mp3
そらのむこう:WAV\LP\sora ver2_Ver2.mp3
宴:WAV\LP\utage_sample.mp3

1842 ◆adhRKFl5jU:2009/04/26(日) 00:14:56
SleipnirStartは見習うべき点もあるが、そうでない点もある。

1843 ◆adhRKFl5jU:2009/04/26(日) 21:08:54
いや、SleipnirStartのソースから学ぶことは何も無い。
流石に汚すぎるだろ。
ただ、文字コードの扱いが俺には理解できないなあ。

UTF-8のページからShift_JISのページをフレームで開いて中のdocumentとかで日本語を流し込んだりするとどのような挙動を示すのだろうか。

1844 ◆adhRKFl5jU:2009/04/27(月) 21:26:49
漸くnasm with gccの方法が分かったorz...
nasmでelfを吐くようにすると、gccでリンクしたときに正しいファイルを吐き出さない。
だから-f win32にして.objを吐き出させる。
で.asmはコードの前にsection .textを記述する。
globalはsection .textの前でも後でも良いみたい。
だけれどもラベルの前に書きましょう。

これに気づくのに何日かかったことやら。

1845774さん:2009/04/28(火) 18:27:16
FlashとAction Script3.0のチュートリアル30 | CREAMU
http://blog.creamu.com/mt/2009/04/flashaction_script3030.html

1846774さん:2009/04/28(火) 18:29:40
自由に使えるオープンソースの日本語フォント - SourceForge.JP Magazine
http://sourceforge.jp/magazine/09/04/27/0313213
Geekなぺーじ : みんなが知らずに使ってるAkamai
http://www.geekpage.jp/blog/?id=2009/4/27/1

1847 ◆adhRKFl5jU:2009/04/28(火) 20:53:34
誰か、zip解凍専用OSとか作らないかね。
リング0でzip解凍したらかなり高速化するんじゃね?

1848 ◆adhRKFl5jU:2009/04/29(水) 11:28:28
__cdeclはどのようなレジスタを変更して良いのか分からん。
eaxは大丈夫ecxも大丈夫だと思うからそうしよう。

1849 ◆adhRKFl5jU:2009/04/29(水) 13:07:23
#include <cstdio>
#include <windows.h>

extern "C"{
int test();
int IsCanUseCpuid();

struct CpuidData{
unsigned int eax, ecx, edx, ebx, esp, ebp, esi, edi;
};
void Cpuid(unsigned int, CpuidData*);
}

using namespace std;

int main(int argc, char **argv){
printf("%d\n", test());
printf("%d\n", IsCanUseCpuid());
CpuidData cd;
Cpuid(0, &cd);
char str[13];
*((unsigned int*)&str[0]) = cd.ebx;
*((unsigned int*)&str[4]) = cd.edx;
*((unsigned int*)&str[8]) = cd.ecx;
str[12] = '\0';
printf("%s\n", str);
MessageBox(NULL, TEXT("TEST"), NULL, MB_OK);
}
-----
global _test
global _IsCanUseCpuid
global _Cpuid

section .text

;引数
;1:eaxに入れる値
;2:レジスタの結果を入れる32bytes分のバッファへのポインタ
;void __cdecl Cpuid(unsigned int, unsigned char (*)[32]);
align 16
_Cpuid:
mov eax, [esp + 4]
cpuid
mov [esp + 4], eax
mov eax, [esp + 8]
mov [eax + 4], ecx
mov [eax + 8], edx
mov [eax + 12], ebx
mov [eax + 16], esp
mov [eax + 20], ebp
mov [eax + 24], esi
mov [eax + 28], edi
mov ecx, eax
mov eax, [esp + 4]
mov [ecx], eax
ret

;int __cdecl IsCanUseCpuid();
align 16
_IsCanUseCpuid:
push ebx
pushfd
mov eax, 1 << 21
pop ebx
mov ecx, ebx
mov edx, ebx
xor ebx, eax
and edx, eax
push ebx
popfd
pushfd
pop ebx
and ebx, eax
xor eax, eax
cmp ebx, edx
setne al
push ecx
popfd
pop ebx
ret


align 16
_test:
push ebp
mov ebp, esp
and esp, 0xFFFFFFF0
sub esp, 0x40

xorpd xmm0, xmm0
xorpd xmm1, xmm1
xorpd xmm2, xmm2
xorpd xmm3, xmm3
xorpd xmm4, xmm4
xorpd xmm5, xmm5
xorpd xmm6, xmm6
xorpd xmm7, xmm7

xor eax, eax

mov esp, ebp
pop ebp
ret

1850 ◆adhRKFl5jU:2009/04/29(水) 15:06:55
プロジェクトへの参加のお誘いを受けた。
受けたい。
だけれども、俺に出来ることはあるのか。

そのプロジェクトの.exeはJScript.NETで書かれていて吹いたwww

1851 ◆adhRKFl5jU:2009/04/29(水) 21:21:23
InprocHandler32 (COM)
http://msdn.microsoft.com/en-us/library/ms693485(VS.85).aspx
-----
COMコンポーネントのレジストリへの登録の仕方が書いてあるような無いような。

1852 ◆adhRKFl5jU:2009/04/29(水) 22:17:39
JScript.NET コモンダイアログ
http://ja.wikipedia.org/wiki/%E3%83%93%E3%82%B9%E3%83%9E%E3%82%B9
-----
コモンコントロールの.NETでの開き方。

1853 ◆adhRKFl5jU:2009/04/29(水) 22:20:57
>INFO: JScript .NET Cannot Call Windows API or Exported DLL functions
えー

1854 ◆adhRKFl5jU:2009/04/29(水) 23:24:11
---------------------------
Add_Soft
---------------------------
H:\Add_Soft\MangaMeeya にアクセスできません。



セマフォがタイムアウトしました。


---------------------------
OK
---------------------------

1855 ◆adhRKFl5jU:2009/04/30(木) 18:42:58
取り敢えず、unicode版かそうじゃないかはIATを見れば分かるという話。

1856 ◆adhRKFl5jU:2009/05/01(金) 18:45:19
せっかくプロジェクトでやるんだったらsvnが良いよね!

1857 ◆adhRKFl5jU:2009/05/01(金) 22:33:23
#include <cstdio>
#include <windows.h>

using namespace std;

#define P(base, p) ((void*)(((unsigned int)base) + ((unsigned int)p)))

int main(int argc, char **argv){
HANDLE hFile = CreateFile(TEXT("Sleipnir.exe"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if(hFile == INVALID_HANDLE_VALUE){
MessageBox(NULL, TEXT("CreateFile Error!"), NULL, MB_OK);
return -1;
}

HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);

if(hMap == NULL){
MessageBox(NULL, TEXT("CreateFileMapping Error!"), NULL, MB_OK);
return -1;
}

const LPVOID p = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);

if(p == NULL){
MessageBox(NULL, TEXT("MapViewOfFile"), NULL, MB_OK);
return -1;
}

PIMAGE_DOS_HEADER pImageDos = (PIMAGE_DOS_HEADER)p;

PIMAGE_NT_HEADERS32 pImageNt = (PIMAGE_NT_HEADERS32)P(p, pImageDos->e_lfanew);

PIMAGE_DATA_DIRECTORY pImageData = &pImageNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];

if(pImageData->VirtualAddress == 0){
MessageBox(NULL, TEXT("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!"), NULL, MB_OK);
}

printf("%08X\n", pImageData->VirtualAddress);

PIMAGE_IMPORT_DESCRIPTOR pImageImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)P(p, pImageData->VirtualAddress);

printf("%08X\n", pImageImportDescriptor->Name);

printf("%s\n", (char*)P(p, pImageImportDescriptor->Name));


return 0;
}

1858 ◆adhRKFl5jU:2009/05/01(金) 22:33:58
IATが取得できないんですが・・・
ちゃんとページとかあわせないと駄目なんですか?

1859 ◆adhRKFl5jU:2009/05/01(金) 22:40:53
みたいですね・・・
まんどくせ。

1860 ◆adhRKFl5jU:2009/05/01(金) 22:47:31
セクションの情報から本当はどこからが何処にマッピングされるか計算した上でやらないといけないみたい。

1861 ◆adhRKFl5jU:2009/05/01(金) 22:48:09
明日まで覚えていることを期待して今日はもう寝る。

1862 ◆adhRKFl5jU:2009/05/02(土) 11:07:40
書いた。
-----
#include <cstdio>
#include <cstring>
#include <windows.h>

using namespace std;

#define P(base, p) ((void*)(((DWORD)base) + ((DWORD)p)))
namespace{
inline void *GetSectionBase(void *base, DWORD p){
PIMAGE_DOS_HEADER pImageDos = (PIMAGE_DOS_HEADER)base;
PIMAGE_NT_HEADERS32 pImageNt = (PIMAGE_NT_HEADERS32)P(base, pImageDos->e_lfanew);
PIMAGE_SECTION_HEADER pImageSection = IMAGE_FIRST_SECTION(pImageNt);

for(; pImageSection->VirtualAddress; ++pImageSection){
if(p - pImageSection->VirtualAddress <= pImageSection->SizeOfRawData){
//この値が0になる可能性はかなり低いと思われる。
return (void*)((DWORD)base - pImageSection->VirtualAddress + pImageSection->PointerToRawData);
}
}
return NULL;
}
}

int main(int argc, char **argv){
HANDLE hFile = CreateFile(TEXT("Sleipnir.exe"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if(hFile == INVALID_HANDLE_VALUE){
MessageBox(NULL, TEXT("CreateFile Error!"), NULL, MB_OK);
return -1;
}

HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);

if(hMap == NULL){
MessageBox(NULL, TEXT("CreateFileMapping Error!"), NULL, MB_OK);
return -1;
}

const LPVOID p = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);

if(p == NULL){
MessageBox(NULL, TEXT("MapViewOfFile"), NULL, MB_OK);
return -1;
}

PIMAGE_DOS_HEADER pImageDos = (PIMAGE_DOS_HEADER)p;

PIMAGE_NT_HEADERS32 pImageNt = (PIMAGE_NT_HEADERS32)P(p, pImageDos->e_lfanew);

PIMAGE_DATA_DIRECTORY pImageData = &pImageNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];

if(pImageData->VirtualAddress == 0){
MessageBox(NULL, TEXT("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!"), NULL, MB_OK);
return -1;
}

void *idataBase = GetSectionBase(p, pImageData->VirtualAddress);
if(idataBase == NULL){
MessageBox(NULL, TEXT("GetSectionBase Error"), NULL, MB_OK);
return -1;
}


PIMAGE_IMPORT_DESCRIPTOR pImageImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)P(idataBase, pImageData->VirtualAddress);

for(; pImageImportDescriptor->Name; ++pImageImportDescriptor){
char *moduleName = (char *)P(idataBase, pImageImportDescriptor->Name);
//printf("%s\n", moduleName);
if(strcmpi(moduleName, "kernel32.dll") == 0){
void *INTBase = GetSectionBase(p, pImageImportDescriptor->OriginalFirstThunk);
PIMAGE_THUNK_DATA pOrgImageThunkData = (PIMAGE_THUNK_DATA)P(INTBase, pImageImportDescriptor->OriginalFirstThunk);
for(; pOrgImageThunkData->u1.AddressOfData; ++pOrgImageThunkData){
if(0x80000000 & (DWORD)pOrgImageThunkData){
MessageBox(NULL, TEXT("pOrgImageThunkData Error"), NULL, MB_OK);
}else{
void *nameBase = GetSectionBase(p, pOrgImageThunkData->u1.AddressOfData);
PIMAGE_IMPORT_BY_NAME pImageImportByName = (PIMAGE_IMPORT_BY_NAME)P(nameBase, pOrgImageThunkData->u1.AddressOfData);
char *funcName = (char*)&pImageImportByName->Name;
if(strcmp(funcName, "CreateMutexW") == 0){
puts("unicode版");
return 0;
}
}
}
puts("mbcs版");
return 0;
}
}

//ここまで達しないはず。
return -1;
}

1863 ◆adhRKFl5jU:2009/05/02(土) 23:32:29
頑張って書いたソースが無駄になった絶望感は異常。
別に向こうのソースが早くて安全なんだから相手を評価せざるを得ない。
うーん。文字列データを利用して判別する方法は浮かびもしないわ。

1864 ◆adhRKFl5jU:2009/05/03(日) 09:45:03
CPU Disasm
Address Hex dump Command Comments
00C1ECB8 |. 50 PUSH EAX ; /Arg1 => [ARG.EAX]
00C1ECB9 |. FF15 3011BF00 CALL DWORD PTR DS:[<&FenrirLib_fx.?IsVal ; \FenrirLib_fx.?IsValidSiUri@FSmartInstallerManager@@SG?AW4EPermissionKind@@PB_W@Z
00C1ECBF |. 85C0 TEST EAX,EAX
00C1ECC1 |. 0F85 A2000000 JNE 00C1ED69

1865 ◆adhRKFl5jU:2009/05/03(日) 10:39:14
もういい。
俺にはスクリプト言語は似合わない。
今回PEヘッダファイルの構造をそこそこ詳細に理解できたので、dllを直接書き換えるexeを作ろうと思う。
本当ならば.fxプラグインを利用して作りたいところだが、仕様が公開されていないので残念すぎる。
まあ、そんなこんなで適当に作ろうかな?
まんどくせ。
やっぱりやめよう。
本当はこういうのはFenrirがやるべきであって、siファイルの有効かどうかを確かめるだけで良いのだ。
ソースファイルでの修正だったら間違えなく一行をコメント化して、一行を追加するだけで良いのだ。
それにもかかわらずユーザがやっているというのが理解できない。
Fenrirはもう駄目だ。
死んでしまえ。

1866 ◆adhRKFl5jU:2009/05/03(日) 17:44:17
http://google.com/complete/search?jsonp=baka&amp;q=shibuya&amp;hl=ja

1867 ◆adhRKFl5jU:2009/05/03(日) 17:45:53
>>1865
というわけで、?IsValidSiUriを変更すれば良いのだ。

1868 ◆adhRKFl5jU:2009/05/03(日) 17:48:21
ImageDirectoryEntryToData 関数
http://msdn.microsoft.com/ja-jp/library/cc429153.aspx

1869 ◆adhRKFl5jU:2009/05/03(日) 18:27:46
http://code.google.com/intl/ja/more/

1870 ◆adhRKFl5jU:2009/05/03(日) 20:46:04
http://diaspar.jp/node/214

1871 ◆adhRKFl5jU:2009/05/04(月) 09:07:54
何だか良く分からないけれども、今日の夢で、「太鼓の達人」と「シューティングゲー」のコラボレーションを見た。

1872 ◆adhRKFl5jU:2009/05/04(月) 11:26:12
http://google.com/complete/search?output=toolbar&amp;q=shibuya&amp;hl=ja

1873 ◆adhRKFl5jU:2009/05/04(月) 19:37:44
SleipnirStartのソースが良くなったかな?

1874 ◆adhRKFl5jU:2009/05/04(月) 20:16:09
アクセス解析だけでは分からない、サイト上でのユーザー動向を追うツール8+2種 - リアルアクセス解析
http://d.hatena.ne.jp/ryuka01/20090503/p1

1875 ◆adhRKFl5jU:2009/05/04(月) 21:53:29
NTFS代替ストリーム: Netsphere Laboratories
http://www.nslabs.jp/ntfs_alt_stream.rhtml

1876 ◆adhRKFl5jU:2009/05/06(水) 15:27:30
言語別ゲームプログラミング制作講座一覧 - Logic Edge
http://d.hatena.ne.jp/seikenn/20080506/1210088946

1877 ◆adhRKFl5jU:2009/05/07(木) 17:26:24
[JS]jQueryのプラグイン33+1選 -2009年5月 | コリス
http://coliss.com/articles/build-websites/operation/javascript/jquery-plugins-best-2009-may.html
Google検索「&as_qdr=y15」をやってくれるアドオン&まとめ作ったよ!Firefoxアドオン「Google Date」 - かたにちからバット
http://d.hatena.ne.jp/kiyotaka_h/20090506/1240854717

1878 ◆adhRKFl5jU:2009/05/07(木) 17:37:51
某ブログに

#define LEN(x) (sizeof(x) / sizeof(x[0]))
int a[0];
LEN(a); //ここ未定義!

みたいなことが書いてあったがそうなのか?
確か、一番最後の要素の次の要素まで一応参照できるということになっていると聞いたことがあるのだが、仕様書を探しても見つからない><
でもJISの企画書には
-----
例2. sizeof演算子のもう一つの用途は、次のようにして配列の要素の個数を求めることである。
sizeof array / sizeof array[0]
-----
しか書かれてないのだが・・・
まあC98なんですが。

1879 ◆adhRKFl5jU:2009/05/07(木) 17:40:59
まあ、多分俺の情報が間違っているね!
ちゃんと記憶にとどめておこう。
そういえばGCCならばC++でも可変配列が利用できるのだろうか?

1880 ◆adhRKFl5jU:2009/05/10(日) 10:23:02
取り敢えずgcc最新安定板を入れてみた。
std=c++0xを付けるだけでかなりコードが増えるなあ・・・

1881774さん:2009/05/10(日) 10:31:21
ラントレースしてみたらmain関数までは同じ数の命令しか実行していないようだった。

1882 ◆adhRKFl5jU:2009/05/10(日) 12:24:18
さて、センターも近くなってきたのに、Sleipnirの仕様を解析しようと思うのはいけないことだろうか?

1883 ◆adhRKFl5jU:2009/05/10(日) 12:24:52
COM!COM!
正直COMは解析しやすいから困る。

1884 ◆adhRKFl5jU:2009/05/10(日) 12:29:22
>>1878
でも、一応sizeofの中身は関数とかが指定されていると、ちゃんと引数が正しいとかチェックは行うが、実際には呼び出さないから存在しない値を参照しようとしていても問題ないはずである。
まあ、そんなソースを書かなきゃ良いんだよ!
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /

1885 ◆adhRKFl5jU:2009/05/10(日) 12:30:04
>>1878
C99だしwwwwww

1886 ◆adhRKFl5jU:2009/05/10(日) 12:30:46
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたl(ry
  /      /   _,.-‐'~/⌒  ⌒\
(以下AA略

1887 ◆adhRKFl5jU:2009/05/10(日) 13:24:22
ぬー
継承しすぎでする気にならないぽ

1888 ◆adhRKFl5jU:2009/05/10(日) 13:34:31
まあ良い。
一つ一つ命令を追っていけば良いのだ。

どうでも良いが、拡張子を表示するならば隠しファイルも表示するように設定すれば良いのにと思う。

1889 ◆adhRKFl5jU:2009/05/10(日) 13:56:10
再現方法は不明だから意味無いのだが、OllyDbg2.0にはクリップボードを開きっぱなしにするバグがある。

1890 ◆adhRKFl5jU:2009/05/10(日) 14:05:14
少なくともSleipnirのプラグインは
-----
Address Hex dump UNICODE
10003A48 7B BF 68 0C|F5 37 28 48|8B 9A D3 81|10 04 B4 F7| 뽻౨㟵䠨骋臓А
-----
のGUIDのインターフェイスを実装しているようだ。

1891 ◆adhRKFl5jU:2009/05/10(日) 14:18:38
呼び出し規約は主に
__cdecl,__stdcall,__fastcall,__thiscall
がある。

1892 ◆adhRKFl5jU:2009/05/10(日) 14:23:27
__cdecl
引数は右から左にスタックにプッシュされる。
スタックのポップは呼び出した側が行う。(ADD ESP, imm32)
大抵のコンパイラは何も指定しないとこれが規定になる。
関数名は初めに"_"が付けられる。

1893 ◆adhRKFl5jU:2009/05/10(日) 14:26:30
__stdcall
引数は右から左にスタックにプッシュされる。
スタックのポップは呼び出された側が行う。(RET imm32)
Windowsはこの呼び出し規約が好きみたい。WINAPIとかCALLBACKとかは、すべてこれ。
関数名は初めに"_"が付けられ、後ろに"@"が付き、その更に後ろにスタックに積まれる引数のバイト数を付ける。(多分10進数)

1894 ◆adhRKFl5jU:2009/05/10(日) 14:35:32
__fastcall
マイクロソフトでは、引数の左から二つまではECX,EDX経由で渡される。
残りは右から左にスタックにプッシュ。
Borland系では、引数の左から三つまではEAX,EDX,ECX経由で渡されるらしい。
残りは左から右にスタックにプッシュ。
スタックのポップはどちらも呼び出された側が行う。
関数名は、初めに"@"を付け、後ろに"@"を付け、引数のバイト数(恐らくレジスタ経由のも含めて)を後ろに付ける。
個人的には、最近のCPUならば十分キャッシュが働くので、そこまで__cdeclとかと変わらないと思っている。試したことは無い。

1895 ◆adhRKFl5jU:2009/05/10(日) 14:39:28
__thiscall
C++のメンバ関数に使われる。
引数は右から左にスタックにプッシュされる。
スタックのポップは呼び出された側が行う。
thisポインタはECXレジスタに格納される。
関数名の変換の方法は、各コンパイラに問い合わせてください。

1896 ◆adhRKFl5jU:2009/05/10(日) 14:42:27
C++のメンバ関数には__stdcallが付けられるらしく、その場合はthisポインターは最後にプッシュされる。
主にCOMとかで利用されていると思われ。

以上。
-----
参考文献
http://msdn.microsoft.com/ja-jp/library/46t77ak2(VS.80).aspx
http://www.wdic.org/w/TECH/__fastcall
-----
__clrcallとかあるらしい・・・

1897 ◆adhRKFl5jU:2009/05/10(日) 14:43:57
恐らく関数内で破壊して良いレジスタは
EDX,ECX,EAXだけかなと。
他は良く分からない。
まあ、全てレジスタをスタックに退避させれば何も問題は無いが。

1898 ◆adhRKFl5jU:2009/05/10(日) 14:44:23
x64の呼び出し規約は良く分からん。

1899 ◆adhRKFl5jU:2009/05/10(日) 14:51:06
修飾名を解決する奴らしい。
なんか修飾名のことをもうちょっと英語で格好良く言えたと思ったが忘れてしまった。
-----
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\undname.exe

1900 ◆adhRKFl5jU:2009/05/10(日) 15:07:23
みみずはFenrirLib.fxが出力している全ての関数のプロトタイプを手に入れた。

1901 ◆adhRKFl5jU:2009/05/10(日) 15:09:23
x64 呼び出し規約の概要
http://msdn.microsoft.com/ja-jp/library/ms235286.aspx

1902 ◆adhRKFl5jU:2009/05/10(日) 15:13:04
>>1900
http://mimizu.karou.jp/lab/goodjob.txt

1903 ◆adhRKFl5jU:2009/05/10(日) 15:52:19
滅茶苦茶適当にclass毎に分けるスクリプトを書いた。
-----
(function(){
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ina = fso.OpenTextFile("goodjob.txt");

var out1 = fso.OpenTextFile("out1.txt", 2, true);
var out2 = fso.OpenTextFile("out2.txt", 2, true);

var list = {"global namespace": []};

with(ina){
while(!AtEndOfLine){
var buff = ReadLine();
var index = buff.indexOf("(");
if(index != -1){ //関数!
var index2 = buff.lastIndexOf(" ", index - 1) + 1;
var functionname = buff.substring(index, index2);
var index3 = functionname.lastIndexOf("::");
if(index3 != -1){
var classname = functionname.substring(0, index3);
if(!list[classname]){
list[classname] = [];
}
list[classname].push(buff);
}else{
if(!list["global namespace"]){
list["global namespace"] = [];
}
list["global namespace"].push(buff);
}
}else{
out2.WriteLine(buff);
}
}

for(var i in list){
out1.WriteLine(i);
for(var j = 0; j < list[i].length; ++j){
out1.WriteLine(list[i][j]);
}
out1.WriteLine("");
}
}
})();

1904 ◆adhRKFl5jU:2009/05/10(日) 15:53:45
正直テストを一回もしないで、完璧に動くというのは怖い><

1905 ◆adhRKFl5jU:2009/05/10(日) 15:54:44
如何考えてもtemplateで複数引数の指定があったときに半角スペースが入るが、それを華麗に無視しています。
本当にありがとうございました。

1906 ◆adhRKFl5jU:2009/05/10(日) 15:56:31
ああそれと、型変換のoperatorも無視しているな。
これはどうにもならない。

1907 ◆adhRKFl5jU:2009/05/10(日) 16:06:19
ttp://mimizu.karou.jp/lab/out1.txt
ttp://mimizu.karou.jp/lab/out2.txt
-----
出力に少し手を加えたもの。

1908 ◆adhRKFl5jU:2009/05/10(日) 16:35:21
全てのプラグインはFIUnknownを継承している模様。
そのGUIDが>>1890だと思われる。

1909 ◆adhRKFl5jU:2009/05/10(日) 16:45:39
Sleipnirタソは
-----
CPU Dump
Address Hex dump UNICODE
0040A0D0 19 AE 87 12|16 58 DE 48|9E 2E A2 F6|2B E2 DD 3C| 긙ኇ堖䣞⺞㳝
-----
が必要なインターフェイスだと申しております。

1910 ◆adhRKFl5jU:2009/05/10(日) 16:51:52
Sleipnirは突如として
-----
CPU Dump
Address Hex dump UNICODE
0040A110 D6 C8 74 53|11 B9 83 42|82 04 3D 11|5F E3 E7 1C| 죖却뤑䊃҂ᄽ᳧
-----
を調べ始めた。

1911 ◆adhRKFl5jU:2009/05/10(日) 16:52:56
これは
FIToolbarのようだ。

1912 ◆adhRKFl5jU:2009/05/10(日) 16:54:24
参照文字列でここまでの情報が分かるとなると、解析されないようにするには分かりやすい英語、日本語は利用してはいけないな。
これからは俺俺言語(プログラミング言語ではない)が必要になるな。

1913 ◆adhRKFl5jU:2009/05/10(日) 16:59:17
それにしてもSleipnirの設計はおかしいなと思う。
どうしてSleipnirがFIToolbarを取得しに行くんだ。
それだと一つのプラグインから一つのFIToolbarしか出力できなくなるんじゃないか?
俺が設計するんだったら、FIToolbar登録用の関数をSleipnirのインターフェイスに用意して、それで登録してもらうようにする。
俺はプログラミングできないがな。

1914 ◆adhRKFl5jU:2009/05/10(日) 17:04:38
plugins.iniを見てもしやと思った。

1915 ◆adhRKFl5jU:2009/05/10(日) 17:10:21
FIBookDynamicFolderFactory
-----
CPU Dump
Address Hex dump UNICODE
0040A290 84 16 28 20|E1 54 FD 42|BC B3 F1 AF|67 96 2B B4| ᚄ員䋽뎼꿱陧됫

1916 ◆adhRKFl5jU:2009/05/10(日) 17:12:06
FIDock
-----
CPU Dump
Address Hex dump UNICODE
0040A1C0 25 22 F0 D9|4D B7 51 4F|97 C5 81 47|FB F6 97 34| ‖�띍佑얗䞁㒗

1917 ◆adhRKFl5jU:2009/05/10(日) 17:43:30
CPU Dump
Address Hex dump UNICODE
010620D8 BD 9E 7F 88|21 54 96 49|9D 3C C0 0B|93 7C 06 35| 麽衿吡䦖㲝ீ粓㔆
-----
良く分からないもの。

1918 ◆adhRKFl5jU:2009/05/10(日) 17:52:44
IUnknown?の+1Cは
FPlugin::InitializePlugin
から呼ばれる。

1919 ◆adhRKFl5jU:2009/05/11(月) 19:04:55
findを極める! - IDEA*IDEA 〜 百式管理人のライフハックブログ 〜
http://www.ideaxidea.com/archives/2009/05/find.html

1920 ◆adhRKFl5jU:2009/05/11(月) 20:16:28
CPU Dump
Address Hex dump UNICODE
0040A150 3B 12 DC 70|93 CF 3E 4E|A8 E4 88 3C|1E EE 12 39| ሻ烜쾓举㲈㤒
-----
新しくページ開くときかな?
怪しすぎる。

1921 ◆adhRKFl5jU:2009/05/11(月) 20:54:33
CPU Disasm
Address Hex dump Command Comments
004C7022 |> \B9 38894000 MOV ECX,Sleipnir.00408938 ; UNICODE "http://update.fenrir.co.jp/smartupdate/version.txt&quot;
004C7027 |. EB 19 JMP SHORT 004C7042
004C7029 |> 50 PUSH EAX ; /<%d>
004C702A |. 68 A0894000 PUSH Sleipnir.004089A0 ; |Format = "http://update.fenrir-inc.com/sleipnir/%d/version.txt"
004C702F |. 68 60444F00 PUSH OFFSET Sleipnir.004F4460 ; |Buf = ""
004C7034 |. FF15 C4244000 CALL DWORD PTR DS:[<&USER32.wsprintfW>] ; \USER32.wsprintfW
004C703A |. 83C4 0C ADD ESP,0C
004C703D |. B9 60444F00 MOV ECX,OFFSET Sleipnir.004F4460
004C7042 |> 8B4424 28 MOV EAX,DWORD PTR SS:[ESP+28]
004C7046 |. 8B10 MOV EDX,DWORD PTR DS:[EAX]
004C7048 |. 68 60A14B00 PUSH Sleipnir.004BA160
004C704D |. 51 PUSH ECX
004C704E |. 56 PUSH ESI
004C704F |. 50 PUSH EAX
004C7050 |. FF52 2C CALL DWORD PTR DS:[EDX+2C]
004C7053 |. 8BC6 MOV EAX,ESI
004C7055 |. E8 7665FFFF CALL 004BD5D0 ; [Sleipnir.004BD5D0
004C705A |. 8B4424 20 MOV EAX,DWORD PTR SS:[ESP+20]
004C705E |. 3BC5 CMP EAX,EBP
004C7060 |. C74424 1C 1C3 MOV DWORD PTR SS:[ESP+1C],Sleipnir.00423
004C7068 |. 74 06 JE SHORT 004C7070
004C706A |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
004C706C |. 50 PUSH EAX
004C706D |. FF51 08 CALL DWORD PTR DS:[ECX+8]
004C7070 |> 8B4424 28 MOV EAX,DWORD PTR SS:[ESP+28]
004C7074 |. 3BC5 CMP EAX,EBP
004C7076 |. C74424 24 243 MOV DWORD PTR SS:[ESP+24],Sleipnir.00423
004C707E |. 74 06 JE SHORT 004C7086
004C7080 |. 8B10 MOV EDX,DWORD PTR DS:[EAX]

1922 ◆adhRKFl5jU:2009/05/11(月) 21:14:50
今更ラントレースが物凄く使える機能だと思った。

1923 ◆adhRKFl5jU:2009/05/11(月) 21:36:37
ぬー
今日は、何も解析が出来なかった。
プラグインの仕様というのに焦点を絞って解析したほうが良いな。
まあ、本当はFenrirが仕様をとっとと公開すれば良いのだが。

1924774さん:2009/05/12(火) 19:36:01
DB設計時のサイズ見積もり - よねのはてな
http://d.hatena.ne.jp/yone098/20090512/1242088638

1925 ◆adhRKFl5jU:2009/05/13(水) 21:14:15
global _ore_memcpy1
global _ore_memcpy2

section .text

align 16
_ore_memcpy1:
push esi
push edi
mov esi, [esp + 16]
mov edi, [esp + 12]
mov ecx, [esp + 20]
rep movsb
pop edi
pop esi
ret

align 16
_ore_memcpy2:
push esi
push edi
mov esi, [esp + 16]
mov edi
mov eax, esi
and eax, 11b
jmp [.jt1 + eax * 4]

align 16
.r1:
mov al, byte ptr [ecx]
mov

align 16
.r2:

align 16
.r3:

.jt1:
dd 0, .r1, .r2, .r3

1926 ◆adhRKFl5jU:2009/05/13(水) 23:36:41
SSEとかのサポートはcpuid命令で取得できるよー
という話。
-----
http://www.icnet.ne.jp/~nsystem/simd_tobira/cpuid.html

1927 ◆adhRKFl5jU:2009/05/14(木) 20:23:36
http://wapedia.mobi/ja/呼出規約
>MS stdcall [3] はWindows APIで利用されているデファクトスタンダードである。引数は右から左に渡される。レジスタEAX, ECX, EDXはサブルーチン内で用いるために保存しておく必要がある。返り値はEAXに格納する。cdeclと異なり、スタックの清掃はサブルーチン側で行う(Pascal 呼出規約と同様)。従って可変長の引数リストはサポートされない。

1928 ◆adhRKFl5jU:2009/05/15(金) 18:58:40
Firefoxを思い通りに--about:configページで使える便利な10の「ハック」 - Zero Day - ZDNet Japan
http://japan.zdnet.com/sp/feature/07zeroday/story/0,3800083088,20393127,00.htm
ブロガーのための「Firefox」アドオン--記事作成を効率化する15種:スペシャルレポート - CNET Japan
http://japan.cnet.com/special/story/0,2000056049,20393036,00.htm

1929 ◆adhRKFl5jU:2009/05/15(金) 19:46:01
あの時俺が書いていたのは二次曲線だったのか。

1930 ◆adhRKFl5jU:2009/05/16(土) 18:59:16
はあ。
JavaScriptで「16進数の文字列->10進数の数字」の変換は、
("0x"+str) - 0
で出来るのか。
頭良いなあ、amachang。

1931 ◆adhRKFl5jU:2009/05/16(土) 21:29:17
少し面白いネタを思いついた気がしたので実装してみる。

1932 ◆adhRKFl5jU:2009/05/16(土) 21:29:46
戦争が大きくなったり小さくなったりするのは違うお。

1933 ◆adhRKFl5jU:2009/05/17(日) 16:41:19
KHTMLは小さすぎる文字は勝手に大きくしてしまうのか。
糞仕様。

1934 ◆adhRKFl5jU:2009/05/17(日) 16:42:34
別に当たり判定は小さいから、詐欺には使われないと思うし、元々クリックだけ出来る要素だって作れるんだから、セキュリティーというのが理由ではないだろう。
段々文字を大きくするアニメーションが作れないじゃないか!

1935 ◆adhRKFl5jU:2009/05/18(月) 17:23:24
>現存「府県天気予報」につきましては、月額55,200円と基本負担金13,200円の計、月額
>68,400円が必要ですが、これは配信に係る諸経費を利用者に負担していただいている
>ものです。今後も引き続き利用者に負担していただくことになります。
>配信時期については、全てのXML電文について22年度の配信を予定していますが、そ
>れに先立ち試験配信を予定しています。また、現行と異なる配信形態については、どの
>ような配信形態があるかも含めて検討していきたいと考えています。
-----
は?
金はやっぱり取るのかよ。死ねや!
-----
to http://xml.kishou.go.jp/

1936 ◆adhRKFl5jU:2009/05/18(月) 18:55:22
MAKEINTRESOURCE
でgccがエラーを吐く・・・

1937 ◆adhRKFl5jU:2009/05/20(水) 20:28:01
PortableSleipnirが起動しなくなった。
不思議!

1938 ◆adhRKFl5jU:2009/05/20(水) 20:29:31
三度目で起動した。


新着レスの表示


名前: E-mail(省略可)

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

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

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

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