2017年02月06日

マイクラの新インストーラーについて調べてみた

マインクラフトのインストーラーが新しくなったという話を聞いたので、うちのWindows 2000で色々調べてみました
以下分かった事です。

・ダウンロードできる MinecraftInstaller.msi は 2015年1月のまま
・なのでインストールされるJava 8 は Update 25 のまま
・自動インストールされる Minecraft.exe は以下の物
http://launcher.mojang.com/mc/launcher/win/7dbb83a4ffb116a3c37230ec727e30298990c365/Minecraft.exe
・起動される MinecraftLauncher.exe が Windows 2000 互換モードだと強制的にクラッシュさせられる
・起動される MinecraftLauncher.exe が Windows 7 互換モードだと新インストーラーがダウンロードされる
・ダウンロードされた 新ランチャーは MinecraftLauncher.exe が Launcher.dll を動的に呼び出して起動する。
・新ランチャーはChrome コンポーネントを使っているので libcef.dll が配下のフォルダに存在する
・バージョンを調べると 3.2840.1511.0、Windows 7以降の専用命令てんこ盛りバージョン。
・リンクしている関係上 CEF 3.2704.1434 なら使えるはずなので入れてみる。

 L100A160F:
          lea    eax,[ebp-000000FCh]
          mov    dword ptr [ebp-04h],FFFFFFFFh
          push    eax
          call    SUB_L100B4740 // <- 使ってるCEFのライブラリバージョンをチェックして
                                               // 第一引数にライブラリアドレスを格納。
                                              // バージョンが違ってたら NULLが入る
          add    esp,00000004h
          call    [KERNEL32.dll!GetCommandLineW]
          mov    dword ptr [ebp-1Ch],L1016FF20
          mov    dword ptr [ebp-18h],00000000h
          mov    byte ptr [ebp-14h],00h
          test    eax,eax
          jz     L100A1668
          push    eax
          lea    ecx,[ebp-48h]
          call    SUB_L10098D40
          push    eax
          lea    ecx,[ebp-1Ch]
          call    SUB_L100A0F10
          mov    eax,[ebp-34h]
          cmp    eax,00000008h
          jc     L100A1668
          inc    eax
          lea    ecx,[ebp-48h]
          push    eax
          push    [ebp-48h]
          call    SUB_L1000D400
 L100A1668:
          mov    ecx,[ebp-000000FCh]
          lea    edx,[ebp-1Ch]
          push    edx
          mov    eax,[ecx]               //ライブラリバージョンが違ってたら、
                                                     //エラーもなくクラッシュする素敵仕様

          call    [eax+10h]
・Chromium Embedded Framework のバージョンをチェックして、違っていたら、有無を言わせずクラッシュさせる素敵仕様であることが発覚。(例えば、 system32 に別バージョンのCEF をインストールをインストールしていれば環境によってはクラッシュする)

つまり、

・MinecraftLauncher.exe を Vista 未満の互換モードで起動すると古い奴がそのまま使える。
・Java は 8 Update 25をダウンロードしてくれる素敵仕様のまま
・新 ランチャーはChromium Embedded Framework を使ってるけど、ランチャー自体がバッファーチェックすらしないゴミのような仕様。セキュリティホールもあると思われる。
・新ランチャーが手抜きなのは確実(ファイルの作成日時は2017/02/09 15時)
la
・インストーラーフォルダに、プログラムのインポート ライブラリ (.lib) とエクスポート ファイル (.exp)  も同梱してくれる親切設計!(要するにゴミファイル)

やっぱり、マイクロソフトが買収すると、何もかもゴミになりますね・ω・!



blackwingcat at 08:30|PermalinkComments(1)TrackBack(0) | Games | Java / Ruby

2017年02月05日

Windows 2000向けQueryUnbiasedInterruptTime

_declspec(dllexport) _declspec(naked)
void WINAPI QueryUnbiasedInterruptTime(PULONGLONG pos){
// (c)2017 BlackWingCat
    _asm{
        push        ebp
        mov         ebp,esp
        sub esp,0x14

        lea eax,[ebp-0xc]
        push eax
        call DWORD PTR [QueryPerformanceFrequency]
       
        lea eax,[ebp-0x14]
        push eax
        call DWORD PTR [QueryPerformanceCounter]

        wait
        fnstcw      word ptr [ebp-2]
        wait

        fild qword ptr [ebp-0x14]
        and dword ptr [ebp-0x14],0
        mov dword ptr [ebp-0x14+4],0x416312d0
        fmul qword ptr [ebp-0x14]
        fild qword ptr [ebp-0xc]
        fdivp st(1),st
        mov ecx,[ebp+8]

        mov         ax,word ptr [ebp-2]
        or          ah,0Ch
        mov         word ptr [ebp-4],ax
        fldcw       word ptr [ebp-4]
        fistp       qword ptr [ecx]

        fldcw       word ptr [ebp-2]
        leave
        retn 4
    }
}
FPUとパフォーマンスカウンタを使って100nsec 精度のQueryUnbiasedInterruptTime をエミュレートする関数作ってみた・ω・

次の拡張カーネルに実装予定

FPUプログラミング初めてやってみたら、関数ループさせるとなぜかスタックオーバーフローが発生してめちゃくちゃ悩んだ。
単に、FPUのインデックスレジスタがステータスレジスタに格納されていて、そこがあふれると計算できなくなるので
fnstcw / fldcw で保存・復元する必要があったようだ・ω・

時刻・時間のしくみ - .mjtの日記復帰計画



blackwingcat at 12:30|PermalinkComments(0)TrackBack(0) | Win2000拡張カーネル | Driver/API

2017年02月04日

ftol2 の関数を調べてみて分かった事

ftol は float(浮動小数点) から long 型、
ftol2 は float(浮動小数点) から long^2 型つまりlonglong型64bit 整数に変換する関数だと長いこと思っていました。

ところが、VC++ のインライン関数を調べてみるとそうでないことが分かりました

_ftol2_sse:
00411640 83 3D B8 75 41 00 00 cmp         dword ptr [___sse2_available (4175B8h)],0
00411647 74 2D            je          _ftol2 (411676h)
_ftol2_pentium4:
00411649 55               push        ebp  
0041164A 8B EC            mov         ebp,esp
0041164C 83 EC 08         sub         esp,8
0041164F 83 E4 F8         and         esp,0FFFFFFF8h
00411652 DD 1C 24         fstp        qword ptr [esp]
00411655 F2 0F 2C 04 24   cvttsd2si   eax,mmword ptr [esp]
0041165A C9               leave            
0041165B C3               ret              

_ftol2_sse_excpt:
0041165C 83 3D B8 75 41 00 00 cmp         dword ptr [___sse2_available (4175B8h)],0
00411663 74 11            je          _ftol2 (411676h)
00411665 83 EC 04         sub         esp,4
00411668 D9 3C 24         fnstcw      word ptr [esp]
0041166B 58               pop         eax  
0041166C 66 83 E0 7F      and         ax,7Fh
00411670 66 83 F8 7F      cmp         ax,7Fh
00411674 74 D3            je          _ftol2_pentium4 (411649h)
_ftol2:
00411676 55               push        ebp  
00411677 8B EC            mov         ebp,esp
00411679 83 EC 20         sub         esp,20h
0041167C 83 E4 F0         and         esp,0FFFFFFF0h
0041167F D9 C0            fld         st(0)
00411681 D9 54 24 18      fst         dword ptr [esp+18h]
00411685 DF 7C 24 10      fistp       qword ptr [esp+10h]
00411689 DF 6C 24 10      fild        qword ptr [esp+10h]
0041168D 8B 54 24 18      mov         edx,dword ptr [esp+18h]
00411691 8B 44 24 10      mov         eax,dword ptr [esp+10h]

00411695 85 C0            test        eax,eax
00411697 74 3C            je          integer_QnaN_or_zero (4116D5h)
arg_is_not_integer_QnaN:
00411699 DE E9            fsubp       st(1),st
0041169B 85 D2            test        edx,edx
0041169D 79 1E            jns         positive (4116BDh)
0041169F D9 1C 24         fstp        dword ptr [esp]
004116A2 8B 0C 24         mov         ecx,dword ptr [esp]
004116A5 81 F1 00 00 00 80 xor         ecx,80000000h
004116AB 81 C1 FF FF FF 7F add         ecx,7FFFFFFFh
004116B1 83 D0 00         adc         eax,0
004116B4 8B 54 24 14      mov         edx,dword ptr [esp+14h]
004116B8 83 D2 00         adc         edx,0
004116BB EB 2C            jmp         localexit (4116E9h)
positive:
004116BD D9 1C 24         fstp        dword ptr [esp]
004116C0 8B 0C 24         mov         ecx,dword ptr [esp]
004116C3 81 C1 FF FF FF 7F add         ecx,7FFFFFFFh
004116C9 83 D8 00         sbb         eax,0
004116CC 8B 54 24 14      mov         edx,dword ptr [esp+14h]
004116D0 83 DA 00         sbb         edx,0
004116D3 EB 14            jmp         localexit (4116E9h)
integer_QnaN_or_zero:
004116D5 8B 54 24 14      mov         edx,dword ptr [esp+14h]
004116D9 F7 C2 FF FF FF 7F test        edx,7FFFFFFFh
004116DF 75 B8            jne         arg_is_not_integer_QnaN (411699h)
004116E1 D9 5C 24 18      fstp        dword ptr [esp+18h]
004116E5 D9 5C 24 18      fstp        dword ptr [esp+18h]
localexit:
004116E9 C9               leave            
004116EA C3               ret              
赤文字のところに注目、これ、どう見ても、double から 32bit long 型への変換

ftol2_sse やftol2_pentium4 は、 ftol2 の名前を関してるにもかかわらず、変換先が longlong ではなかったという
|。・ω・) 。o (えー!なんで?)

一方の、 ftol2 の素の処理をみると、ちゃんと 64bit long long で処理を行っている。

試行錯誤してみたら、
int ii=(double)xx;
のような処理は ftol2_sse がコールされるけど、
long long ii=(double)xx;
のような処理は ftol2 がコールされることが分かったよ・ω・

だるだる団 DaruDaruDan プログラムメモ - (PC,Android,OpenGL)
Visual C++ 2002 以降では float/double から__int64/int の変換に_ftol2 を使い、
2005 以降では更に float/double から int の変換に _ftol2_sse を試行した後
_ftol2 を使用する。
これらの関数の中では浮動小数点制御ワードの変更を行わず切り捨てを実現する。
_ftol2 の中では浮動小数点のビット表現を利用した計算のみで切り捨てを行う。
確かにこの通りになった。

c++ - _ftol2_sse, are there faster options? - Stack Overflow
global _startsection
.dataalign 16

section
.text_start:
   cvtps2dq  xmm1, [fv1]
; Convert four 32-bit(single precision)
;floats to 32-bit(double word) integers
;and place the result in xmm1
速くなるかな?と思ったら 4つの浮動小数点を32bitの4つの結果に格納なので違った・ω・

c++ - Incorrect double to long conversion - Stack Overflow
これを見ると、VC++2010以前のftol2にはバグがある(一番上のコード)って書いてる。

    push        ebp
    mov         ebp,esp
    add         esp,0FFFFFFF4h
    wait
    fnstcw      word ptr [ebp-2]
    wait
    mov         ax,word ptr [ebp-2]
    or          ah,0Ch
    mov         word ptr [ebp-4],ax
    fldcw       word ptr [ebp-4]
    fistp       qword ptr [ebp-0Ch]
    fldcw       word ptr [ebp-2]
    mov         eax,dword ptr [ebp-0Ch]
    mov         edx,dword ptr [ebp-8]
    leave
    ret
大人しくこれ使うしかないのかしら・ω・(VC++6のコード)

    LONGLONG ull = 0xf000000000000000;
    printf("%I64X\n",ull);
    double xx=ull;
    printf("%f\n",xx);
    LONGLONG tt=xx;
    printf("%I64X\n",tt);
試してみたら、普通に表示できた・ω・;
なるほどわからん!



blackwingcat at 12:30|PermalinkComments(0)TrackBack(0) | Programing | Windows全般

2017年02月03日

cURL のインストーラーが ゴミレベルだった話

Windows2000SP4で動かしていただきたいアプリがあります

cURL for Windows

です。www.confusedbycode.com/curl/の
curl-7.46.0-win32.exeを試していますが、
.NETのバージョンが違うとハネられてしまいます
2.0SP2と、こちらのサイトの4.0.3を入れてみたのですがNGです
とのことだったので、試してみようと思ったのですが

この cURL.exe ZIP版解凍して入れてみた所 起動にVC Runtime 14 (Visual Studio 2015)を要求されるものの、.Net Framework なんて使っていないことが判明・ω・

.Net の入ってないWindows 2000で curl-7.46.0-win32.exe を起動してみると、ファイルを解凍した後、エラーも出ずに終了。

この、cURLInstaller.exe を見て見ると、mscoree.dll に直接リンクしてることが判明。
|。・ω・) 。o ( なにこれ、 アプリ本体は .Net 使わないのに、インストーラーが .Net で作られてるの?)

curl
どうやら、インストールするだけの為に、 .Net 4を要求するアプリ
全くナンセンスだ・ω・

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at cURLInstaller.DependencyChecker.GetRegistryKeys()
   at cURLInstaller.DependencyChecker.IsRuntimeInstalled()
   at cURLInstaller.MainWindow.Form1_Load(Object sender, EventArgs e)
   at System.EventHandler.Invoke(Object sender, EventArgs e)
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
ちなみに、.Net 4 の入った Windows 2000で動かすと、依存性のレジストリチェックで失敗してクラッシュする
面倒だから調べてないけど VC++ 2015 Runtime のチェックかな?

なので

手動で VC++2015 Runtime for Win2000を入れてから zip でインストールするのが正解ですね



blackwingcat at 18:30|PermalinkComments(10)TrackBack(0) | Security | Networkサービス
このエントリーをはてなブックマークに追加
|
livedoor プロフィール
My PC
SNOWSTORM(P5E3 Premium)
OS:Win2000AdvancedSv
CPU:Xeon(4Core) 2.83G
Memory:8G
VGA:NVIDIA GTX 780Ti
HDD:SSD(32G)
    +SATA(540G+180G)
Crystal SCR:244765
SNOWFOX2(W860CU)
CPU:Core i5-540M(2.53G)
OS:Win2000Pro
Memory:4G
VGA:Geforce GTX285M
HDD:SSD(160G)
Crystal SCR:176460
SNOWMOBILE3(CF-J10S)
CPU:Core i5-2410M(2.3G)
VGA:Intel HD Graphics
HDD:SSD(128G)
Windows2000
Memory:6G
Crystal SCR:133495
SNOWMOBILE(N10Jc/故障)
Windows2000/XP Home
Crystal SCR:38316
SNOWLEO(MA206J/A/休止)
OS:OSX 10.4 +
Windows2000Pro(Solo動作)
Crystal SCR:24061
Windows 2000の セキュリティ対策について
FFR yarai(脆弱性防御)
SymantecEndpointSecurity 11 MR7
Windows Defender
記事検索
訪問者数

    今週のアクセス数

    Win2000お勧め
    お勧め記事
    Twitter Client Mo-Footer
    .NET FrameworkのUninstall
    lolifox 0.3.8.x
    WindowsのシャットダウンTips
    Fox Launcher
    ウィルス感染を手動で見つける方法
    Unknown Hard Errorとサルベージ
    Dependency Walker 日本語化
    Ultra VNC 1.0.6/1.0.8 を日本語化
    IME補完計画
    BSoD(ブルースクリーン)特集
    デフラグ時の4つの心得
    不明なデバイス探し
    SETUPAPI/NTDLLBugFix
    DNSデボルブ用更新[KB957579]
    最新 update.sys!
    4Thread以上のCPU最適化
    Win2000マルチコアで最適化
    Windows 2000の通信速度改善1
    Windows 2000の通信速度改善2
    内蔵簡易FireWallを使う
    ワームに感染しないインストール
    Remote Desktop Client
    IME 辞書 Tips
    Win2000用セキュリティSOFT
    不要なファイルの削除
    Win2000カスタマイズ
    便利なキーボードショートカット
    6月末まで使える体験版セキュリティ

    非対応ハード動作編
    HTC NDIS Driver
    Intel HD Graphic Driver
    VMWare Player 3.1.x
    Conexant HD Audio Driver
    NVIDIA WHQL Driver
    Intel Chipset 最新 INF
    Sentelic Finger Pad Driver
    ATI Legacy Driver 10.2
    AMD Radeon Driver 8〜11
    ATI Ahci/Raid Driver
    Intel SATA AHCI Driver
    D21LC(eMobile)
    USB-WSIM
    UVC カメラ
    Logicool Webcam
    Logicool ゲームパッド
    XBOX360用コントローラー
    Logicool Mouse
    Microsoft IntelliPoint
    iPod Touch/iPhone Driver

    非対応アプリ動作編
    Flash Player 10.3
    Java 6 JRE
    Java 7.0 JRE
    ティルズウィーバー
    Natal Online
    コンチェルトゲートフォルテ
    シルクロードオンライン
    東方幻想麻雀
    IME2010 Installer
    Adobe Reader X for Win2000
    Baidu IME 2.x
    MMORPG ドルアーガーの塔
    Adobe Air for Windows 2000
    Baidu IME
    iTunes 10.x installer
    Evernote 4
    Janetter
    Second Life
    雀龍門
    Media Manager for PSP 2.5a
    .NET Framework 3.5SP1
    ATOK 月額版(2010/2011)
    Leaf 愛佳でいくの!!
    VistaのScreenSaver
    会計ソフト弥生シリーズ 10
    Vegas Movie Studio 9
    EyeBall Chat
    ・CanonPowerShot[Soft/DPP]
    Google SketchUp Pro 7
    dance mixer
    Lismo Port
    DivX
    SONY ScreenSaver
    mixi アプリ
    DivX v7.x
    ニコニコムービーメーカー(動画)
    RC-S330 PaSoRi
    Finale 2009
    ZoneAlarm 8.0
    ルナティア Online
    ストリートギアーズ
    xfy Blog Editor
    Photoshop Elements 7
    Premiere Elements 7
    PowerShell 1.0
    ai sp@ce
    電脳フィギュアARis
    VOCALOID2 ミク・リンレン
    Google Chrome/SRW Iron
    Media Player 10
    ・iTunes 7.6.2を使う方法
    QuickTime 7.5x/7.6x
    foobar2000 9.5.x/9.6.x
    RealPlayer11
    Safari3/4.0
    ShockwavePlayer10/11
    Windows Live Writer
    Live Messenger
    Veoh Web Player / Web TV
    Level-R

    追加機能・カスタマイズ編
    W2K Kernel32 改造計画【BM】
    W2K Update Rollup v2
    XNA/SlimDX
    CPU Core数リミット解除
    OutLook Express 6SP3
    MDAC 2.8 SP2
    GIF/PNGを使えるMSPAINT
    IE5でWindowsUpdate
    MSXML 4.0SP3
    DirectX9.0c(2010/Feb)+拡張
    MS09-062(Gdiplus.dll)更新
    Unicode 制御文字
    Internet Explorer6 Bonus Pack
    夏時間(DaylightSavingTime)
    レジストリバックアップを取る
    IME2007
    Windows Media Bonus Pack
    XPSファイルビューア
    Windows Defender
    文字化け対策(FontLink)
    Meirio(KB927489)
    msconfig
    圧縮フォルダ
    Windows Movie Maker
    IE5.01/5.5/6タブ化
    MediaTypeChanger(EISA構成)
    Win2000 SP4 Support Tool
    kill/tlist with Debugging Tools
    sc.exe with Resource kit
    reg.exe
    TaskTray 256色化
    ISO仮想CD/DVDドライバ
    IE6高速化とWSH 5.7/5.8
    MS Baseline Security Analyzer
    音声認識 API 5.1
    Text Service

    Win2000インストール編
    CF-J10S
    N10Jc
    ThinkPad X200(7454)
    Quad Core/X48/P5E3
    VAIO VGN Type S
    E6850搭載 サポートPC
    Let'snote CF-R6
    MacMini
    Dell LATITUDE D630
    Core i7 + X58 +ICH10R
    790FX + SB750
    Clevo W860CU
    最新コメント
    Categories
    アーカイブ
    Information
    Google広告




    Translate


    このサイトはIE5.x/IE6
    IE5.x Internet Explorer 6.x

    Firefox Firefox ブラウザ無料ダウンロード
    で最適化されています。
    Technorati
    Add to iGoogle
    Amazon GIFTでカンパ

    Donation