Quantcast
Channel: RGBA_CRTのWEBLOG
Viewing all 56 articles
Browse latest View live

ナナシノゲエムのデバッグ系のメニュー

$
0
0
ナナシノゲエムのデバッグ系のメニュー

TCRFのナナシノゲエムのページに
>When swapping files, one can get the debug screen and the sound test screen to appear on screen, yet missing functionality.
とあります。要はファイル置き換えたらデバッグ画面とかサウンドテストスクリーンをだせるよと。だたまだそれは機能しないよと。
いうことだと思います(英語苦手)

この記述にはそのほか有力な手掛かりはないので、ナナシノゲエムのROM内のデータをあさってみます。
NDSToolとかdslazyとか使えば簡単に展開・パックができます。

で、展開した先に
data\tra
というフォルダがあると思います。中にtraファイルが大量にあると思います。
おそらくこのtraっていうファイルは画像のレイアウトとかのファイルなんじゃないかなと思います。
(まだ詳しく調べきってないのですが)

その中に、
debug.tra
sndtest.tra
vsndtest.tra
movtest.tra
pcmtest.tra
A04TEST.tra

なんて怪しいファイルがあります。

このファイルを、通常ロードされるファイルと置き換えてやります。
通常ロードされるファイルっていうのはtitle.traとかsaveload.traとか明らかに使ってそうなファイルのことです。

で、これらのファイル名を交換してやり差し替えます。
movtest.tra<---> title.tra

そして再びROMと同じ形式にパックしてやると、
イメージ 1

こんな風にデバッグ用ファイルが呼び出せるというわけです。
完全に呼び出せるわけではありません。sndtestは失敗しました。
でも、TCRFの記事もこのように呼び出していると思います。

ただし、これはあくまでレイアウトを呼び出しているだけで、選択肢を決定した後の分岐は元のプログラム通りになっていて、デバッグができるわけじゃありません。
(例:上の画像はtitle.traとmovtest.traを取り換えているので、選択肢はハジメカラかツヅキカラ、ボタンを押すとどちらかの画面に進んでしまいます。)

現在時間がないので先ほどの6つの怪しいファイルを試せませんが、いつかやります。

いつかサウンドテストに入りたい・・・
以上です。


[メモ]ActiveBasicで作ったDLLをBccで静的リンクする

$
0
0
ActiveBasicで作ったDLLをBccで使う(静的リンクする)

※私はまだちゃんとした文章になってない乱雑な文になると思いますw
※私はまだちゃんと理解していません。
※私はまだC言語に慣れ親しんでいません。

ActiveBasicで作ったDLLをC言語コンパイラであるBorland C++ Compiler 5.5で使ってみたいと思います。

最初に、ActiveBasic製のDllを使うには、

・ActiveBasicはlibファイルを作成しない。
-C言語でDllを静的リンクするにはlibファイルが必要。さらに作成されるLibファイルはVC用の形式。

・ActiveBasicで作成したDllの関数名はモロにそのまんまになる

-Dllには呼び出し方が複数あり、C言語のデフォルトでDllを作った場合、「__cdecl」という呼び出し方(?)があり
関数名にいろいろごちゃごちゃつく。ActiveBasicは、「__stdcall」というWindowsAPIと同じ形式の関数名になる
詳細っぽいもの(Wikipedia)

この2つの問題があります。これらを何とかしていきます。

1 まず、ActiveBasicでDllを作ります。
 -ここでは文字列ポインタを返すHttpGetHeadと、数値を返すGetStatesNoという関数がDllになっているとします
-ActiveBasicでこのDllを参照する場合、
Declare Function HttpGetHead Lib "Network.dll" Alias "HttpGetHead"  (URL As BytePtr) As BytePtr
Declare Function GetStatesNo Lib "Network.dll" Alias "GetStatesNo" (buffer As BytePtr) As Long
という感じで宣言をすれば関数を利用できるものとします。

2 まず1つ目の問題、Libファイルの問題をどうにかしたいと思います。
 -Bccのbinフォルダ内のimplib.exeを利用してlibファイルを作成。引数は作成するLib名+DLL名
 >implib Network.lib Network.dll

3 C言語でNetwork.dllを利用する。(ファイル名DllUse.c)

#include<stdio.h>

#include <stdlib.h>

 

int __stdcall GetStatesNo(char*buffer);                      //GetStatesNo関数を宣言

char* __stdcall HttpGetHead(char*Host , char *Path);   //HttpGetHead関数を宣言

//プロトタイプ宣言の、型と関数名の間に「__stdcall」をつけます。

 

int main(){

 char*Data;  //HttpGetHead関数の戻り値(文字列)を入れます。

 inthttpst;    //GetStatesNo関数の戻り値(long型)を入れます。

 

 printf("NetworkDll Test Programm For C\n");

 

 httpst=GetStatesNo("HTTP/1.1200 Document follows"); //GetStatesNo関数を実行

 printf("HttpStates = %d\n",httpst);

 

 Data=HttpGetHead("localhost","/"); //HttpGetHead関数を実行

 printf("%s\n",Data);

 free(Data);

 

 return 0;


黄色の部分が最重要です。これがActiveBasicでいう Declare Function に当たります。

4 コンパイルします。
 - bcc32 DllUse.c Network.lib

5 完了

BCCの場合は案外簡単にできました。
私は今Cを勉強中でまだ慣れてないのでDllの宣言もままならなかったので非常に手間取りました。

一応、VCでのLibの作成方も書いておきます。

参考させてもらったページ→http://www.eonet.ne.jp/~maeda/cpp/dll_lib.htm
2-1 VC2010がインストールしてあるとし、コマンドプロンプトで
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
へアクセスし、あらかじめmspdb80.dllをパスの通ったフォルダをコピーしておく。
2-2 dumpbin /exports Network.dll > Network.txt
2-3 上のコマンドを実行したらテキストファイルができるので、 ordinal hint RVA nameと書いてある下に関数名
が表示されているので関数名だけコピーする(Terapadの矩形選択が便利)
2-4 上の関数リストから以下のような形式のdefファイルを作成
EXPORTS
 HttpGetHead
 GetStatesNo
2-5 lib /DEF:Network.def /MACHINE:X86 /out:Network.lib
2-6 上のコマンドを実行し、libファイルができたことを確認する。
というような感じです。たぶん関数リストはわかってるので、2-2と2-3の手順は不要と思います。

以上です。

httpd for WindowsとActiveBasicでCGIを作る

$
0
0
httpd for WindowsとActiveBasicでCGIを作る

CGIはPerlとかPHPとかが多い気がするのですが、要はサーバープログラムに文字列を出力すればいい話なのでEXEでも問題ないと思います。(Web系は全くわからない)

ただ単にコンソールプログラムをサーバーにおいてやって実行権限を与えても、ダウンロードダイアログが出るだけでHTTPDは実行してくれません。

ではどうするのかと言うと、最初に
Content-Type: text/html
を出力すればいいのです。

この後は普通にHTMLを出力してやればいいです。

例として、シャットダウンするプログラムを書いてみたいと思います。
Webページでシャットダウンリンクをクリックしたらそのサーバー機がシャットダウンするという感じです。
ActiveBasicコード:

#console
print ex"Content-Type: text/html"
print ex"<meta name=\qviewport\q content=\qwidth=device-width, initial-scale=1, maximum-scale=1.2\q>"
print ex"<HTML><HEAD><TITLE>シャットダウン!</TITLE><HEAD>\n"
print ex"<body>\n<br><br><br>"
print ex"<hr>"
print ex"<H1><p align=\qcenter\q style=\qcolor: rgb(224, 224, 224);\q><font size=\q+4\q>シャットダウンしたぜ!</p></font></H1>"
print ex"<hr>"
print ex"<BR><BR><BR><div style=\qtext-align: right;\q style=\qcolor: #FFFFFF\q>2014 RGBA_CRT SOFT</div></BODY></HTML>\n"

Dim udtProcInfo As PROCESS_INFORMATION
Dim udtStartInfo As STARTUPINFO
udtStartInfo.cb = Len(udtStartInfo)
CreateProcess(NULL, "Shutdown -s -t 120", ByVal NULL, ByVal NULL, 1, NORMAL_PRIORITY_CLASS, NULL, NULL, udtStartInfo, udtProcInfo)
END

こんな感じで。

気をつけなきゃならないのは、プログラムが終了しないとサーバーはクライアントへページを送信しない点です。
メッセージボックスとか出してたら押すまでクライアント側はずっと接続中になってしまいます。
以上です。

ActiveBasicでCPUID(機械語を実行してみる)

$
0
0
ActiveBasicでCPUIDをしてみる(機械語を実行してみる)

CPUIDとは、CPUに関する情報を取得する命令で、WindowsAPI等ではなく、CPUに直接命令を出して取得します。

しかし、CPUに直接命令を出す部分はアセンブラか機械語で書かなきゃいけませんが、ActiveBasicはインラインアセンブラには対応していません。
仕方ないので、CでCPUIDを実行する関数を作ってコンパイルし、出力された機械語をActiveBasicに組み込んで呼び出します。

本末転倒・・・?
趣味なのでおkw

今回はCPU名を取得してみたいと思います。
昨今のWindows機なら実行できるはずです。

Cのコード

//CPUID実行可能かチェック
unsigned char __stdcall isCpuid(void){ DWORD After_Eax, Before_Eax;
__asm{
    PUSHFD     POP EAX     MOV Before_Eax,EAX      XOR EAX, 00200000H      PUSH EAX      POPFD      PUSHFD      POP EAX      MOV After_Eax,EAX      }
if(After_Eax == Before_Eax){return FALSE;} else{return TRUE;}return -1;}
//CPUID取得関数 
//引数: stEAX = CPUIDの引数 、 Regster=↓が代入される。あらかじめメモリは確保しておくこと。
//戻り値:EAX=Regster[0] , EBX=Regster[1] , ECX=Regster[2] , EDX=Regster[3]
unsigned char
__stdcall GetCpuID(int stEAX , DWORD *Regster){
    DWORD cpEAX, cpEBX, cpECX, cpEDX ;
    DWORD After_Eax, Before_Eax;
    __asm{
        PUSHFD                  
        POP     EAX             
        MOV     Before_Eax,EAX  
        XOR     EAX, 00200000H  
        PUSH    EAX             
        POPFD                   
        PUSHFD                  
        POP     EAX             
        MOV     After_Eax,EAX   
    }
if(After_Eax == Before_Eax){return FALSE;}
 
    __asm{
        MOV     EAX,stEAX
        CPUID
        MOV     cpEAX,EAX
        MOV     cpEBX,EBX
        MOV     cpECX,ECX
        MOV     cpEDX,EDX
    }
    Regster[0] = cpEAX;
    Regster[1] = cpEBX;
    Regster[2] = cpECX;
    Regster[3] = cpEDX;
return TRUE;
}

コンパイル&機械語部分切り出し&配列化

ActiveBasicのコード

Function SetAsm(asm As *Byte, codesize As Long) As VoidPtr'機械語をロードして実行権限をつける関数(Wikiより)
 SetAsm=VirtualAlloc(NULL, codesize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
'追加
    memcpy(SetAsm,asm,codesize)
End Function

Sub FreeAsm(func As VoidPtr)
    VirtualFree(func, 0, MEM_DECOMMIT or MEM_RELEASE) '解放
End Sub

'機械語コード(_stdcall) CPUIDが使用可能かチェック (1&h4 + 6 = 46byte)
Dim isCPUID_Asm[ELM(46)]=[
&h55, &h8B, &hEC, &h83, &hC4, &hF8, &h9C, &h58, &h89, &h45, 
&hF8, &h35, &h00, &h00, &h20, &h00, &h50, &h9D, &h9C, &h58, 
&h89, &h45, &hFC, &h8B, &h45, &hFC, &h3B, &h45, &hF8, &h75, 
&h04, &h33, &hC0, &hEB, &h06, &hB0, &h01, &hEB, &h02, &hB0, 
&hFF, &h59, &h59, &h5D, &hC3, &h90
] As Byte

'機械語コード(_stdcall) CPUIDの結果を取得(レジスタ) (20*4 + 13 = 93byte)
Dim GetCpuID_Asm[ELM(93)]=[
&h55, &h8B, &hEC, &h83, &hC4, &hE8, &h53, &h56, &h8B, &h75, &h0C, &h9C, &h58, &h89, &h45, &hE8, &h35, &h00, &h00, &h20, '1
&h00, &h50, &h9D, &h9C, &h58, &h89, &h45, &hEC, &h8B, &h45, &hEC, &h8B, &h55, &hE8, &h3B, &hC2, &h75, &h04, &h33, &hC0, '2
&hEB, &h2A, &h8B, &h45, &h08, &h0F, &hA2, &h89, &h45, &hFC, &h89, &h5D, &hF8, &h89, &h4D, &hF4, &h89, &h55, &hF0, &h8B, '3
&h55, &hFC, &h89, &h16, &h8B, &h4D, &hF8, &h89, &h4E, &h04, &h8B, &h45, &hF4, &h89, &h46, &h08, &h8B, &h55, &hF0, &h89, '4
&h56, &h0C, &hB0, &h01, &h5E, &h5B, &h8B, &hE5, &h5D, &hC2, &h08, &h00, &h90
] As Byte

'-----------------プログラム本体----------------------
#console
'関数ポインタ宣言
Dim isCPUID As *Function() As Byte
Dim GetCpuID As *Function(Mode As Long,Vender As DWordPtr) As Byte
'いつもの変数
Dim Ret As Byte
Dim RetCpuName As BytePtr

'関数の中身をセット
isCPUID = SetAsm(isCPUID_Asm,ELM(46))
GetCpuID = SetAsm(GetCpuID_Asm,ELM(93))

'処理
Print "CPUID TEST PROGRAMM"
Ret = isCPUID()
if Ret = TRUE Then
    Print "isCPUID = TRUE"
Else
    Print ex"isCPUID = FALSE"
END
End If

RetCpuName=GetCpuName()
Print "CPU Name = "+MakeStr(RetCpuName)

free(RetCpuName)
'関数解放
FreeAsm(isCPUID)
FreeAsm(GetCpuID)

Sleep(-1)

Function GetCpuName() As BytePtr 'CPUIDを実行して取得したバイトの並びを分解して文字列に
Dim Reg1 As DWordPtr
Dim Reg2 As DWordPtr
Dim Reg3 As DWordPtr
Dim CpuName[49] As Byte
Dim buff[256] As Byte

    Reg1 = malloc(17)
    Reg2 = malloc(17)
    Reg3 = malloc(17)

    GetCpuID( &h80000002, Reg1 )
    GetCpuID( &h80000003, Reg2 )
    GetCpuID( &h80000004, Reg3 )

    CpuName[0]  = ((Reg1[0] >>  0) And &hFF) 
--- 容量の影響で省略 ---
    CpuName[47] = ((Reg3[3] >> 24) And &hFF) 
    CpuName[48] = 0 

    GetCpuName=malloc(48)
    lstrcpy(GetCpuName,CpuName)

EndFunction


参考文献:
Windowsによるハードウェア制御 p54 CQ出版 北山 洋幸著

abwiki @ ウィキ (ActiveBasic非公式wiki) - メモリ上の機械語プログラム
    http://www31.atwiki.jp/abwiki/pages/217.html
CPUID命令によるCPUの性能・機能の把握
    http://codezine.jp/article/detail/168?p=2
[gcc]CPUID命令を使用して、CPUの情報を取得する
    http://nanoappli.com/blog/archives/3963


以上です。

MOTHER3 没スプライト (存在情報求。)

$
0
0
MOTHER3 没スプライト

私ができる範囲で没スプライトを紹介します。
スプライトっていうのはわかりやすく言うとグラフィックです。
没かそうかでないかの確認はTCRFを参考にしています。
あと、このゲームプレイしたのしばらく前なんで、存在を忘れてることもあるかもしれませんが、その時はご指摘ください。カセットどこやったかな・・・



~通常では見れないボスの後姿~
強制ボスイベントなどの戦闘
では後姿を見ることができません。
(そういえばダスター後ろむかせる技あったような…効かないだろうけど・・・)
しかし、一応データには残っています。(例外対策かも)

ほぼメカライオン
イメージ 3敵ID:7D

鉄球メカゴリラ(雪山でのボス)
イメージ 1敵ID:8E

うずしおさま(タネヒネリ前)
イメージ 2敵ID:AE

仮面の男(0D)
イメージ 10
数ある仮面の男の中でもID:0Dにあるもの
仮面の男の後姿として記録されているが、おそらく第二形態とかで使う予定だったのでは?


~その他敵関連~

DUMMY(バンクID:0、ID:0x111、スプライト0)
イメージ 11未使用の敵IDのところに入っているスプライト。
マップ上で表示されない敵(ポーキー02など)にも使われる。
ちなみにこの画像は原画に縦横+2ピクセル足し、背景色を白にしたものです。

熊のような戦闘用敵グラフィック
イメージ 12
敵ID:0x00
なぜか00番の「あき」に設定されているグラフィック。



アルカリでんちマン
イメージ 6イメージ 7敵ID:A8
倒すとバカガミールをもらえるようです。


ちっこいもり
イメージ 13イメージ 14



敵ID:BA
敵の説明:
オケラあなに おいしげる
ちいさな ちいさな もり。
もりというより しげみ。
しかし いちおう もりで。
攻撃:通常攻撃、枝を振り回す、吸い込み攻撃、地中から養分を吸いとる、ブレインショックΩ
BGM:ずうずうしいマーチ


~マップ用没スプライト~

バンク:2
ID:0x00E
スプライト1~5
イメージ 4←┐
←┴パレット



スプライト6~9
左、原版 イメージ 5 イメージ 9
右、スプライト6→7→8→9→8→7→6


とりあえずこれは存在未確認。
記憶にないだけだから、あるかも・・・

バンク:0
ID:0x000
イメージ 8たぶんこれも「あき」です。
おそらくキャラクタのスプライト作る時のベースでしょう。
下の数字は私が打ったものなのでゲームには関係ありません。


バンク:0
ID:0x007
イメージ 15黒い服を着たクラウス。頭と足しかないものもあります。
全方向、会話時、倒れた時の画像が残っています。
データが多いのですべて掲載できません。いつか動画にします。

バンク:0
ID:0x008
イメージ 16ヒナワです。
使われてなさそうなものもあります。



バンク:0
ID:0x059
イメージ 17…どっかにウエス寝るシーンありましたっけ?あった気もしないでもない…
覚えてません。
あと、水面から陸に上がるアニメーションもあります。
オソヘ城ではそんなシーンなかったはず・・・


バンク:0
ID:0x049
イメージ 19没ポーキ―のスプライト。
死ぬ予定だったんですね。

スプライト0



イメージ 18総5フレーム(ループ用に逆再生も追加)

スプライト1~5




イメージ 20総11フレーム 9、10、11、12、13、14、15、16、17、18、19
スプライト9~19





バンク:0
ID:0x062
イメージ 21アンドーナツ博士。電撃シーンあったっけ?
総フレーム8
スプライト33~40




バンク:0
ID:0x090
イメージ 22クラウス。これは没のはず。
ちなみにタネヒネリのシーンの1個前に記録してあります。
総9フレーム




バンク:0
ID:0x282
イメージ 23元の人はこちら→イメージ 24
序盤の火事にこんな人いなかったはず。情報提供求。




以上です。


MOTHER3デバッグルーム

$
0
0
MOTHER3デバッグルーム

今更ですが(そもそも今更と思う人がいるか疑問ですが)MOTEHR3のデバッグルームの行き方をメモしたいと思います。

イメージ 1

部屋ID:037D

コード:(VBAで動作確認)
0200B578:037D
0200B57E:0150
0200B57E:0090

詳しい説明はそこらへんにあるので省きますが、コードONにしてスクロールして、入れたらコードOFFにするだけです。

壁側にいる人に話しかけると、各章の主要場所に移動できます。
土星さんに話しかけると、各章の始まり(チャプター)が見れます。
右下のひつけむし にぶつかると戦闘開始できます。敵変更コードと混ぜると結構便利です。

以上です。

スカイウォードソード内にあったWiiリモコンのモデル

$
0
0
スカイウォードソード内にあったWiiリモコンのモデル 
(情報提供求)

イメージ 1

ファイルパス:
Disk:\PARTITION#1(SOUJ)\ObjectPack.arc.LZ\orac\WiiRemocon.arc

ファイルパスからわかる通り、Wiiモーションプラスのフォルダではありません。
ゲーム内のWiiリモコンはすべてアイコンだったはずですし、チュートリアルでも見た覚えがありません。

もし、これが未使用データだったとしたら、Wiiモーションプラスの動作テストにでも使ったのではないでしょうか?

情報提供お待ちしています。


2014/4/5追記:
774さんから、「 ボス部屋鍵のパズルで見ましたよ... 」という情報を頂いたので確認してみました。

左モデルファイル、右ゲーム内
イメージ 2

ほぼ一致してますね。
おそらく同じものでしょう。

と、いうわけで残念ながら没データではありませんでした。
お騒がせして申し訳ありません。
これからもよろしくお願いします。


以上です。

Windows実行ファイル(exe)にバージョン情報を付加する方法

$
0
0
Windows実行ファイル(exe)にバージョン情報を付加する方法

久しぶりの更新・・・忙しい・・・

イメージ 6

ActiveBasicには標準でバージョン情報を付加する機能がありません。リソースファイルに記述したって情報はつけてくれません。というわけで、コンパイルして出来上がったやつに情報を書き込んでやろうというわけです。
※この方法は他の作者のプログラムであってもできますが、やめておきましょう。


準備物:
リソースハッカー、バージョン情報を拝借する他のプログラム

手順:
1.リソースハッカーで、何かバージョン情報付のプログラムを開く
逆アセンブルなどを禁じているソフトウエアはやめておいたほうがいいでしょう。

2.「Version Info」→「1」→「1041」と開く
まあ、数値は気にしなくてもいいかも。
イメージ 1

3.先ほど開いた「1041」を選択したまま、メニューの「アクション(&A)」→「リソースを*.res形式で保存する」を選び、適当に保存する。
ここは、リソースハッカーのバージョン、言語により変わりますが、そこは臨機応変に。
イメージ 2

4.バージョン情報を付加したいプログラムを開き、メニューの「アクション(&A)」→「新しいリソースの追加する(&W)」と進む。

5.出たダイアログの「リソースを含むファイルを開く」を押し、先ほど保存した、.res形式のファイルを開く
イメージ 3

6.「1041」などを選択し、「リソースを追加する(&R)」ボタンを押す。
追加された。
イメージ 4

7.バージョン情報を自分のプログラム用に編集する。
イメージ 5

8.保存すれば完成。


という手順になります。
編集する内容ですが、簡単に説明しておきます。検索をかければ、もっと詳しい説明が見れるでしょう。
たとえば、マイクロソフトのページなど


1 VERSIONINFO
FILEVERSION 65535,0,0,0     ’ファイルバージョン(数値)です。
PRODUCTVERSION 65535,0,0,0 ’製品バージョン(数値)です。
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
    BLOCK "041103A4"
    {
        VALUE "CompanyName", "会社名"
        VALUE "FileDescription", "ファイルの説明どす。"
        VALUE "FileVersion", "表記上のファイルバージョン(テキスト)です。"
        VALUE "InternalName", "内部名です。"
        VALUE "LegalCopyright", "著作権表記です。"
        VALUE "LegalTrademarks", "商標など"
        VALUE "OriginalFilename", "本来のファイル名"
        VALUE "ProductName", "製品名です。"
        VALUE "ProductVersion", "表記上の製品バージョン(テキスト)です。"
        VALUE "Comments", "コメントです。"
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x0411 0x03A4
}
}

簡単に説明しましたが、プロパティで見るぐらいのバージョン情報ならこれで十分でしょう。

以上です。

ウディタのダウングレード方法(2.10→2.02a)

$
0
0
ウディタのダウングレード方法(2.10→2.02a)

手軽に、フリーでRPGを作ることができる、WolfRPGEditorのバージョンを下げる方法をメモっておきます。

-動機-
・最新バージョンで制作していたが、BGMが切り替わらないバグに遭遇したため、ダウングレードを試みる。

-手順-
ただ旧バージョンにデーターフォルダを移すだけではウディタが起動しなくなる。
(.NetFrameworkのエラーが出る。)
おそらくBasicDataのGame.datが旧バージョンでは読み込めなかったのだろう。

1.ウディタの公式サイトから旧バージョンをDLする。
2.旧バージョンを手に入れ、解凍したら、Dataフォルダを開く。
3.現バージョンのDataフォルダを開き、BasicData以外のフォルダを旧バージョンへ移す。
4.両バージョンのBasicDataフォルダを開き、Game.dat以外のファイルを旧バージョンへ移す。
5.旧バージョンのエディターを起動し、ゲーム設定を設定しなおす。

以上で移行完了です。

SFCのクロックタワーにデバッグモードの名残が?

$
0
0
SFCのクロックタワーにデバッグモードの名残が…

イメージ 1


SFCのホラーゲーム、クロックタワーにデバッグモードの名残的なものを見つけました。
もしかしたらゲーム内にデバッグプログラムが残ってるかも知れません。

場所はROMアドレスの0000F5BC(ヘッダ付ROM)
文字コードはSHIFT_JISです。

ジャンプすると、何やらTASK=%WHなんていう文字列が見えてきたと思います。
以下、意味のあると思われる文字列です。途中の余計なものは削っています。

TASK=%WH  -SP=%WD  %S
-- シンク ジョウホウ --

S_TASKCYCLE   = %BD
S_INTERRUPT   =$%BH
VINTTIMEOVER  = %BD
REFRESHCNT    = %WD
MP5STATUS     =$%BH
SYSTEMSTATUS  =$%BH
S_PROCESS_TIP =$%WH
S_BACKGROUND  =$%WH
S_GROUPA      =$%WH
S_GROUPB      =$%WH
S_GROUPC      =$%WH
SRAMCONDITION = %BD
SSECSTATUS=
  %BH,%BH,%BH,%BH,%BH,%BH,%BH,%BH
  %BH,%BH,%BH,%BH,%BH,%BH,%BH,%BH
MOZAIKU JOB :%S a ENABLE DISABLE レディ ウエイト
PUSH B #0 MULTIPLE ATTACH(%WH) #1 INT STACK OVER FLOW #2 HDMA CHANNEL FLOW(%WH) #4 CHILD PROC OVER FLOW #5 CHECKMULTI IN BLANK #6 MULTIPLE NMI RESERVE(%WH) #7 OUT OF DY-SPR RANGE(%BD) %WD  %S
-- シンク ジョウホウ --

S_TASKCYCLE   = %BD
S_INTERRUPT   =$%BH
VINTTIMEOVER  = %BD
REFRESHCNT    = %WD
MP5STATUS     =$%BH
SYSTEMSTATUS  =$%BH
S_PROCESS_TIP =$%WH
S_BACKGROUND  =$%WH
S_GROUPA      =$%WH
S_GROUPB      =$%WH
S_GROUPC      =$%WH
SRAMCONDITION = %BD
SSECSTATUS=
  %BH,%BH,%BH,%BH,%BH,%BH,%BH,%BH
  %BH,%BH,%BH,%BH,%BH,%BH,%BH,%BH
MOZAIKU JOB :%S a ENABLE DISABLE レディ ウエイト
  DEBUG MODE

   SYSTEM2 VERSION %S


  タイトル : %S
  ホットキー     : ツカウ
  ROM マップ  : 21MODE(HIGHSPEED)
  TV        : NTSC
  USERHOT   : ツカワナイ
  USERRAM   : ツカワナイ
  USERBRK   : ツカワナイ
  SRAMSIZE  : 16K BITS

  チャイルドプロセスノ ATTACH   : ツカウ
  バックグラウンドプロセス      : ツカワナイ
  パッドノ シグネチャノ チェック   : スル
  サウンドドライバノ アドレス    :$%WH
  SOUND QUEUE ノ サイズ    : %BD
  MULTI BUFFER ノ サイズ   : %BD
  スプライトヲ ケストキノ Yザヒョウ  :$E0

        ヒューマン コーポレーション
PUSH B #0 MULTIPLE ATTACH(%WH) #1 INT STACK OVER FLOW #2 HDMA CHANNEL FLOW(%WH) #4 CHILD PROC OVER FLOW #5 CHECKMULTI IN BLANK #6 MULTIPLE NMI RESERVE(%WH) #7 OUT OF DY-SPR RANGE(%BD)

以上、文字列です。
この後はF4の連続、あとはROMの埋め込み情報があります。(埋め込み情報の参考:SDK1 ROM情報設定
位置的にはHiROMの1区切り目の最後あたりですね。

シンク情報はなんか2つありますね。
何やらシステムステータスとかSRAMコンディションとかわくわくするような文字列が見えますが・・。

ゲーム内の文字コードはまた別にあるのでこれはどう位置づけのデータなんでしょう?
DEBUG MODEとの記述と、何やら変数っぽいものも見えるのでおそらくデバッグメニューなんじゃないかと僕は思うのですが・・・。

先述したとおりまだデバッグモードが残っているかもしれませんね。私はアセンブラはまだ未勉強なんで解析とかはたぶん無理ですw

いつか見つかると面白いんですけどね。
以上です。

ナナシノゲエムのデバッグ系のメニュー

$
0
0
ナナシノゲエムのデバッグ系のメニュー

TCRFのナナシノゲエムのページに
>When swapping files, one can get the debug screen and the sound test screen to appear on screen, yet missing functionality.
とあります。要はファイル置き換えたらデバッグ画面とかサウンドテストスクリーンをだせるよと。だたまだそれは機能しないよと。
いうことだと思います(英語苦手)

この記述にはそのほか有力な手掛かりはないので、ナナシノゲエムのROM内のデータをあさってみます。
NDSToolとかdslazyとか使えば簡単に展開・パックができます。

で、展開した先に
data\tra
というフォルダがあると思います。中にtraファイルが大量にあると思います。
おそらくこのtraっていうファイルは画像のレイアウトとかのファイルなんじゃないかなと思います。
(まだ詳しく調べきってないのですが)

その中に、
debug.tra
sndtest.tra
vsndtest.tra
movtest.tra
pcmtest.tra
A04TEST.tra

なんて怪しいファイルがあります。

このファイルを、通常ロードされるファイルと置き換えてやります。
通常ロードされるファイルっていうのはtitle.traとかsaveload.traとか明らかに使ってそうなファイルのことです。

で、これらのファイル名を交換してやり差し替えます。
movtest.tra<---> title.tra

そして再びROMと同じ形式にパックしてやると、
イメージ 1

こんな風にデバッグ用ファイルが呼び出せるというわけです。
完全に呼び出せるわけではありません。sndtestは失敗しました。
でも、TCRFの記事もこのように呼び出していると思います。

ただし、これはあくまでレイアウトを呼び出しているだけで、選択肢を決定した後の分岐は元のプログラム通りになっていて、デバッグができるわけじゃありません。
(例:上の画像はtitle.traとmovtest.traを取り換えているので、選択肢はハジメカラかツヅキカラ、ボタンを押すとどちらかの画面に進んでしまいます。)

現在時間がないので先ほどの6つの怪しいファイルを試せませんが、いつかやります。

いつかサウンドテストに入りたい・・・
以上です。

[メモ]ActiveBasicで作ったDLLをBccで静的リンクする

$
0
0
ActiveBasicで作ったDLLをBccで使う(静的リンクする)

※私はまだちゃんとした文章になってない乱雑な文になると思いますw
※私はまだちゃんと理解していません。
※私はまだC言語に慣れ親しんでいません。

ActiveBasicで作ったDLLをC言語コンパイラであるBorland C++ Compiler 5.5で使ってみたいと思います。

最初に、ActiveBasic製のDllを使うには、

・ActiveBasicはlibファイルを作成しない。
-C言語でDllを静的リンクするにはlibファイルが必要。さらに作成されるLibファイルはVC用の形式。

・ActiveBasicで作成したDllの関数名はモロにそのまんまになる

-Dllには呼び出し方が複数あり、C言語のデフォルトでDllを作った場合、「__cdecl」という呼び出し方(?)があり
関数名にいろいろごちゃごちゃつく。ActiveBasicは、「__stdcall」というWindowsAPIと同じ形式の関数名になる
詳細っぽいもの(Wikipedia)

この2つの問題があります。これらを何とかしていきます。

1 まず、ActiveBasicでDllを作ります。
 -ここでは文字列ポインタを返すHttpGetHeadと、数値を返すGetStatesNoという関数がDllになっているとします
-ActiveBasicでこのDllを参照する場合、
Declare Function HttpGetHead Lib "Network.dll" Alias "HttpGetHead"  (URL As BytePtr) As BytePtr
Declare Function GetStatesNo Lib "Network.dll" Alias "GetStatesNo" (buffer As BytePtr) As Long
という感じで宣言をすれば関数を利用できるものとします。

2 まず1つ目の問題、Libファイルの問題をどうにかしたいと思います。
 -Bccのbinフォルダ内のimplib.exeを利用してlibファイルを作成。引数は作成するLib名+DLL名
 >implib Network.lib Network.dll

3 C言語でNetwork.dllを利用する。(ファイル名DllUse.c)

#include<stdio.h>

#include <stdlib.h>

 

int __stdcall GetStatesNo(char*buffer);                      //GetStatesNo関数を宣言

char* __stdcall HttpGetHead(char*Host , char *Path);   //HttpGetHead関数を宣言

//プロトタイプ宣言の、型と関数名の間に「__stdcall」をつけます。

 

int main(){

 char*Data;  //HttpGetHead関数の戻り値(文字列)を入れます。

 inthttpst;    //GetStatesNo関数の戻り値(long型)を入れます。

 

 printf("NetworkDll Test Programm For C\n");

 

 httpst=GetStatesNo("HTTP/1.1200 Document follows"); //GetStatesNo関数を実行

 printf("HttpStates = %d\n",httpst);

 

 Data=HttpGetHead("localhost","/"); //HttpGetHead関数を実行

 printf("%s\n",Data);

 free(Data);

 

 return 0;


黄色の部分が最重要です。これがActiveBasicでいう Declare Function に当たります。

4 コンパイルします。
 - bcc32 DllUse.c Network.lib

5 完了

BCCの場合は案外簡単にできました。
私は今Cを勉強中でまだ慣れてないのでDllの宣言もままならなかったので非常に手間取りました。

一応、VCでのLibの作成方も書いておきます。

参考させてもらったページ→http://www.eonet.ne.jp/~maeda/cpp/dll_lib.htm
2-1 VC2010がインストールしてあるとし、コマンドプロンプトで
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
へアクセスし、あらかじめmspdb80.dllをパスの通ったフォルダをコピーしておく。
2-2 dumpbin /exports Network.dll > Network.txt
2-3 上のコマンドを実行したらテキストファイルができるので、 ordinal hint RVA nameと書いてある下に関数名
が表示されているので関数名だけコピーする(Terapadの矩形選択が便利)
2-4 上の関数リストから以下のような形式のdefファイルを作成
EXPORTS
 HttpGetHead
 GetStatesNo
2-5 lib /DEF:Network.def /MACHINE:X86 /out:Network.lib
2-6 上のコマンドを実行し、libファイルができたことを確認する。
というような感じです。たぶん関数リストはわかってるので、2-2と2-3の手順は不要と思います。

以上です。

httpd for WindowsとActiveBasicでCGIを作る

$
0
0
httpd for WindowsとActiveBasicでCGIを作る

CGIはPerlとかPHPとかが多い気がするのですが、要はサーバープログラムに文字列を出力すればいい話なのでEXEでも問題ないと思います。(Web系は全くわからない)

ただ単にコンソールプログラムをサーバーにおいてやって実行権限を与えても、ダウンロードダイアログが出るだけでHTTPDは実行してくれません。

ではどうするのかと言うと、最初に
Content-Type: text/html
を出力すればいいのです。

この後は普通にHTMLを出力してやればいいです。

例として、シャットダウンするプログラムを書いてみたいと思います。
Webページでシャットダウンリンクをクリックしたらそのサーバー機がシャットダウンするという感じです。
ActiveBasicコード:

#console
print ex"Content-Type: text/html"
print ex"<meta name=\qviewport\q content=\qwidth=device-width, initial-scale=1, maximum-scale=1.2\q>"
print ex"<HTML><HEAD><TITLE>シャットダウン!</TITLE><HEAD>\n"
print ex"<body>\n<br><br><br>"
print ex"<hr>"
print ex"<H1><p align=\qcenter\q style=\qcolor: rgb(224, 224, 224);\q><font size=\q+4\q>シャットダウンしたぜ!</p></font></H1>"
print ex"<hr>"
print ex"<BR><BR><BR><div style=\qtext-align: right;\q style=\qcolor: #FFFFFF\q>2014 RGBA_CRT SOFT</div></BODY></HTML>\n"

Dim udtProcInfo As PROCESS_INFORMATION
Dim udtStartInfo As STARTUPINFO
udtStartInfo.cb = Len(udtStartInfo)
CreateProcess(NULL, "Shutdown -s -t 120", ByVal NULL, ByVal NULL, 1, NORMAL_PRIORITY_CLASS, NULL, NULL, udtStartInfo, udtProcInfo)
END

こんな感じで。

気をつけなきゃならないのは、プログラムが終了しないとサーバーはクライアントへページを送信しない点です。
メッセージボックスとか出してたら押すまでクライアント側はずっと接続中になってしまいます。
以上です。

ActiveBasicでCPUID(機械語を実行してみる)

$
0
0
ActiveBasicでCPUIDをしてみる(機械語を実行してみる)

CPUIDとは、CPUに関する情報を取得する命令で、WindowsAPI等ではなく、CPUに直接命令を出して取得します。

しかし、CPUに直接命令を出す部分はアセンブラか機械語で書かなきゃいけませんが、ActiveBasicはインラインアセンブラには対応していません。
仕方ないので、CでCPUIDを実行する関数を作ってコンパイルし、出力された機械語をActiveBasicに組み込んで呼び出します。

本末転倒・・・?
趣味なのでおkw

今回はCPU名を取得してみたいと思います。
昨今のWindows機なら実行できるはずです。

Cのコード

//CPUID実行可能かチェック
unsigned char __stdcall isCpuid(void){ DWORD After_Eax, Before_Eax;
__asm{
    PUSHFD     POP EAX     MOV Before_Eax,EAX      XOR EAX, 00200000H      PUSH EAX      POPFD      PUSHFD      POP EAX      MOV After_Eax,EAX      }
if(After_Eax == Before_Eax){return FALSE;} else{return TRUE;}return -1;}
//CPUID取得関数 
//引数: stEAX = CPUIDの引数 、 Regster=↓が代入される。あらかじめメモリは確保しておくこと。
//戻り値:EAX=Regster[0] , EBX=Regster[1] , ECX=Regster[2] , EDX=Regster[3]
unsigned char
__stdcall GetCpuID(int stEAX , DWORD *Regster){
    DWORD cpEAX, cpEBX, cpECX, cpEDX ;
    DWORD After_Eax, Before_Eax;
    __asm{
        PUSHFD                  
        POP     EAX             
        MOV     Before_Eax,EAX  
        XOR     EAX, 00200000H  
        PUSH    EAX             
        POPFD                   
        PUSHFD                  
        POP     EAX             
        MOV     After_Eax,EAX   
    }
if(After_Eax == Before_Eax){return FALSE;}
 
    __asm{
        MOV     EAX,stEAX
        CPUID
        MOV     cpEAX,EAX
        MOV     cpEBX,EBX
        MOV     cpECX,ECX
        MOV     cpEDX,EDX
    }
    Regster[0] = cpEAX;
    Regster[1] = cpEBX;
    Regster[2] = cpECX;
    Regster[3] = cpEDX;
return TRUE;
}

コンパイル&機械語部分切り出し&配列化

ActiveBasicのコード

Function SetAsm(asm As *Byte, codesize As Long) As VoidPtr'機械語をロードして実行権限をつける関数(Wikiより)
 SetAsm=VirtualAlloc(NULL, codesize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
'追加
    memcpy(SetAsm,asm,codesize)
End Function

Sub FreeAsm(func As VoidPtr)
    VirtualFree(func, 0, MEM_DECOMMIT or MEM_RELEASE) '解放
End Sub

'機械語コード(_stdcall) CPUIDが使用可能かチェック (1&h4 + 6 = 46byte)
Dim isCPUID_Asm[ELM(46)]=[
&h55, &h8B, &hEC, &h83, &hC4, &hF8, &h9C, &h58, &h89, &h45, 
&hF8, &h35, &h00, &h00, &h20, &h00, &h50, &h9D, &h9C, &h58, 
&h89, &h45, &hFC, &h8B, &h45, &hFC, &h3B, &h45, &hF8, &h75, 
&h04, &h33, &hC0, &hEB, &h06, &hB0, &h01, &hEB, &h02, &hB0, 
&hFF, &h59, &h59, &h5D, &hC3, &h90
] As Byte

'機械語コード(_stdcall) CPUIDの結果を取得(レジスタ) (20*4 + 13 = 93byte)
Dim GetCpuID_Asm[ELM(93)]=[
&h55, &h8B, &hEC, &h83, &hC4, &hE8, &h53, &h56, &h8B, &h75, &h0C, &h9C, &h58, &h89, &h45, &hE8, &h35, &h00, &h00, &h20, '1
&h00, &h50, &h9D, &h9C, &h58, &h89, &h45, &hEC, &h8B, &h45, &hEC, &h8B, &h55, &hE8, &h3B, &hC2, &h75, &h04, &h33, &hC0, '2
&hEB, &h2A, &h8B, &h45, &h08, &h0F, &hA2, &h89, &h45, &hFC, &h89, &h5D, &hF8, &h89, &h4D, &hF4, &h89, &h55, &hF0, &h8B, '3
&h55, &hFC, &h89, &h16, &h8B, &h4D, &hF8, &h89, &h4E, &h04, &h8B, &h45, &hF4, &h89, &h46, &h08, &h8B, &h55, &hF0, &h89, '4
&h56, &h0C, &hB0, &h01, &h5E, &h5B, &h8B, &hE5, &h5D, &hC2, &h08, &h00, &h90
] As Byte

'-----------------プログラム本体----------------------
#console
'関数ポインタ宣言
Dim isCPUID As *Function() As Byte
Dim GetCpuID As *Function(Mode As Long,Vender As DWordPtr) As Byte
'いつもの変数
Dim Ret As Byte
Dim RetCpuName As BytePtr

'関数の中身をセット
isCPUID = SetAsm(isCPUID_Asm,ELM(46))
GetCpuID = SetAsm(GetCpuID_Asm,ELM(93))

'処理
Print "CPUID TEST PROGRAMM"
Ret = isCPUID()
if Ret = TRUE Then
    Print "isCPUID = TRUE"
Else
    Print ex"isCPUID = FALSE"
END
End If

RetCpuName=GetCpuName()
Print "CPU Name = "+MakeStr(RetCpuName)

free(RetCpuName)
'関数解放
FreeAsm(isCPUID)
FreeAsm(GetCpuID)

Sleep(-1)

Function GetCpuName() As BytePtr 'CPUIDを実行して取得したバイトの並びを分解して文字列に
Dim Reg1 As DWordPtr
Dim Reg2 As DWordPtr
Dim Reg3 As DWordPtr
Dim CpuName[49] As Byte
Dim buff[256] As Byte

    Reg1 = malloc(17)
    Reg2 = malloc(17)
    Reg3 = malloc(17)

    GetCpuID( &h80000002, Reg1 )
    GetCpuID( &h80000003, Reg2 )
    GetCpuID( &h80000004, Reg3 )

    CpuName[0]  = ((Reg1[0] >>  0) And &hFF) 
--- 容量の影響で省略 ---
    CpuName[47] = ((Reg3[3] >> 24) And &hFF) 
    CpuName[48] = 0 

    GetCpuName=malloc(48)
    lstrcpy(GetCpuName,CpuName)

EndFunction


参考文献:
Windowsによるハードウェア制御 p54 CQ出版 北山 洋幸著

abwiki @ ウィキ (ActiveBasic非公式wiki) - メモリ上の機械語プログラム
    http://www31.atwiki.jp/abwiki/pages/217.html
CPUID命令によるCPUの性能・機能の把握
    http://codezine.jp/article/detail/168?p=2
[gcc]CPUID命令を使用して、CPUの情報を取得する
    http://nanoappli.com/blog/archives/3963


以上です。

MessageDumper - 汎用ゲームテキストコンバータ

$
0
0
MessageDumper - 汎用ゲームテキストコンバータ

手抜きですがゲームテキスト抽出支援ソフトを作ってみました。
ROMのバイナリデータを定義ファイルのとおり置き換えていくだけの簡単なソフトです。
おそらくプログラムの構造が簡単なFC,SFC.GBあたりなら定義ファイルさえ作れば動作します。

まだポケモン銀とFF4でしか試してないので完成度は最悪ですが、
どうせすぐ飽きて開発なんかやめると思うので
一応あげておきます。
Download

以下READMEから

◆なにこれ
・ゲームデータ(主にROM)からセリフなどテキストを抽出するのを支援します。
・おまけとして入力された文字からそのゲーム用の16進テキストデータを作成するプログラムが入ってます。
ゲームデータすべてをテキストデータとして変換していくので出力の大半はゴミデータになります。


◆注意事項
・このプログラムを使用は自己責任です。作者は責任を持ちません。
・ROMの違法ダウンロードは犯罪です。
・ソースの改変は自由です。言語はActiveBasicでゴミの様なコードです。
・おまけのゲームコード作成プログラムは糞です。
・悪用しないでください。常識の範囲内でお使いください。
・なんかに転載する場合は作者に連絡してくれるとうれしいです。作者からの返事が2週間返ってこなかった場合は煮るなり焼くなり好きにしてください。

◆使い方
1.MessageDumper2.exeを起動する
2.ROMをD&Dする
3.定義ファイルをD&Dするかパスを入力する
4.変換完了まで待つ

◆定義ファイルの作り方
ゲームの文字コード,それに対応する文字
ってな形式のCSVファイルを作ってください。
サンプルとしてFF4とポケモン第二世代のCSVが用意してあります。
変なデータを読むとフリーズする可能性が200%です
GCCODE.exeとExcelとTerapadとエミュを使うと簡単に作れます。


まあこんな感じのプログラムです。
ActiveBasicで書いてあるので自分で好きなようにプログラムを変更できるのでまあいろいろできると思います。

例に付属したFF4.csvで出力したもの:

ここよりさきは わがち ゼムスゾーン…
わたしの しもべから のがれることは
ぜったいに できぬ…!
わたしのもとに たどりつく まえに
やみへと きえさるがよい…

はい、没台詞ですw
出力されたファイルの先頭付近にあるので実際に出力して確かめてください

以上です。

Arrows V F-04E Root化の方法

$
0
0
Arrows V F-04E Root化

ねんがんの root化ができたぞー!

Arrows V F-04Eのroot化ができたのでメモします。2chのF04Eスレ、300,304,305にもざっくりした説明を書いたのでこっちはもっと詳しく書いておきます。

 ちなみに私は今年の3月、初スマホに選んで買ったのがF04Eです。MVNOのIIJmioのミニマムプランで運用しています。 この機種はさんざん不具合があるだの言われています。私の端末も買った当初はそうでしたが、いつの間にかバッテリー持ちも改善しましたし、勝手に落ちたのは1回ぐらいしかありません。当たりを引いたのかな?

さて、本題のRoot化です。
この機種は旧バージョンのころには2chにRootスレがあったのですが、アップデートによりrootスレの方法ではできなくなったうえ、Rootキットもリンク切れになってしまい、スレもDat落ちしてしまいました。
私は白ロムで購入した日にアップデートしてしまってroot化ができませんでした。(アホです)

私はLinuxの知識がそこまであるわけでもないし、セキュリティに詳しいわけでもありません。
 こんな素人が考えた手順を実行してスマホが高性能カイロからハイスペック文鎮になっても私は責任を取りませんので、あらかじめご了承ください

あと、rootスレで一番最初にやり方を公開してくれた方のサイトはとても参考になります。
コマンド等はこちらを参考に(というかこのやり方に大体沿ってます。というかコピペしてます。すいません。)
もしかしたらこの方法、他の機種でも使えるかもしれません。
※「>$#」の記号はプロンプトを表しています。入力する必要はありません。

/*まずはじめにわかる人のためのとてもざっくりした説明*/
1.get_essential_addressとrun_root_shellとunlock_security_moduleを用いて一時Rootをとる
2.送り込むのはsuではなくrun_root_shell。これをsuにリネームしてsystem/binへコピー、パーミッションセット
3.su管理アプリでそのアプリ用のsuに置き換え
/*----------------こんな感じ--------------------*/


第1章 準備
    ◆1.必要なもの
        ・Git for windows ・・・ githubからZipでダウンロードしてもエラーになるので、必須
        ・cygwin  ・・・device databaseをコンパイルするのに必要です。
        ・Adbドライバとabdコマンド
            ドライバ:富士通公式 http://spf.fmworld.net/oss/driver/adb/
            Abdコマンド:AndroidSDKから持ってくるもよし、単体で用意するのもよし。
        ・android-ndk-r8e
            これは自分で調達してください。他のバージョンは動作確認していません。
            32bit版と64bit版あるので気を付けてください。
           ndk-buildコマンドが通るようにパス登録を行ってください。

        ・busybox ・・・ 適当に。作業フォルダへコピーしてください。
    ◆2.プログラムのダウンロード
        android_get_essential_address
        android_run_root_shell
        unlock_security_module_git
        この3つを用意します。いずれもGithubにソースコードがあります。
        <作者の hiikezoe様 fi01様 に感謝いたします。>
        Gitをインストールするとパスが自動的に通るはずです。
        次のコマンドを実行してソースコードをダウンロードします。
        管理者としてコマンドプロンプトを実行してください(run_root_shellでフリーズしないため)
        作業フォルダ> git clone --recursive https://github.com/android-rooting-tools/android_get_essential_address
        作業フォルダ> git clone --recursive https://github.com/android-rooting-tools/android_run_root_shell
        作業フォルダ> git clone --recursive https://github.com/fi01/unlock_security_module

    ◆3.データーベースにこの機種の脆弱性を突くためのアドレスを登録します。
     F04Eのビルド番号がV11R43Bの場合、あらかじめアドレスは調べてあるので
     面倒くさいなら5.に飛んでください。
        1.get_essential_addressフォルダで、
         >ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
        2.コンパイルされると、objフォルダの底にget_essential_addressができるので
         作業フォルダに持ってきてください。
        3.次のコマンドで転送&実行
            > adb push get_essential_address /data/local/tmp
            > adb shell
            $ cd /data/local/tmp
            $ chmod 755 ./get_essential_address
            $ ./get_essential_address
        4.現在最新カーネルだと
            Essential address are:
              prepare_kernel_cred = 0xc00928ac
              commit_creds = 0xc0092268
              remap_pfn_range = 0xc00e3c98
              vmalloc_exec = 0xc00e3c98
              ptmx_fops = 0xc0b955f4
            と表示されるはずです。
        5.android_run_root_shellフォルダのDeviceDatabaseフォルダを開いてください。
            db_init.sqlの中に旧バージョンのF04Eのアドレスがあるので
            4.で調べたアドレスに書き換えてください。
            ビルド番号も変更しておいてください。
            device_database.hについては忘れました。
            エラーが出るなら旧を書き換えてください。
        6.その調子でunlock_security_moduleのデバイスデーターベースも編集してください。
            device_address.cとdb_init.sqlです。
        7.device.dbの作成をおこないます。
            cygwinでrun_root_shellのdevice_databaseへアクセスし、
            make all
            とコマンドを実行してください。できます。
            作業フォルダにコピーしておきます。
    ◆4.コンパイル
        run_root_shellフォルダで
        > ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=.\Android.mk
        unlock_security_moduleフォルダで
        > ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=.\Android.mk
        とすると、それぞれのフォルダの中にobjフォルダがあり、その底にバイナリができています。
        作業フォルダへコピーしましょう。

    ここまで来たら、作業フォルダの中を確認しましょう。
        busybox
        device.db
        get_essential_address
        run_root_shell
        unlock_security_module
    こんな感じになってるはずです。

第2章 一時Root取得
    AndroidとPCをUSBケーブルつなぎます。開発者オプションにてUSBデバッグにチェックを忘れず入れましょう。開発者オプションをONにしただけではだめです。
    1.送信
        > adb push run_root_shell /data/local/tmp/run_root_shell
        > adb push unlock_security_module /data/local/tmp/unlock_security_module
        > adb push device.db /data/local/tmp/device.db
        > adb push busybox /data/local/tmp/busybox
    2.アクセス権の変更
        >adb shell
        $ chmod 755 /data/local/tmp/run_root_shell
        $ chmod 755 /data/local/tmp/unlock_security_module
    3.実行
        $./run_root_shell
        #./unlock_security_module

第3章 永久Root取得
    ここが最大の難関でした。第2章ではsuを送信していません。なぜなら、出回っているsuだとadbからは昇格できても、端末側からターミナルエミュレータ等でsuと実行しても署名エラー(?)が出るのです。なので、一時Rootをとるrun_root_shellをsuコマンドとしてシステムに送ります。

    1./systemの書き込み権限つき再マウント
        # mount -o rw,remount /system /system
    2.system/binにいろいろ仕込む
        # dd if=/data/local/tmp/run_root_shell of=/system/bin/su # chown root.root /system/bin/su
        # chmod 06755 /system/bin/su
        # dd if=/data/local/tmp/unlock_security_module of=/system/bin/usm # chown root.root /system/bin/usm
        # chmod 06755 /system/bin/usm
        (xbinにもsuを入れておくといいかも)
    3.busyboxの仕込み
        # dd if=/data/local/tmp/busybox of=/system/xbin/busybox
        # chown root.shell /system/xbin/busybox
        # chmod 755 /system/xbin/busybox
        # /system/xbin/busybox --install -s /system/xbin

終章 su管理ツールの仕込み
    4.Android側にてRootCheckerとか使ってRootがとれているかチェックします。
        ちゃんとRoot権限がとれたなら成功です。
        成功しないならドンマイです。あきらめも肝心です。
    5.SuperSUなど、それ系のソフトをインストールます。
        するとSUバイナリのアップデートをしてくださいと出るはずなので、実行します。
        成功するとsuコマンドがSuperSU等のものに置き換わり、Root権限を求められたときに
        ダイアログが出るようになります。



完成です。
非常に急いで適当に書いてるのでいろいろ抜けてるかもしれません。
バカですので手順もう忘れかけてます。

(このブログ、見づらいな…せめてもうちょっとワイドだったら…)

rootKitは配布予定ありません。(こういうのがソースコードで配布されるのってウィルス作成罪に当たらないようにするためじゃなかったっけ?そこのところよくわかんないので問題のないなら教えてください。)
成功したのならお疲れ様。成功しなくてもお疲れ様。
あんまり私に質問しないでくれると嬉しかったりします。
どうしてもというなら質問してください。たぶん聞きます。

以上です。お疲れ様でした。


追記:
※ESファイルエクスプローラよりRootエクスプローラのほうがSystemいじりやすいです。
※再起動後はLSM解除がもとに戻ります。Systemのマウント状態も元に戻ります。
なので大きな変更をしたいときは、ターミナルエミュレータでusmと入力して実行しましょう。
LSM解除が実行されます。
Systemのマウントについては専用のアプリあるのでストアを探しましょう。
※ワンクリックRoot化ツールは作りません。面倒くさいです。バッチファイル書けません。かけるのWinAPIだけです。
気が変わって作りました⇒次の記事

Arrows V F-04E Root化Kit

$
0
0
Arrows V F-04E Root化Kit

前の記事でRoot化の方法を書きましたが、まああれ敷居ちょっと高いしめんどくさいですよね。
なので、「配布予定はありません」とか言ってましたが撤回して簡単にRoot化できるキットを作りました。
本当はActiveBasicで作りたかったんですけどめんどくさくなりましたw

※使用は自己責任で!私は責任を取りません。何があっても。



F04E RootKit For V11R43B
Download




◆セット内容
・adbコマンド for Windows
・busybox
・device.db(F04E追加済み)
・get_essential_address(他バージョンでも使えるように)
・run_root_shell(主役)
・unlock_security_module
・GetRoot.bat - 半自動Root化バッチファイル
F04E用のadbドライバとこのキットさえあればキットRoot化できます。
もちろん手動でも。
バッチを実行すると、新たにusmコマンドが追加されます。再起動するとLSMロックは外れるので、大きな変更をしたいのなら端末エミュレータでusmコマンドを実行してから、システムをrwでマウントしてください。

一応2chのほうでは成功報告が上がっていますが、大してデバッグしてないので気を付けてください。
下手するとハイスペック文鎮になるので。
ReadMe.txtは一応読んでくださいね。

以上です。

Arrows V F-04E Root化後いろいろ

$
0
0
Arrows V F-04E Root化後いろいろ

F-04EのRoot化後のアプリの動作確認等のメモを書いておきます。Root化については前の記事をどうぞ。
この記事が書かれたのは2015年1月ですのでその時点での動作確認になります。

・Xposedについて
フレームワークのインストール ・・・ OK
動作 ・・・ OK
インストールしたモジュール:
GravityBox
Greenifty
Play Store link in App info
Youtube AdAway
   docomo MVNO Dataonly-SIM Patcher
F-02E_MVNO_PATCH

上記のモジュールはいずれも動作しています。
が、一部動作しない機能があります。
 ※電源メニュー拡張系のモジュールをインストールすると、電源メニューを出すとOSが落ちて再起動するようになるます。標準でいろいろ機能がついているので不要でしょう。
また、Xposedは下手をしたら最悪起動できなくなるので十分に気を付けて、ご利用ください。(本当に心臓に悪い)

・MVNOでのテザリングについて
上記XposedモジュールのSIM関連(黄色字)をインストールするとできるようになると思います。
筆者は色々試した結果成功している可能性があるので、できない場合はググってどうにかしてください。(XPERIA向けのSQLをいじってたりなど)

・指紋+パターン認証設定時のVPN利用について
Androidが4.2なので標準のVPN機能を利用しようとすると、認証ストレージのためにパスワード認証にさせられてしまいます。ここは富士通に何とかしてほしいところですけどどうしようもないので[VpnRoot]というアプリを使います。このアプリでのPPTP式のVPNの利用ができることを確認しました。
ちなみにBuffalo WHR-G301NのDD-WRTの最新版ファームでは何かと不具合が起きるので、
v24-sp2 (10/27/14)
 を使うといいそうです。
(不具合の例:DHCPでIPが割り当てされない、無線LANにつながらない、無線LANで頻繁に通信が切れる)

・ダウンクロック(というよりCPUの省電力モード)について
CPUマスター無料版を利用中。標準ではinteractiveになっていますが、電池持ちを優先したい場合conservativeにしましょう。powersaveにした場合、電源ボタンを押してからの画面の点灯が非常に遅い上に頻繁にOSが落ちます。

・Titanium Backup
システムアプリを凍結させた後、復活させると「このアプリは動作を停止しました」ループが発生し、起動はするのに使い物にならないという事態になるので注意。ドコモ製のアプリの凍結には他サイトにリストが乗っているので参考にすると良いでしょう。

・その他
-AdAway
-AFWall+
-RootDim
-端末エミュレータ
を利用していますが、正常に動作しております。

よくこの機種はよく重いとかバッテリーがすぐ減るとか言いますが、Root化しなくても設定のデーター通信の制限を設定すると若干良くなります。重いと感じたことは省電力モード中以外は感じたことはないです。(もしかしたら当たり機かもしれない)
ちなみにバッテリー使用量のランキングの一位はディスプレイです。輝度最低にしても40%食うのでもうどうしようもないです。

以上です。

ゼルダの伝説トワイライトプリンセス デバッグ用テキスト?

$
0
0
ゼルダの伝説トワイライトプリンセス デバッグ用テキスト?

久しぶりにゲームデータを漁ったらなんか出てきたので乗っけます。本当に久しぶりだ・・・

ファイルパス:
/res/Msgjp/bmgres99.arc/zel_99.bmg

ググってもEmptyという情報しかないので日本語版だけかと。
漢字の前にひらがな入っているのは振り仮名用かと思われる。

余計なデータ削ってそれっぽくしてるので実データとは違いますが、抜いたテキストです。

・・・まぁ、そうなんざますの?!
えぇ、そうなんザマスよ~ あらいやだ~ ホホホ!
 か買い  もの物だったらちゃんと  れつ列に  なら並んでおくれよ!
ここは   きしだん騎士団の   しせつ施設だぞ
 
 いっぱん一般  じん人は  た立ち  い入り   きんし禁止だ! ん?   にゅうだん入団したいのか?
でも   いま今は   ぼしゅう募集してないゾ
わたしのママ、  あさ朝からずーっと
ここでお  はな話ししてるの
はやく おうちに
 かえ帰りたいよう・・・ えっとぉ・・・
ミルクとぉ カボチャとぉ・・・

えっとぉ えっとぉ・・・

あーん もう!
 
 はな話しかけられたから 
 わす忘れちゃったよぅ!

この   せいねん青年が ワシの 
 しあわ幸せを いの祈ってくれるんじゃと!
 
 わか若いのに    かんしん感心じゃのう!
あとで こづかいでもやろうかのう! あなたも  
 しあわ幸せになりたいのですか?
 
 すこ少しの   とうし投資を おしまなければ
 
 わたくし私の  いの祈りで あなたにも 
 しあわ幸せが   おとず訪れますよ・・・
 ふぅ~っ! やっと   で出られたわぁ~! もうね~、オケツがきつくて
  で出られなかったのよぉ~ あら・・・おにい兄ちゃん、アレ?
  ぼうけんしゃ冒険者ってヤツ?
  は い
 いいえ
 まっ・・・
 おな同じだわ・・・ あらやだ~!
 
 ぐうぜん偶然の いっち一致!
 えっ・・・じゃあ・・・ただの  とお通りすがり・・・ あらやだ~!
ドラマチックな  であ出会い! おばちゃんはねぇ~
ちょっと、  さが探し  もの物  してるのぉ あらっ、あらあらあら・・・
そうねぇ~ それじゃあねぇ~   たび旅は  みち道  づ連れって   い言うじゃない?
おばちゃん  き決めた・・・ おにい兄ちゃんに ついていくわ~! おばちゃんといると  イイコト  あるんだから
  おにもつ荷物  だなんて  い言っちゃヤ~よぉ~ あらっ!
おばちゃんのこと、  よ呼んだ?!
おにい兄ちゃん、おそと外にで出たいの?
 は い
 いいえ
あらまぁ・・・
がんば頑張るわねぇ!
おそと外の   くうき空気が  す吸いたくなったら
 
 むり無理しないで、おばちゃんに  い言うのよ?! あらそう!
そうねぇ、そうするといいわぁ~ じゃあ、おばちゃんが
おにい兄ちゃんを
 おく送ってあげる! あっ、そうそう・・・
 おばちゃんのはね羽  を
 
 にもつ荷物  に  い入れといてあげるからねぇ
おばちゃん、ここで  ま待ってるから
 
 もど戻りたくなった  とき時に  つか使えばすぐに
 もど戻って  こ来れるわよぉ! じゃあ、  だ出してあげるわねぇ
いってらっしゃ~い! 
 じい爺さん、いつまで  なや悩んでやがる・・・ はやくしてよぉー 
 なら並び  つか疲れちゃったけど
 
 いま今あきらめて  かえ帰るのも くやしいわ・・・
 きょう今日はどの  みせ店も  こ混んでるねぇ・・・ アタシに
 にあ似合う かわいい  はな花を
このツボいっぱいに もらおうかね! オバちゃんに 
 にあ似合う  はな花なんて・・・ハァ・・・ 
 つら辛い  しょうばい商売だよ・・・
 
 おそいなぁ まだかなぁ・・・ あの お  ねえ姉ちゃん、何時間もいるけど
なにしてるんだろね? ・・・はい? ・・・えっ、なに? ・・・んっ、なんですか?
もう  ひとこえ一声!
40ルピーに まけてよ! コレと ソレと アレと・・・
え~と・・・あとはドレにしようかねぇ・・・ し知らないオジチャンとは お
 はな話ししない!
  し知らないオニイチャンとも お
 はな話ししない! おじょうちゃん、 
 まいご迷子じゃないのかね?
こんな
 くら暗いとこにいてちゃ  あぶ危ないよ? なんでこんなトコに
ガキがいるんだよ・・・ んっ、   じゃま邪魔? 
あ・・・ごめんね・・・でも、どかないけどね おばあちゃん どこかなー
 
 ひと人が  おお多すぎて よくわかんないや・・・ おにいちゃん まってえー 
 やす安いよ 
 やす安いよ~っ!
よっ! ニイちゃんも  み見てってよ! ウチで  か買ったツボを  
 たかね高値で 
 てんばい転売してる
 
 わる悪いヤツがいるみたいなんだよネ・・・

お にい兄さんも だまされないようにね
・・・あんま 
 きょうみ興味なさそうだし、  だいじょうぶ大丈夫だろうけど あ、あなた
 だれ誰?
カレが
 へん変な 
 ごかい誤解するから 
 はな話しかけないで! なんだ? 
 だれ誰だよ、オマエ?  
 
   はい、いらっしゃい!       ヤギ
 にく肉のシチュー 15ルピー
      ローストビーフ  20ルピー
      か買わない はい、15ルピーね
まいどあり! 20ルピーだよ、まいどあり! おこづかいくれたら
あたし お
 にい兄ちゃんに
 やさ優しくしてあげる!       %   もらう
 もどす カボチャ、ウマイヨ!
  5ルピー   イジョウ イレテネ! ソリャ ヤダヨ!
オイラニ サシチャア ヤダヨ?
  20ルピー  ダケド モット イレテ イイヨ!         %  チョーッ! コッチ、コッチ!
オカネ イレテチョーダイ!  アッ・・・
ユミ、モッテナイト ヤダヨー! ヤダナァ!
ソンナニ モテナイヨ! ヨウコソ! &
ナンカカッテ! ナンデモカッテ! アッ! ケチンボ!
ケチ! ケチケチケチ! アーッ!
マタキタナ、ドロボー! サンキュー! マタキテネ! ・・・ツギハ チャント ハラッテネ・・・ アッ・・・ドロボー! 
 キューチャンノ キューキューショップ ダヨー 
 ミルク、マイニチ イレカエテルヨ!
  15ルピー  デ イッパイ、ドウ? は い
 いいえ        %  と採りたての 
 やさい野菜と 
 しぼ搾りたてのミルクです

カボチャ    5ルピー 
ミルク    15ルピー カボチャ、ウマイヨ!
  5ルピー   イジョウ イレテネ! ~ おしながき ~
カボチャ   5ルピー 
ミルク   15ルピー

       % 
 おだい御代は この  はこ箱に  い入れてください

       %  コンドハ チャント ハラッテネ? カンテラの 
 あぶら油     いっぱい一杯  50ルピー 
 
 よる夜の  もり森は  ま真っ  くら暗で   きけん危険です。
カンテラの   あぶら油ぎれに  ご   ちゅうい注意ください。
  ほ欲しいかたは    か  に  あ空きビン  を持ってすくってください。 
 あか赤いクスリ     いっぱい一杯  10ルピー 
キノコと   やくそう薬草をじっくり  につ煮詰めて  つく作りました。
  の飲むと  たいりょく体力が   かいふく回復  するおクスリです。
  ほ欲しいかたは    か  に  あ空きビン  を持って
すくってください。 ミルク     いっぱい一杯(2回  ぶん分)  15ルピー 
 
 しんせん新鮮なミルクで  たいりょく体力を   かいふく回復  してください。
ビン1  はい杯で2   かいぶん回分になります。
  ほ欲しいかたは    か  に  あ空きビン  を持ってすくってください。
マイドアリー! ヨッ、ニーチャン フトッパラ! ・・・スクナイネ・・・
 あぶら油    ほきゅう補給 ミドナメッセージウインドウのテストんっ? なんだ? 
 みどり  緑ルピー  を  て手に  い入れた  

  1ルピー  だ!たくさん  あつ集めよう! 
 うし牛の  かず数は  です
 かず ただいま  です  Kブツブツブツブツ・・・ 棒きれなんて 振り回して
なにが面白いんだろ・・・?  <棒きれなんて 振り回して
なにが面白いんだろ・・・? 
 ぼう棒きれなんて   ふ振り  まわ回してなにが 
 おもしろ面白いんだろ・・・? よし、わかったなら
 }  もういっちょ  こ来い!   これは二択ですか?
 は い
 いいえ これは三択ですか?
どうですか?
      
 さんたく三択ですね
      
 ちが違うと おも思う
      ちょっとわかりません ジャンプします

 ジャンプ先です 一時フラグ1 ON! 一時フラグ1 OFF! これは上の二択ですか?
 は い
 いいえ これは上の三択ですか?
どうですか?
      
 さんたく三択ですね
      
 ちが違うと おも思う
      ちょっとわかりません これは二択ですか? は い
 いいえ これは三択ですか?
どうですか?       
 さんたく三択ですね
      
 ちが違うと おも思う
      ちょっとわかりません これは
 いし石のカンバンです、 
 かんばん看板です!!
5 
 ぎょう行です
5 
 ぎょう行
 はい入ります
 
 つぎ次の 
 ぎょう行まで
 はい入ります
ここまでです 部屋にはローブをかぶった人が立っている


妖精、顔元に近づき 驚く  ・ キケン! d 
 
 かって勝手に
 はい入るな!

バーンズ あっ・・・・・・! サイフ 
 わす忘れた・・・!  !・・・  !!
  ○  がつ月×  にち日 

これは本のテストです。
 
 きょう今日から日記をつけます。
いつまで続くかわかりません
が頑張ります。
でも書くことがありません。
 どうさ動作・  ひょうじょう表情 デフォルト
 どうさ動作・  ひょうじょう表情 1
 どうさ動作・  ひょうじょう表情 2
 どうさ動作・  ひょうじょう表情 3
 どうさ動作・  ひょうじょう表情 4
 どうさ動作・  ひょうじょう表情 5
 どうさ動作・  ひょうじょう表情 6
 どうさ動作・  ひょうじょう表情 7
 どうさ動作・  ひょうじょう表情 8
 どうさ動作・  ひょうじょう表情 9
 どうさ動作・  ひょうじょう表情 10
 どうさ動作のみ デフォルト
 どうさ動作のみ 1
 どうさ動作のみ 2
 どうさ動作のみ 3
 どうさ動作のみ 4
 どうさ動作のみ 5
 どうさ動作のみ 6
 どうさ動作のみ 7
 どうさ動作のみ 8
 どうさ動作のみ 9
 どうさ動作のみ 10
 ひょうじょう表情のみ 
 デフォルト
 ひょうじょう表情のみ 1
 ひょうじょう表情のみ 2 ひょうじょう表情のみ  3
 ひょうじょう表情のみ 4
ひょうじょう表情のみ 5
ひょうじょう表情のみ 6
ひょうじょう表情のみ 7
ひょうじょう表情のみ 8
ひょうじょう表情のみ 9
ひょうじょう表情のみ 10 
 なに何をチェックしますか?       
 どうさ動作・  ひょうじょう表情チェック
      
 どうさ動作のみチェック
      
ひょうじょう表情のみチェック あっとおどろく タメゴロウ 
 うま馬の  な名は "です
 じまく字幕タイプ
 じまく字幕タイプ
2行  め目 字幕タイプ
2 
 ぎょうめ行目
3 
 ぎょうめ行目 ノーマル 
 かいわ会話ウインドウ・通常 
 ひょうじ表示
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ ノーマル 
 かいわ会話ウインドウ・フェード(1)
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ ノーマル 
 かいわ会話ウインドウ・フェード(10)
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ ノーマル 
 かいわ会話ウインドウ・フェード(20)
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ
 せいれい精霊 
 かいわ会話ウインドウ・ 
 いちもじ一文字フェード
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ
 せいれい精霊 
 かいわ会話ウインドウ・ 
 いっかつ一括フェード
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ
 どうぶつ動物 
 かいわ会話ウインドウ・通常 
 ひょうじ表示
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ ミドナ 
 かいわ会話ウインドウ・通常 
 ひょうじ表示
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ
 じまく字幕タイプウインドウ・通常 
 ひょうじ表示
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ
 じまく字幕タイプウインドウ・フェード(10)
  レッド     グリーン     ブルー   イエロー
  ライトブルー   パープル  グレー   オレンジ 
 いろ色フォント  の表示テスト
デフォルト+  レッド 
 いろ色フォント  の表示テスト
デフォルト+  グリーン 
 いろ色フォント  の表示テスト
デフォルト+  ブルー 
 いろ色フォント  の表示テスト
デフォルト+  イエロー 
 いろ色フォント  の表示テスト
デフォルト+  ライトブルー 
 いろ色フォント  の表示テスト
デフォルト+  パープル
 いろ色フォント  の表示テスト
デフォルト+ グレー 
 いろ色フォント  の表示テスト
デフォルト+  オレンジ アチャーッ!   

 
 かこ囲まれた!! チェッ!
ずいぶんナメられたもんだナ こんな
 ざこ雑魚、いちいち 
 あいて相手にしてらんないね~ オマエだけでも なんとかなるだろ?
コイツら みんな やっちまえヨ ナァ・・・、この
 おく奥から
イヤ~な 
 けはい気配を  かん感じるぞ・・・
 せいれい精霊が  い言ってた 
 くろ黒き   ちから力  ってのが
 
 ちか近くにあるんじゃないのか・・・? あ~あ~・・・
こんな  もり森の  おく奥で 
 まど窓  あ開けっぱなしにして・・・ あ~あ~・・・
こんな  もり森の  おく奥で 
 まど窓  あ開けっぱなしにして・・・ 

以上がファイルの内容です。
どう見てもデバッグ用のテキストは着色してあります。
おばちゃんって羽じゃなくておばちゃん本体じゃなかったかなあ・・・
デバッグルームとか残ってないのかなあ・・・・

以上です。
 

ActiveBasicで#include使ったときに落ちる問題

$
0
0
ActiveBasicで#include使ったときに落ちる問題の対処

自分の環境にて悩まされていた問題だったのでメモ

先に結論:
ActiveBasic v4で#include使っていてコード補完で落ちるなら、#includeにフルパスを書け!



症状:
 プロジェクト以外、標準定義ファイル以外のプログラムを#includeで読み込んだ場合にプロジェクトエディタが落ちる。
ファイル構成は例としてこんなかんじ
Project1 - A.dll
           - def.sbp
           - user.abp

user.abpの中身は
#include "def.sbp"
とだけ。

この状態で、user.abp編集中に
関数(
まで書くと落ちる落ちる。コード補完でつまづいているようだ。コード補完を切れば落ちなくなる。
私はコード補完がないと不安になるへぼプログラマーなので何とかしたい。

OllyDbgでProjectEditorをアタッチしてみた。
そして関数(と入力するとOllyDbgがエラーを検出てくれた。

ERROR_FILE_NOT_FOUNDだそうだ。
ファイル名は間違っていない。ので#includeにフルパスを書いた。すると落ちなくなった。
やったね。

結論:
ActiveBasic v4で#include使っていてコード補完で落ちるなら、#includeにフルパスを書け!

以上です。
 
Viewing all 56 articles
Browse latest View live