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

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

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

978774さん:2008/12/03(水) 22:37:17 ID:CENbthlg0
面倒になった。
明日本格的にやる。
まあ、直ぐ分かりそうなんだけれども。

979774さん:2008/12/03(水) 22:48:56 ID:CENbthlg0
分かった。
チェックサムは、それぞれのファイルのバイト数の合計だ。
でそれの下8ビット。まあ、つまり普通にunsigned charで足せばいいのだ。
簡単簡単。
実際にそれで合うかプログラムを書く。
まあ、直ぐに出来るだろう。

980774さん:2008/12/03(水) 23:06:46 ID:CENbthlg0
#include <iostream>

#include <cstdio>

int main(int argc, char **argv){
FILE *file = std::fopen("Hawkeye.sar", "rb");
char buff[1024];
unsigned char sum = 0;
if(file){
while(1){
std::fgets(buff, sizeof(buff), file);
if(strnicmp(buff, "checksum=", 9) == 0){
unsigned char csum = (unsigned char)atoi(buff + 9);
if(sum == csum){
std::cout << "OK";
}else{
std::cout << "BAD";
}
std::cout << std::endl;
break;
}else{
unsigned int size = (unsigned int)atoi(buff);
sum += size;
fseek(file, size + 1, SEEK_CUR);
}
}
}
}

981774さん:2008/12/03(水) 23:12:58 ID:CENbthlg0
違うsarファイルでも確認してみたが、一致した。よし。多分大丈夫。
だけれども、書き込まれているのが、unsigned charなのかsigned charなのかが分からない。
多分unsigned charであると思っているのだが。

982774さん:2008/12/04(木) 00:05:21 ID:CENbthlg0
明日はsarファイルを作るソフトでもつくろうかな。

983774さん:2008/12/04(木) 00:46:07 ID:CENbthlg0
取り敢えず、指定フォルダの下にあるディレクトリの一覧を返すの書いた。
-----
#define STRICT 1

#include <iostream>
#include <fstream>
#include <functional>
#include <algorithm>

#include <iterator>
#include <string>
#include <valarray>
#include <vector>
#include <map>

#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <tchar.h>

#include <windows.h>

#ifdef UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif

std::vector<tstring> vec;

void
EnumDirectory(LPCTSTR);

int main(int argc, char **argv){
EnumDirectory(_T(""));

unsigned int size = vec.size(), i;
for(i = 0; i < size; ++i){
#ifdef UNICODE
std::wcout
#else
std::cout
#endif
<< vec[i] << std::endl;
}
}

void
EnumDirectory(LPCTSTR path){
TCHAR buff[MAX_PATH];
lstrcpy(buff, path);
TCHAR *last = buff + lstrlen(buff);
lstrcpy(last, _T("*"));

WIN32_FIND_DATA d;
HANDLE hFile = FindFirstFile(buff, &d);
if(hFile != INVALID_HANDLE_VALUE){
do{
if(d.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(lstrcmp(d.cFileName, _T(".")) != 0 && lstrcmp(d.cFileName, _T("..")) != 0){
lstrcpy(last, d.cFileName);
vec.push_back(tstring(buff));
lstrcat(last, _T("\\"));
EnumDirectory(buff);
}
}
}while(FindNextFile(hFile, &d));
FindClose(hFile);
}
}

984774さん:2008/12/04(木) 00:46:58 ID:CENbthlg0
で、Sleipnirの初期状態のディレクトリ。
-----
bin
bookmarklet
documents
maintenance
plugins
plugins\action
plugins\bookmark
plugins\browser
plugins\browser\IEBrowser
plugins\dock
plugins\dynfolder
plugins\extension
plugins\importer
plugins\menu
plugins\panel
plugins\spx
plugins\spx\IEPanel
plugins\spx\IEPanel\mcsie
plugins\spx\IEPanel\mcsie\html
plugins\spx\IEPanel\mcsie\img
plugins\statusbar
plugins\toolbar
prefs
resources
resources\languages
resources\languages\advance
resources\languages\advance\english
resources\languages\advance\japanese
resources\languages\advance\simplified_chinese
resources\languages\default
resources\languages\default\english
resources\languages\default\japanese
resources\languages\default\simplified_chinese
resources\languages\sleipnir
resources\languages\sleipnir\english
resources\languages\sleipnir\japanese
resources\languages\sleipnir\simplified_chinese
resources\languages\sleipnir166
resources\languages\sleipnir166\english
resources\languages\sleipnir166\japanese
resources\skins
resources\skins\advance
resources\skins\advance\actions
resources\skins\advance\browser
resources\skins\advance\controls
resources\skins\advance\dock
resources\skins\advance\dock\SearchDock
resources\skins\advance\dynfolder
resources\skins\advance\options
resources\skins\advance\panel
resources\skins\advance\panel\spx
resources\skins\advance\statusbar
resources\skins\advance\statusbar\AddonControl
resources\skins\advance\statusbar\PopupBlock
resources\skins\advance\statusbar\PrivacyReport
resources\skins\advance\statusbar\QuickSecurity
resources\skins\advance\statusbar\RssAutoDiscovery
resources\skins\advance\statusbar\SecurityZone
resources\skins\advance\statusbar\SslState
resources\skins\advance\statusbar\SwitchSecurity
resources\skins\advance\statusbar\ZoomControl
resources\skins\advance\tab
resources\skins\advance\toolbar
resources\skins\advance\toolbar\AddressBar
resources\skins\advance\toolbar\SearchBar
resources\skins\default
resources\skins\default\actions
resources\skins\default\browser
resources\skins\default\browser\IEBrowser
resources\skins\default\browser\IEBrowser\NavigateError
resources\skins\default\controls
resources\skins\default\dock
resources\skins\default\dock\InformationDock
resources\skins\default\dock\SearchDock
resources\skins\default\dynfolder
resources\skins\default\extensions
resources\skins\default\extensions\MouseExtension
resources\skins\default\options
resources\skins\default\panel
resources\skins\default\panel\spx
resources\skins\default\statusbar
resources\skins\default\statusbar\AddonControl
resources\skins\default\statusbar\PopupBlock
resources\skins\default\statusbar\PrivacyReport
resources\skins\default\statusbar\QuickSecurity
resources\skins\default\statusbar\RssAutoDiscovery
resources\skins\default\statusbar\SecurityZone
resources\skins\default\statusbar\SslState
resources\skins\default\statusbar\SwitchSecurity
resources\skins\default\statusbar\ZoomControl
resources\skins\default\tab
resources\skins\default\toolbar
resources\skins\default\toolbar\AddressBar
resources\skins\default\toolbar\ConnectionBar
resources\skins\default\toolbar\SearchBar
resources\skins\default\toolbar\WindowBar
resources\skins\sleipnir166
resources\skins\sleipnir166\controls
resources\skins\sleipnir166\statusbar
resources\skins\sleipnir166\statusbar\AddonControl
resources\skins\sleipnir166\statusbar\PopupBlock
resources\skins\sleipnir166\statusbar\PrivacyReport
resources\skins\sleipnir166\statusbar\SslState
resources\sounds
scripts
scripts\$AdvancedPageSearchBar
scripts\$OnDoubleClick
scripts\

985774さん:2008/12/04(木) 00:48:38 ID:CENbthlg0
もう使用してあるSleipnir3だとこんな感じ。
-----
bin
bin\tools
chrome
chrome\design
chrome\design\resource
chrome\skin
chrome\skin\actions
chrome\skin\browser
chrome\skin\browser\IEBrowser
chrome\skin\browser\IEBrowser\NavigateError
chrome\skin\controls
chrome\skin\dock
chrome\skin\dock\InformationDock
chrome\skin\dock\SearchDock
chrome\skin\dynfolder
chrome\skin\options
chrome\skin\panel
chrome\skin\panel\spx
chrome\skin\statusbar
chrome\skin\statusbar\PopupBlock
chrome\skin\statusbar\PrivacyReport
chrome\skin\statusbar\QuickSecurity
chrome\skin\statusbar\RssAutoDiscovery
chrome\skin\statusbar\SecurityZone
chrome\skin\statusbar\SslState
chrome\skin\statusbar\SwitchSecurity
chrome\skin\statusbar\ZoomControl
chrome\skin\tab
chrome\skin\toolbar
chrome\skin\toolbar\AddressBar
chrome\skin\toolbar\ConnectionBar
chrome\skin\toolbar\OpenSearchBar
chrome\skin\toolbar\SearchBar
chrome\skin\toolbar\WindowBar
doc
doc\ja
locale
locale\1033
locale\1041
locale\default
locale\default\web
module
module\action
module\bookmark
module\browser
module\browser\IEBrowser
module\dock
module\dynfolder
module\extension
module\importer
module\menu
module\panel
module\spx
module\spx\IEPanel
module\spx\IEPanel\mcsie
module\spx\IEPanel\mcsie\html
module\spx\IEPanel\mcsie\img
module\statusbar
module\toolbar
module\toolbar\OpenSearchBar
user
user\Owner
user\Owner\Setting
user\Owner\Setting\plugins
user\Owner\Setting\scripts
user\Owner\Setting\settings
user\Owner\Setting\settings\client
user\Owner\Setting\settings\client\backup
user\Owner\Setting\settings\client\caches
user\Owner\Setting\settings\client\caches\history
user\Owner\Setting\settings\plugins
user\Owner\Setting\skins
user\Owner\Setting\skins\default
user\Owner\Setting\smartinstaller
user\Owner\Setting\smartinstaller\SmartInstaller Installation Information
user\Owner\Setting\smartinstaller\SmartInstaller Installation Information\plugins
user\Owner\Setting\smartinstaller\SmartInstaller Installation Information\skins
user\Owner\Setting\smartinstaller\SmartInstaller Run Once
user\Owner\Setting\smartinstaller\SmartInstaller Run Once\plugins
user\Owner\Setting\smartinstaller\SmartInstaller Run Once\skins
user\Owner\Setting\~temp
user\Owner\Setting\~temp\boost
user\Owner\Setting\~temp\boost\2713f754bc90ac2e980c0a111eb3c49b
user\Owner\Setting\~temp\boost\60f3beba29629c3a123f0821f67dd8a4
user\Owner\Setting\~temp\favicon
user\Owner\Setting\~temp\logs

986774さん:2008/12/04(木) 00:50:51 ID:CENbthlg0
適当に書いたのに、結構使える奴なので、確保しておいたw

987774さん:2008/12/04(木) 00:51:39 ID:CENbthlg0
もう、コマンドプロンプトが存在しない生活なんて考えられません。
リダイレクトとか使いまくってます。
あんまりパイプは使ってないが。

988774さん:2008/12/04(木) 00:52:16 ID:CENbthlg0
標準出力に出力するように作っておいて、リダイレクトさせればファイルに出力できるので、とても便利。

989774さん:2008/12/04(木) 00:53:52 ID:CENbthlg0
sarファイル作成のソフトは、ファイルを作ったところのカレントディレクトリで実行すると、sarファイルを自動生成するようにする。
AddFolderに無駄なフォルダを付け加えないために、上のようなものを作ったわけである。

990774さん:2008/12/04(木) 18:44:52 ID:CENbthlg0
ブラウザで入力するときの.siはextentions.tabbrowser.jpしか出来ないようになっているが、
sar.gzは何処に置いておいてもいいみたい。
これは良い仕様。

991774さん:2008/12/04(木) 18:45:54 ID:CENbthlg0
こんな感じでハック。
-----
[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: .si and .sar.gz hack"
Match = "http://extensions.tabbrowser.jp/(http://?++.(si|sar.gz))\0"
Replace = "$RDIR(\0)"

992774さん:2008/12/04(木) 19:19:30 ID:CENbthlg0
.si内部ならextentions.tabbrowser.jpじゃなくても大丈夫っぽい。
つまりフックすれば良いのは.siだけだ。
-----
[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: .si hack"
Match = "http://extensions.tabbrowser.jp/(http://?++.si)\0"
Replace = "$RDIR(\0)"

993774さん:2008/12/04(木) 20:11:17 ID:CENbthlg0
何故だか分からないが、
std::wcoutで出力すると、日本語以降が出力されないので、マルチバイトでコンパイルしなおした。
まあ、これでsarを出力するソフトが書ける。

994774さん:2008/12/04(木) 23:26:50 ID:CENbthlg0
Sar File Unpack Error: C:\Documents and Settings\Owner\デスクトップ\Sleipnir\unicode\bin\..\smartinstaller\SmartInstaller Run Once\plugins/MP.sar
MP のインストールに失敗しました。

1 個のプラグインのインストールに失敗しました。
-----
おかしいなー

995774さん:2008/12/04(木) 23:29:28 ID:CENbthlg0
二百行分のソースが無駄になったというのか!

996774さん:2008/12/05(金) 00:05:34 ID:CENbthlg0
無駄になるのは残念なので、
-----
ゴミ箱
http://mimizu.karou.jp/static/
-----
に上げておいた。
http://mimizu.karou.jp/static/MakeSarAndSiFile.rar
か。

997774さん:2008/12/05(金) 00:40:03 ID:CENbthlg0
まあ、いい。
結局sarファイルの仕様も分かったし、siファイルの仕様も分かったので良かったことにしよう。
なんか、もうSleipnirで遊ぶことは無い気がする。
ちょっと前に貼った、音の出し方のページでも研究しようかなあ?
多分やら無いだろう。

998774さん:2008/12/05(金) 00:41:13 ID:CENbthlg0
やんか、面白いこと無いかなあ・・・・・・・・・
SleipnirSDKが公開されたら何作るか考えないと。
なんか他のSleipnirへの要望も一杯あった気がするが、忘れてしまった。

999774さん:2008/12/05(金) 01:02:00 ID:CENbthlg0
そういえば仕様を纏めておくと、siとsarは一対一に対応していて、片方だけでは何の意味もなさない。
siのAddFileの順番にファイルの実体がsarに収められている。
ファイルの構造は
-----
ASCIIコードでファイルサイズ(任意長)
0x0A(つまり、改行コード)
ファイルサイズ分のファイルの実体
0x0A
-----
が、siファイルに記述されているファイルの数だけある。
で最後に
-----
CheckSum=(ファイルサイズのそれぞれの合計)
-----
とASCIIで入っていて、
最後の最後が、
0x0Aである。
何故0x0Aかというと、fgets()が利用できるからと思われる。

1000774さん:2008/12/05(金) 01:02:44 ID:CENbthlg0
明日は、Sleipnirのインターネット上とローカル上のsiファイルの扱いについて述べる。
今日は眠いし寝る。
明日は補習だ><

1001774さん:2008/12/05(金) 19:28:31 ID:CENbthlg0
という事で、適当に書く。

Sleipnirは.siで終わるファイルを見ているらしい。
で、現状ではextensions.tabbrowser.jpしか見ていない。
だけれども、siファイルに記述されているURLは上のドメインじゃなくてもとりに行く。
sarファイルも問題ない。
つまり、クリックしたときに反応しないだけなので、最初だけ反応するように上のほうのフィルタをプロクソミトロンに入れればよい。

1002774さん:2008/12/05(金) 19:39:43 ID:CENbthlg0
そりゃあ、Lunascapeは
javascript.options.jit.content
をtrueにしているんだから早いわ。
これで遅かったらどうかしてる。

1003774さん:2008/12/05(金) 19:45:52 ID:CENbthlg0
テスト版も自動更新できるようにしてほしいな。

1004774さん:2008/12/05(金) 20:56:54 ID:CENbthlg0
情報オリンピック出ようかな。
学校に結果が行くのが納得ならんぜ。
まあ、どうせ予選すら(ry

1005774さん:2008/12/05(金) 23:07:37 ID:CENbthlg0
念願のNASM環境を手に入れたぞ。
まあ、適当なフォルダにおいて、パスを通しただけだが。

1006774さん:2008/12/05(金) 23:15:24 ID:CENbthlg0
-----
nasm -fwin32 -O3 getapi.s
golink -entry start getapi.obj
-----
こうすればアセンブリしてリンクできる。
バッチとかパールとか用意するとベターか。

1007774さん:2008/12/05(金) 23:34:09 ID:CENbthlg0
何もしないアセンブリ。
-----
section .text
global start
start:
ret

1008774さん:2008/12/06(土) 17:18:52 ID:CENbthlg0
デフォルトでアセンブリ言語は何も提供しないから困る。
コンソールアプリケーションにするにも何行書かねばならないのか。
だから.objとか.libにして一部だけアセンブリって言うのが良いのかもしれない。

それにしてもどうして日本語でのNASMの資料が少ない?

1009774さん:2008/12/06(土) 17:25:27 ID:CENbthlg0
面倒だしバッチ書いた。
適当すぎww
メイクファイル・・・?
-----
del *.exe
del *.obj
nasm -fwin32 aaa.asm && golink -entry start aaa.obj

1010774さん:2008/12/06(土) 17:36:04 ID:CENbthlg0
いかんいかん。
アセンブルするためにバッチファイルを書くのだが、そのためにバッチファイルを勉強するという本末転倒の状態になってしまった。
動けば良いんだよ、動けば。

1011774さん:2008/12/06(土) 17:44:50 ID:CENbthlg0
そんなこと言って改造してしまった。
-----
@echo off
if "%1" == "" exit /b
if not exist "%1.asm" exit /b
del %1.exe > nul
del %1.obj > nul
nasm -fwin32 %1.asm && golink -entry start %1.obj

1012774さん:2008/12/06(土) 17:47:28 ID:CENbthlg0
@echo off
if "%1" == "" exit /b
if not exist "%1.asm" goto error


del %1.exe > nul
del %1.obj > nul
nasm -fwin32 %1.asm && golink -entry start %1.obj
exit /b

:error
echo %1は存在しないようです。
exit /b

1013774さん:2008/12/06(土) 19:19:24 ID:CENbthlg0
アセンブリ入れたのは良いんだけれども、書くものがないので結局何も。

1014774さん:2008/12/06(土) 19:21:08 ID:CENbthlg0
神速(´・ω・)VIP:素敵な壁紙画像下さい(´・ω・`) その1
http://sinsoku.livedoor.biz/archives/51225987.html
ベア速 日本SUGEEEEEEEEEEEEEEEE!ってなるコピペくれ
http://vipvipblogblog.blog119.fc2.com/blog-entry-248.html

1015774さん:2008/12/06(土) 20:24:39 ID:CENbthlg0
間違えて貼ってしまった。

Firefoxはいいが、フラッシュが直ぐ止まるバグがあるので、嫌だ。

1016774さん:2008/12/06(土) 22:21:40 ID:CENbthlg0
履歴管理(失敗) - 素人がプログラミングを勉強するブログ
http://d.hatena.ne.jp/javascripter/20081206/1228566390
-----
toXMLString();に注目!
重要な構文ではないかww

1017774さん:2008/12/06(土) 22:25:47 ID:CENbthlg0
ECMAScript for XML (E4X) 仕様邦訳
http://www.ne.jp/asahi/nanto/moon/specs/ecma-357.html
------
これか。

1018774さん:2008/12/06(土) 23:04:35 ID:CENbthlg0
忍者バリアーとか出来たよー、とか忍者から送ってきたのだけれども、
JavaScriptだし効果ないじゃん。
-----
<!--shinobibarrier1-->
<script type="text/javascript" src="http://bar1.shinobi.jp/hash.js&quot;&gt;&lt;/script&gt;
<script type="text/javascript" src="http://bar1.shinobi.jp/s/42/00013.js&quot;&gt;&lt;/script&gt;
<noscript><a href="http://www.ninja.co.jp/barrier/&quot; target="_blank">アクセス制限</a></noscript>
<noscript><meta http-equiv="refresh" content="0;URL=http://bar1.shinobi.jp/hoge/NoScript?0001342&quot; />
<div style="background-color: #000000;text-align: center;vertical-align: middle;width:100%;height: 100%;margin: -10px;padding: 0px;z-index: 10;position: absolute;">
<div style="color: #ffffff;margin: 0px;padding: 0px;position: absolute;top:50%;left:47%;"><a href="http://www.ninja.co.jp/&quot;&gt;NINJA TOOLS</a></div></div></noscript>
<!--shinobibarrier2-->

1019774さん:2008/12/06(土) 23:07:35 ID:CENbthlg0
これなんてMD5?

1020774さん:2008/12/06(土) 23:09:05 ID:CENbthlg0
普通に
bar1.shinobi.jp/
に接続しないようにしたら正直全く意味が無いと思う。
JavaScript無効にしている人だったら、プロクソミトロンかなんかで、
metaタグを消しちゃえば一発だと思う。
全く意味なし、効果なし。

1021774さん:2008/12/06(土) 23:10:04 ID:CENbthlg0
というか、JavaScript無効時に飛ばすHTMLのURLがhogeとかwwww

1022774さん:2008/12/06(土) 23:12:14 ID:CENbthlg0
拒否レベルってこういうことですかwwwww
http://bar1.shinobi.jp/sample/01.html
http://bar1.shinobi.jp/sample/02.html
http://bar1.shinobi.jp/sample/03.html
http://bar1.shinobi.jp/sample/04.html
http://bar1.shinobi.jp/sample/05.html

1023774さん:2008/12/06(土) 23:13:27 ID:CENbthlg0
>忍者バリアーとは、荒らし、迷惑行為などご自分のHPに入ってほしくないユーザーの接続をJavaScriptを利用して制御するツールです。
JavaScript・・・
これに騙される人はどうかしてます。
導入しているサイトが見たいくらいです。

1024774さん:2008/12/06(土) 23:18:14 ID:CENbthlg0
>.htaccessが設置できない環境でもjavascriptさえ使えればすぐに採用出来るので、とりあえずでもアクセス制限を実施したいサイトさんにはおススメですね。
.htaccessの方が良いですよねー
まあ、俺鯖を持ってないから駄目なんだけれども。

1025774さん:2008/12/07(日) 20:04:34 ID:CENbthlg0
なんかプログラムを書きたいなあ。
ゲームを書きたい気が最近強くなっているのだが、ちゃんとそういうのを基礎からやったほうが良いと思う。

どうでも良いが、Win32APIでウィンドウに点を打つ最速の関数ってあるのか?
ActiveXは使わない方向の方が良いのだが・・・

1026774さん:2008/12/07(日) 20:57:40 ID:CENbthlg0
ブラッディーマンデイでman in the middle attackを話していたが、
これは常にプロセスやらを監視していれば気づくと思うんだがなあ。
自分のパソコンに監視用のドライバを入れれば良いと思うお。
リング0で動作するから、簡単に見つけれそうだが。
まあ、完全にWindowsクラックですが。

俺には到底出来ません。

1027774さん:2008/12/07(日) 20:59:15 ID:CENbthlg0
というか、キーボードとかのデータを送るソフトから、その送り先のパソコンで任意のコードが実行できるバグは酷くないか。
普通に書いていれば通信部分でオーバーフローとか起こさないと思うのだがなあ。

そうか、そのおかげで相手のIPアドレスが分かったんだな。
そういうことにしておこう。

1028774さん:2008/12/07(日) 21:01:03 ID:CENbthlg0
どうして、気象APIが有料なんだよ。
XMLでロハでデータを提供してくれるんじゃないのかよ。
死んで給え。

1029774さん:2008/12/07(日) 21:01:36 ID:CENbthlg0
どう考えても死にたまえの方が敬語として適切です。

1030774さん:2008/12/07(日) 21:05:34 ID:CENbthlg0
WizardBibleが全然でないなあと思ったので、掲示板を覗いてみたら今週の火曜日が原稿の締め切りだそうだ。
という事は、今週の週末には出るのかな。
最近は分量が少ないので読み応えがない気がするが、まあ理解できてないので意味ないかw

http://wizardbible.org/

1031774さん:2008/12/07(日) 21:07:11 ID:CENbthlg0
Firefoxはリンクをクリックしたりだとか、検索したときの動作が今開いているタブに対して起こるのだが、
その動作は中クリックで行えば大抵新しいウィンドウで出るみたい。
リンクバーとかも然り。

1032774さん:2008/12/07(日) 21:07:25 ID:CENbthlg0
Sleipnirもこういう風になってほしい。

1033774さん:2008/12/08(月) 19:21:02 ID:CENbthlg0
プログラマの思索: Subversionを見直せ
http://forza.cocolog-nifty.com/blog/2008/12/subversion-390f.html

1034774さん:2008/12/09(火) 18:58:17 ID:CENbthlg0
Firefox拡張機能(Extention)の簡単な作り方メモ at HouseTect, JavaScripter Blog
http://hisasann.com/housetect/2008/12/firefoxextention.html
新米Linux管理者がよくやる10の間違い - IT業界を生き抜く秘密10箇条 - ZDNet Japan
http://japan.zdnet.com/sp/feature/07tenthings/story/0,3800082984,20384928,00.htm
ブラウザで X86 のマシン語を動かす! Google 謹製 Native Client をさっそく試してみる - IT戦記
http://d.hatena.ne.jp/amachang/20081209/1228804423

1035774さん:2008/12/09(火) 18:58:33 ID:CENbthlg0
便利なjQueryプラグインいろいろ:phpspot開発日誌
http://phpspot.org/blog/archives/2008/12/jquery_6.html

1036774さん:2008/12/09(火) 18:58:44 ID:CENbthlg0
mixiや楽天の「中の人」、インフラエンジニアを語る − @IT
http://www.atmarkit.co.jp/news/200812/08/infla.html

1037774さん:2008/12/09(火) 19:07:06 ID:CENbthlg0
>>1034
なんかGoogleたん、俺がやったら面白いなあと思っていることをやっている気がしなくは無いが、
良くx86のエミュレータを作るなあと。
独自のコンパイラを作っているのかねえ?

FirefoxのExtensionの作り方メモ良いねえ。
だけれども、SleipnirのUserAction見たいな風に簡単に追加できないのは痛いぜ。

1038774さん:2008/12/09(火) 19:20:48 ID:CENbthlg0
http://update.fenrir.co.jp/smartupdate/version.txt

1039774さん:2008/12/09(火) 19:39:34 ID:CENbthlg0
http://update.fenrir.co.jp//smartupdate/release_detail2.php?lang=1041&amp;os=WindowsXP+Service+Pack+3&amp;charset=unicode&amp;build=2802402&amp;type=archive

1040774さん:2008/12/09(火) 20:00:29 ID:CENbthlg0
タスクマネージャさん。


---------------------------
タスク マネージャの警告
---------------------------
警告: プロセスを終了すると、データが失われたり、システムが
不安定になったりするなどの、予期しない結果になることがあります。
プロセスを終了する前に、状態またはデータを保存するかどうかの
確認メッセージは表示されません。プロセスを終了しますか?
---------------------------
はい(Y) いいえ(N)
---------------------------

とか出しているCPU時間があったら、すぐさま終了してください。

1041774さん:2008/12/09(火) 20:04:59 ID:CENbthlg0
[SmartUpdater]
LastCheckTime="14729"

[SmartUpdaterVersionInfo]
ClientVersion="2802"
IsExistNewUpdate="true"
ServerVersion="2804"
ServerKind="4"
ServerNumber="1"
ServerBuildNo="0"
LastTimeShowedUpdateDialog="14729"

1042774さん:2008/12/09(火) 20:19:53 ID:CENbthlg0
さて、Sleipnirが起動を行うたびに、バージョンチェックを行えるようにしたい。
書き換えれば良いのは、
[SmartUpdater]
LastCheckTime=""
だけで良いと思う。

1043774さん:2008/12/09(火) 20:20:29 ID:CENbthlg0
OllyDbgでSleipnir.exeを、おや、後ろから人が来たようだ。

1044774さん:2008/12/09(火) 20:36:12 ID:CENbthlg0
http://www.sleipnir-wiki.jp/index.php?Tips#other_autostart
を使うにもタイミングが・・・

1045774さん:2008/12/09(火) 20:40:44 ID:CENbthlg0
まあ、取り敢えず書いてみよう。

1046774さん:2008/12/10(水) 18:24:55 ID:CENbthlg0
#define STRICT 1

#if !defined(UNICODE) && !defined(_UNICODE)
#error UNICODE版でしかコンパイル出来んぞい。
#endif

#include <iostream>
#include <cstdio>
#include <string>
#include <windows.h>
#include <lmcons.h>
#include <tchar.h>

using namespace std;

bool IsFileExist(wstring str){
FILE *file = _wfopen(str.c_str(), L"rb");
if(!file)
return false;
fclose(file);
return true;
}

//user.iniの入っているフォルダを頑張って探す
wstring GetSettingPath(){
WCHAR cur[MAX_PATH + 1];
GetCurrentDirectoryW(sizeof(cur) / sizeof(cur[0]) - 1, cur);

wstring currentPath(cur);

int UseAppData = 0, MultiUser = 1; //デフォルトらしい。:http://www.sleipnir-wiki.jp/index.php?Tips#w534cfdd
if(IsFileExist(currentPath + L"\\Sleipnir.Property")){ //存在するか
UseAppData = (int)GetPrivateProfileIntW(L"Setting", L"UseAppData", UseAppData, (currentPath + L"\\Sleipnir.Property").c_str());
MultiUser = (int)GetPrivateProfileIntW(L"Setting", L"MultiUser", MultiUser, (currentPath + L"\\Sleipnir.Property").c_str());
}

wstring base;
switch(UseAppData){
case 0:{ //Sleipnirインストールフォルダ以下
base = currentPath + L"\\..\\settings";

break;
}

case 1:{ //各ユーザーのApplication Dataフォルダ以下
base = L"%USERPROFILE%\\..";

break;
}

default:
return wstring(L"");
}
switch(MultiUser){
case 0:{ //All Users
base += L"\\All Users";
break;
}

case 1:{
WCHAR userName[UNLEN + 1];
DWORD size = sizeof(userName) / sizeof(userName[0]) - 1;
GetUserNameW(userName, &size);
base += L"\\";
base += userName;
break;
}

default:
return wstring(L"");
}
if(UseAppData == 1){
//TODO;
return wstring(L"");
}

return base;
}

int main(int argc, char **argv){
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); //Sleipnirの起動処理よりも早く
wstring settingPath = GetSettingPath();
if(settingPath == L"") return -1;
wstring userIniPath = settingPath + L"\\setting\\user.ini";

if(IsFileExist(userIniPath))
WritePrivateProfileStringW(L"SmartUpdater", L"LastCheckTime", L"\"14727\"", userIniPath.c_str());
}

1047774さん:2008/12/10(水) 18:26:03 ID:CENbthlg0
書いたんだけれども、意味がないことが発覚orz...........
TODOはアプリケーションデータへのパスに書き換えるだけ。
まあ、もう意味が無いことが分かったのでもう良いや。

1048774さん:2008/12/10(水) 18:42:34 ID:CENbthlg0
mootoh.log - Native Client
http://blog.deadbeaf.org/2008/12/09/google-native-client/

1049774さん:2008/12/10(水) 18:45:14 ID:CENbthlg0
find/grep/xargsコマンドを使いこなす 業務で楽するためのUNIXテクニック集「検索」編:CodeZine
http://codezine.jp/article/detail/3279

1050774さん:2008/12/10(水) 19:05:39 ID:CENbthlg0
そうだ!
アセンブリ言語も言語も勉強したんだし、Sleipnir.exeを直接書き換えてコードを直接埋め込めば良いじゃん!
俺頭良い!

アセンブリコードを書く練習にもなるし、一石二鳥!
よし頑張る。

1051774さん:2008/12/10(水) 19:06:25 ID:CENbthlg0
ああ、
だけれども辞めておこう。
ちょっと色々と、ゴフンゴフン。

1052774さん:2008/12/10(水) 19:21:53 ID:CENbthlg0
Linux のアセンブラー: GAS と NASM を比較する
http://www.ibm.com/developerworks/jp/linux/library/l-gas-nasm.html
------
今更ながらこのサイトが良いサイトだと気がついた。

1053774さん:2008/12/10(水) 19:58:33 ID:CENbthlg0
Welcome to JOI
http://www.ioi-jp.org/joiTrial/
-----
出たい!出たい!出たい!出たい!出たい!出たい!出たい!出たい!

1054774さん:2008/12/10(水) 20:42:41 ID:CENbthlg0
PEファイルについての、詳細な資料が見つからない。
だから自分で作るぜ。

1055774さん:2008/12/10(水) 22:09:17 ID:CENbthlg0
Windows の神髄 目次 - プログラミング徹底解説
http://keicode.com/windows/index.php

1056774さん:2008/12/10(水) 22:09:35 ID:CENbthlg0
>>1054
とか言って、作ってない。
まあ出来たしいいや。

1057774さん:2008/12/10(水) 23:29:23 ID:CENbthlg0
あの・・・
アセンブリ言語ってこんなに疲れるんですか?
-----
section .text
global _start
_start:
;GetBaseAddressの呼び出し
push dword [esp] ;RetAdをプッシュ
call GetBaseAddress
add esp, 4

cmp eax, 0
je error

;OreGetProcAddressの呼び出し
push psGetProcAddress
push eax
call OreGetProcAddress
add esp, 8

cmp eax, 0
je error

;終わり
xor eax, eax
ret
error:
mov eax, 1
ret

psGetProcAddress:
db "GetProcAddress", 0

;第一引数 DLLのベースポインタ
;第二引数 手に入れる関数の名前
;返却 見つかったらそのアドレス、無いならば0
OreGetProcAddress:
;スタックフレームる
;[ebp] : NumberOfNames
;[ebp - 4] : AddressOfFunctions
;[ebp - 8] : AddressOfNames
;[ebp - 0Ch] : AddressOfNameOrdinals
;[ebp - 10h] : baseAddress
push ebp
mov ebp, esp
sub esp, 14h

;IMAGE_NT_HEADERS32構造体へのアドレスを取得(edi)
mov ecx, dword [ebp + 8] ;第一引数
mov edi, dword [ecx + 3Ch] ;IMAGE_NT_HEADERS32
add edi, ecx ;ベースポインタを足す

;IMAGE_NT_HEADERS32::IMAGE_OPTIONAL_HEADER32::DataDirectoryのアドレス取得(eax)&
;エクスポートテーブル(IMAGE_EXPORT_DIRECTORY)のアドレス取得(edi)
xor eax, eax
mov ax, word [edi + 14h] ;SizeOfOptionalHeader
lea eax, [edi + eax + 18h] ;IMAGE_NT_HEADERS32全体の大きさを足す
sub eax, 80h ;DataDirectory分引く 80h == sizeof(IMAGE_DATA_DIRECTORY) * 16
mov edi, dword [eax] ;エクスポートテーブルのアドレス取得
add edi, ecx

;ここまでで
;ecx : DLLのベースポインタ, edi : エクスポートテーブル(IMAGE_EXPORT_DIRECTORY)のアドレス

;NumberOfNames格納
mov eax, dword [edi + 18h]
mov [ebp], eax

;AddressOfFunctions格納
mov eax, dword [edi + 1Ch]
add eax, ecx
mov dword [ebp - 4], eax

;AddressOfNames格納
mov eax, dword [edi + 20h]
add eax, ecx
mov dword [ebp - 8], eax

;AddressOfNameOrdinals格納
mov eax, dword[edi + 24h]
add eax, ecx
mov dword [ebp - 0Ch], eax

;ベースアドレス退避
mov dword [ebp - 10h], ecx

;API名の検索
mov esi, dword [ebp - 8]
mov edx, esi
mov edi, dword [esi]
add edi, ecx
xor ecx, ecx
mov ebx, dword [ebp + 0Ch]


OreGetP_loop:
mov esi, ebx

OreGetP_check:
;API名が一致か?
cmpsb
jne OreGetP_next

cmp byte [edi], 0 ;終端か?
jne OreGetP_check
cmp byte [esi], 0 ;終端か?
jne OreGetP_check
jmp OreGetP_found

OreGetP_next:
inc ecx
cmp ecx, dword [ebp]
jge OreGetP_notfound

add edx, 4
mov esi, edx
mov edi, dword [esi]
add edi, dword [ebp - 10h]
jmp OreGetP_loop

OreGetP_found:
mov ebx, esi
inc ebx
shl ecx, 1
mov esi, dword [ebp - 0Ch]
add esi, ecx
xor eax, eax
mov ax, word [esi]
shl eax, 2
mov esi, [ebp - 4]
add esi, eax
mov edi, dword [esi]
add edi, dword [ebp - 10h]
mov eax, edi

leave
ret

OreGetP_notfound:
xor eax, eax
leave
ret

;第一引数 適当なアドレス
;返却 PEヘッダとかが見つかったらそのアドレス、無いならば0
GetBaseAddress:
;リミッター
mov ecx, 10h
;Kernel32へのRetAd
mov eax, dword [esp + 4]
;マスク
and eax, 0FFFF0000h
GetK_roop:
;リミッターのチェック
test ecx, ecx ;cmp ecx, 0
je GetK_notfound
;MZシグネチャのチェック
cmp word[eax], 'MZ'
je GetK_check_PE
GetK_next:
;次へ
sub eax, 10000h
dec ecx
jmp GetK_roop
GetK_check_PE:
;PEのチェック
mov edi, [eax + 3Ch] ;IMAGE_DOS_HEADER::e_lfanew : File address of new exe header
add edi, eax
cmp dword [edi], 00004550h ;'PE\0\0'
je GetK_end
jmp GetK_next
GetK_notfound:
xor eax, eax
GetK_end:
ret

1058774さん:2008/12/10(水) 23:30:19 ID:CENbthlg0
GetProcAddressをアセンブリで実装する馬鹿がここに居ますよwwww
まあ、殆どが某サイトからのパクリなんですが。

1059774さん:2008/12/11(木) 00:02:36 ID:CENbthlg0
.textセクションだけで動くので、他のexeに仕込むのも簡単だね!
これでウィルスが作れる><

1060774さん:2008/12/11(木) 00:28:03 ID:CENbthlg0
何かするときにGetProcAddressで関数を読み込むのが面倒だな。
まあ、仕方ない。
それがアセンブリ言語。

1061774さん:2008/12/11(木) 00:42:23 ID:CENbthlg0
Acidテストが通ったからって、正しく表示できるとは限らない。

1062774さん:2008/12/11(木) 00:45:05 ID:CENbthlg0
ジョイントかなんかしらんが、そこらへんは間にセパレータを挟むとかそういうので判断しているのかな。

1063774さん:2008/12/11(木) 00:50:33 ID:CENbthlg0
Sleipnirも然り、Lunascapeも然りなんだけれども、まだブラウザとしては完成してない。
少なくとも、クッキーとパスワードは共有できるようにしろ。

1064774さん:2008/12/11(木) 00:58:21 ID:CENbthlg0
ClassFinderXPで覗いてみたら、凄いにはLunascapeの開発の人じゃなくてBCGToolBaraの中の人だと思った。

1065774さん:2008/12/11(木) 01:01:14 ID:CENbthlg0
つまりLunascapeすげえええええええ、って思っていたところは見当違いだったっていうことだ。

1066774さん:2008/12/11(木) 18:32:37 ID:CENbthlg0
JOI登録した!

1067774さん:2008/12/11(木) 18:32:55 ID:CENbthlg0
これで、予選に参加できるお

1068774さん:2008/12/11(木) 18:57:45 ID:CENbthlg0
ProcessIdの一覧は取得出来たのだが、そのプロセスのパスを取得する方法が分からない。

1069774さん:2008/12/11(木) 19:25:11 ID:CENbthlg0
ああ、面倒くさい。
もう辞めた。
まあ、方針としては、Sleipnirのプロセスハンドルを手に入れてWaitForSingleObjectで終了まで待って、終わったら、色々と解析して(ry
-----
#define STRICT 1

#if !defined(UNICODE) && !defined(_UNICODE)
#error UNICODE版でしかコンパイル出来んぞい。
#endif

#pragma comment(lib, "psapi.lib")

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <windows.h>
#include <lmcons.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <tchar.h>

using namespace std;

bool IsFileExist(wstring str){
FILE *file = _wfopen(str.c_str(), L"rb");
if(!file)
return false;
fclose(file);
return true;
}

//user.iniの入っているフォルダを頑張って探す
wstring GetSettingPath(){
WCHAR cur[MAX_PATH + 1];
GetCurrentDirectoryW(sizeof(cur) / sizeof(cur[0]) - 1, cur);

wstring currentPath(cur);

int UseAppData = 0, MultiUser = 1; //デフォルトらしい。:http://www.sleipnir-wiki.jp/index.php?Tips#w534cfdd
if(IsFileExist(currentPath + L"\\Sleipnir.Property")){ //存在するか
UseAppData = (int)GetPrivateProfileIntW(L"Setting", L"UseAppData", UseAppData, (currentPath + L"\\Sleipnir.Property").c_str());
MultiUser = (int)GetPrivateProfileIntW(L"Setting", L"MultiUser", MultiUser, (currentPath + L"\\Sleipnir.Property").c_str());
}

wstring base;
switch(UseAppData){
case 0:{ //Sleipnirインストールフォルダ以下
base = currentPath + L"\\..\\settings";

break;
}

case 1:{ //各ユーザーのApplication Dataフォルダ以下
base = L"%USERPROFILE%\\..";

break;
}

default:
return wstring(L"");
}
switch(MultiUser){
case 0:{ //All Users
base += L"\\All Users";
break;
}

case 1:{
WCHAR userName[UNLEN + 1];
DWORD size = sizeof(userName) / sizeof(userName[0]) - 1;
GetUserNameW(userName, &size);
base += L"\\";
base += userName;
break;
}

default:
return wstring(L"");
}
if(UseAppData == 1){
//TODO;
return wstring(L"");
}

return base;
}

int main(int argc, char **argv){
HANDLE hEnum = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hEnum == INVALID_HANDLE_VALUE) return -1;
PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);

Process32First(hEnum, &pe);
HANDLE hSleipnir = NULL;
do{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe.th32ProcessID);
if(hProcess){
HMODULE hMod;
DWORD needed;
EnumProcessModules(hProcess, &hMod, sizeof(hMod), &needed);
WCHAR path[MAX_PATH + 1];
GetModuleFileNameEx(hProcess, hMod, path, sizeof(path) / sizeof(path[0]) - 1);
int i = 0;
i++;
}
}while(Process32Next(hEnum, &pe));
CloseHandle(hEnum);


wstring settingPath = GetSettingPath();
if(settingPath == L"") return -1;
wstring userIniPath = settingPath + L"\\setting\\user.ini";

if(IsFileExist(userIniPath))
WritePrivateProfileStringW(L"SmartUpdater", L"LastCheckTime", L"\"14727\"", userIniPath.c_str());
}

1070774さん:2008/12/11(木) 20:45:24 ID:CENbthlg0
同一フォルダ内のSleipnirが一つでも起動していると終了しないプログラム。
-----
#define STRICT 1

#if !defined(UNICODE) && !defined(_UNICODE)
#error UNICODE版でしかコンパイル出来んぞい。
#endif

#pragma comment(lib, "psapi.lib")

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <windows.h>
#include <lmcons.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <tchar.h>

using namespace std;

std::vector<DWORD> GetSleipnirProcessId(){
std::vector<DWORD> ret;

HANDLE hEnum = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hEnum != INVALID_HANDLE_VALUE){
PROCESSENTRY32W ps = {sizeof(ps)};

if(Process32FirstW(hEnum, &ps)){
WCHAR curpath[MAX_PATH + 1];
DWORD curProcessId = GetCurrentProcessId();
if(GetCurrentDirectoryW(sizeof(curpath) / sizeof(curpath[0]) - 1, curpath)){
CharLowerBuffW(curpath, lstrlenW(curpath));
do{
if(curProcessId != ps.th32ProcessID){
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ps.th32ProcessID);
if(hProcess){
DWORD dummy;
HMODULE hMod;
if(EnumProcessModules(hProcess, &hMod, sizeof(hMod), &dummy)){
WCHAR path[MAX_PATH + 1];
if(GetModuleFileNameExW(hProcess, hMod, path, sizeof(path) / sizeof(path[0]) - 1)){
unsigned int len = lstrlenW(path);
CharLowerBuffW(path, len);
if(curpath[0] == path[0]){
while(path[--len] != L'\\');
path[len] = L'\0';
if(path[len + 1] && path[len + 2] && path[len + 3] && path[len + 4] && path[len + 5] && path[len + 6] && path[len + 7] && path[len + 8] && path[len + 1] == L's' && path[len + 2] == L'l' && path[len + 3] == L'e' && path[len + 4] == L'i' && path[len + 5] == L'p' && path[len + 6] == L'n' && path[len + 7] == L'i' && path[len + 8] == 'r'){
if(lstrcmpW(path, curpath) == 0){
ret.push_back(ps.th32ProcessID);
}
}
}
}
}
}
CloseHandle(hProcess);
}
}while(Process32NextW(hEnum, &ps));
}
}
}
return ret;
}

int main(int argc, char **argv){
//SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
std::vector<DWORD> sleipnirs = GetSleipnirProcessId();
while(1){
unsigned int len = sleipnirs.size();
if(len == 0)
break;

HANDLE *p = (HANDLE *)std::malloc(len * sizeof(HANDLE));
for(unsigned int i = 0; i < len; ++i){
p[i] = OpenProcess(SYNCHRONIZE, FALSE, sleipnirs[i]);
}

WaitForMultipleObjects(len, p, TRUE, INFINITE);

for(unsigned int i = 0; i < len; ++i){
CloseHandle(p[i]);
}

std::free(p);
sleipnirs = GetSleipnirProcessId();
}

}

1071774さん:2008/12/11(木) 20:45:58 ID:CENbthlg0
lstrncmpがなかったからハードコートしてやったww

1072774さん:2008/12/11(木) 20:46:12 ID:CENbthlg0
ハードコード

1073774さん:2008/12/11(木) 21:12:12 ID:CENbthlg0
Native Clientの仕組みはどうなっているのか? - やねうらお−よっちゃんイカはしばらく買わずにiPhoneだけに注力する男
http://d.hatena.ne.jp/yaneurao/20081211#p1
Native Client必死こいて訳した1 - Yet Another Ranha
http://d.hatena.ne.jp/ranha/20081210/1228889363
jQuery を高速に使う CSS セレクタの書き方 - てっく煮ブログ
http://d.hatena.ne.jp/nitoyon/20081211/jquery_fast_css

1074774さん:2008/12/12(金) 19:02:42 ID:CENbthlg0
JOI 2006 予選 問題4
http://www.ioi-jp.org/joi/2005/2006-yo-prob_and_sol/2006-yo-t4.html
-----
こういう問題だけは出るな・・・

1075774さん:2008/12/12(金) 19:04:12 ID:CENbthlg0
Win32::GuiTest で Windows の GUI アプリをハックしよう
http://perl-users.jp/articles/advent-calendar/2008/13.html
.htaccessで使える16の技:phpspot開発日誌
http://phpspot.org/blog/archives/2008/12/htaccess16.html

1076774さん:2008/12/12(金) 20:09:16 ID:CENbthlg0
>>1074
問題読んでいなかったらミスったwwwwwwwwww

1077774さん:2008/12/12(金) 20:16:30 ID:CENbthlg0
二つ横に移動させるときに一回動かして、チェックしてもう一回(ry
見たいなことをやれば良いんだ!


新着レスの表示


名前: E-mail(省略可)

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

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

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

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