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

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

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

1808 ◆adhRKFl5jU:2009/04/10(金) 21:29:40
恐らく本当は通っていなかったのだろう。

1809 ◆adhRKFl5jU:2009/04/10(金) 21:30:21
__stdcallだったら、_なんとか@数字
を参照するはずだったから__cdeclになってるんだろうな。

1810 ◆adhRKFl5jU:2009/04/10(金) 21:40:18
やっぱりコンパイルは通っていたと思う。
だけれども上手くいかない。
何故だ何故だ。
全く分からん。

1811 ◆adhRKFl5jU:2009/04/10(金) 21:46:49
gccでのコンパイルには確率的要素があるんですか><

1812 ◆adhRKFl5jU:2009/04/11(土) 08:49:23
extern "C"{
void __stdcall glClear(DWORD);
void __stdcall glClearColor(float, float, float, float);
DWORD GL_COLOR_BUFFER_BIT = 0x00004000;
}
と自分で書くとちゃんと動くので、ヘッダの読み込みに問題があるのか?

1813774さん:2009/04/11(土) 09:06:03
コンパイルのバグなのか、それとも俺のバグなのか。
全く分からん。

1814 ◆adhRKFl5jU:2009/04/11(土) 18:44:54
よく分からんので、ヘッダを全部コピーして、適当にdefineの部分を改造したら動くようになった。
まあ、良いや。
ということで、頑張ったら今度は三次元で表示できない。
という事で、半ばあきらめモード。
でも、暇なので、8GBのUSBメモリを買ってきたので適当にUSBブートでも試してみようかなと思った。

1815 ◆adhRKFl5jU:2009/04/12(日) 02:14:17
VMが俺のUSBを感知しない。

1816 ◆adhRKFl5jU:2009/04/12(日) 21:39:20
ようやくDebianをUSBにインストールすることができた。
My OS(笑)である。
でもあんまりLinux分からん。これから勉強していくことにしよう。

1817 ◆adhRKFl5jU:2009/04/12(日) 21:39:40
やはりVMよりも早く動いていい感じ。

1818 ◆adhRKFl5jU:2009/04/12(日) 22:39:42
http://mimizu.ddo.jp/

1819 ◆adhRKFl5jU:2009/04/14(火) 18:04:12
うーん。
テレビはニュースを流していれば良い。
バラエティは電波を使って流すものではない。見たい人がインターネットででも見れば良い。

1820 ◆adhRKFl5jU:2009/04/15(水) 00:29:40
FrontPage - Lua組み込みWiki
http://tgws.fromc.jp/wiki/lua/index.php?FrontPage
-----
JavaScriptに頼ってスクリプト処理を実装するとか嫌なので、これを使ってソフトに組み込めば面白そう。
まず無いとは思うが、JScriptとか、スクリプトを実行する環境が無くても汎用的に拡張できる気がする。多分きのせい。

1821 ◆adhRKFl5jU:2009/04/15(水) 22:19:13
おかしい。
以前書いた連投スクリプトが利用できない。
-----
+++GET 42+++
POST /bbs/write.cgi/computer/38153/1239795779/ HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight, */*
Referer: http://jbbs.livedoor.jp/computer/38153/
Accept-Language: ja
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: jbbs.livedoor.jp
Content-Length: 156
Pragma: no-cache
Cookie: NAME=%u540D%u524Dtest; MAIL=sage
Connection: keep-alive
Browser reload detected...
Posting 156 bytes...
DIR=computer
BBS=38153
KEY=1239795779
TIME=1239800550
submit=%BD%F1%A4%AD%B9%FE%A4%E0
NAME=%CC%BE%C1%B0test
MAIL=sage
MESSAGE=%A4%E2%A4%A6%B0%EC%B2%F3%A1%A3

1822 ◆adhRKFl5jU:2009/04/15(水) 22:52:35
(function(){
var http = new ActiveXObject("MSXML2.ServerXMLHTTP");

http.open("POST", "http://jbbs.livedoor.jp/bbs/write.cgi/computer/38153/1239795779/", false);

http.setRequestHeader("Referer", "http://jbbs.livedoor.jp/computer/38153/");

http.send("DIR=computer&BBS=38153&KEY=1239795779&TIME=1239800550&submit=%BD%F1%A4%AD%B9%FE%A4%E0&NAME=&MAIL=sage&MESSAGE=test");

WScript.Echo(http.responseText);
})();

1823みみず★:2009/04/15(水) 23:45:45
うまくいった。
よかったよかった
-----
(function(){
var setting = {
NAME: "もぐら",
MAIL: "sage",
MESSAGE: "スクリプトによる、自動書き込みのテスト",
DIR: "computer",
BBS: "38153",
KEY: "1239805963"
};

Submit("http://jbbs.livedoor.jp/bbs/write.cgi", "http://jbbs.livedoor.jp/computer/38153/", setting);


function Submit(url, ref, setting){
var http = new ActiveXObject("MSXML2.ServerXMLHTTP");
http.open("POST", url, false);
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.setRequestHeader("Referer", ref);

http.send(Dec(setting));
}

function Dec(obj){
var s = "";
for(var i in obj){
if(obj.hasOwnProperty(i)){
s += encodeURIComponent(i) + "=" + encodeURIComponent(obj[i]) + "&";
}
}
if(s != ""){
return s.substr(0, s.length - 1);
}
return "";
}
})();

1824 ◆adhRKFl5jU:2009/04/16(木) 20:16:09
#include <cstdio>
#include <windows.h>

using namespace std;

int main(){
printf("Content-type: text/html; charset=shift_jis\n\n");

printf("<!DOCTYPE html>\n");
printf("<html>");
printf("<head>");
printf("<title>サーバー運営情報</title>");
printf("</head>");

printf("<body>");

UINT DriveType = GetDriveType("I:\\");

if(DriveType == DRIVE_NO_ROOT_DIR){
printf("<h1>サーバー用ハードディスクは起動していません。残念。</h1>");
}else{
printf("<h1>サーバー用ハードディスクは起動しています。</h1>");

ULARGE_INTEGER lldFreeBytesAvailable, lldTotalNumberOfBytes, lldTotalNumberOfFreeBytes;
GetDiskFreeSpaceEx("I:\\", &lldFreeBytesAvailable, &lldTotalNumberOfBytes, &lldTotalNumberOfFreeBytes);

printf("%llu<br>%llu<br>%llu<br>", lldFreeBytesAvailable.QuadPart, lldTotalNumberOfBytes.QuadPart, lldTotalNumberOfFreeBytes.QuadPart);
}

printf("</body>");
printf("</html>");

return 0;
}

1825 ◆adhRKFl5jU:2009/04/16(木) 21:39:19
Scripting.FileSystemObjectでテキストデータを開いて、Closeを呼び出してもファイルを閉じないとか。

1826 ◆adhRKFl5jU:2009/04/18(土) 19:50:12
>>1825
ちゃんと.Close()呼び出したら閉じられていた。
次のコードで違うファイルを開いていたからいけなったみたいだった。orz....

Google AJAX Feed API - Google Code
http://code.google.com/intl/ja/apis/ajaxfeeds/
-----
RSS to JSONP

1827 ◆adhRKFl5jU:2009/04/18(土) 20:49:35
Unixのfork()が便利すぎ。
Windowsで使えたら嬉しいのになあ。

1828 ◆adhRKFl5jU:2009/04/19(日) 00:08:33
インターネットは俺を失望させるためにあるのか?

1829 ◆adhRKFl5jU:2009/04/19(日) 10:09:38
お。
luaにはユーザーデータに対してgcが行われるときに、関数を呼び出させることが可能なようだ。
素晴らしい。

1830 ◆adhRKFl5jU:2009/04/19(日) 11:25:43
luaはJavaScriptと良く似ているなあ。
これは素晴らしい。

1831 ◆adhRKFl5jU:2009/04/19(日) 20:41:03
なんか俺は素晴らしいという言葉を頻発してしまうようだ。

ひぐらしは最後まで行くと物凄く良い話のように思える。

1832 ◆adhRKFl5jU:2009/04/19(日) 22:05:49
部活ねーよwwwwwwwwwww

1833 ◆adhRKFl5jU:2009/04/20(月) 17:23:20
結局、雛見沢症候群というものは存在しないし、仲間で結束すれば全て上手く行くということも無い。
そんな寂しい世界なんだ。別に雛見沢症候群が存在していないことを寂しいなんて思っていない。

1834 ◆adhRKFl5jU:2009/04/20(月) 22:01:18
Cygwinを使えば、ディスク全体をファイルに落とせたと思ったのだが・・・

1835 ◆adhRKFl5jU:2009/04/22(水) 18:26:17
怖い怖い><
:w :make
と勝手に手が動く><

1836 ◆adhRKFl5jU:2009/04/22(水) 19:24:11
nasm使うと正しい実行ファイルが生成されない理由が漸く分かった。
どうやら-felfとしなければならなかったようだ・・・
orz....

1837774さん:2009/04/22(水) 19:43:23
じつはかんけいなかったぽい。
コンパイルは通るが実行できない。

1838 ◆adhRKFl5jU:2009/04/23(木) 20:15:16
NScripterの解読
Yet Another nsdec

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
-----
出力に少し手を加えたもの。


新着レスの表示


名前: E-mail(省略可)

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

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

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

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