4: 2008-04-28 (月) 08:32:54 |
5: 2009-11-17 (火) 12:08:30 |
| *** (7) APIの基本構造(2) | | *** (7) APIの基本構造(2) |
| -(ここの話はアセンブラでギチギチに最適化されたアプリを読み書きするときしか必要ない知識で、introシリーズ感覚でCでプログラムするときはこんなことを全く理解していなくて問題ない) | | -(ここの話はアセンブラでギチギチに最適化されたアプリを読み書きするときしか必要ない知識で、introシリーズ感覚でCでプログラムするときはこんなことを全く理解していなくて問題ない) |
- | -「ぐいぐい01」のAPIデータ列の仕様は、「ぐいぐい00」の頃のような単純に数値として意味のあるものと数値のエンコード法を記述する部分との混在になっている。たとえば以下はhellok0.g01内で実際に使われているAPI列である。 | + | -「ぐいぐい01」のAPIデータ列の仕様は、「ぐいぐい00」の頃のような単純に数値として意味のあるものと数値のエンコード法を記述する部分との混在になっている。たとえば以下はhellok1.g01内で実際に使われているAPI列である。 |
| 35 01 24 8D 68 65 6C 6C 6F 2C 20 77 6F 72 6C 64 0A 44 03 | | 35 01 24 8D 68 65 6C 6C 6F 2C 20 77 6F 72 6C 64 0A 44 03 |
| -これを分解しつつマークをつけるとこうなる。 | | -これを分解しつつマークをつけるとこうなる。 |
| --(x)は純粋にエンコード法を記述するためのもの(基本的にeh4) | | --(x)は純粋にエンコード法を記述するためのもの(基本的にeh4) |
| --[x]は基本的にはエンコード法の記述だが、データとしても意味のあるもの(基本的にeh4) | | --[x]は基本的にはエンコード法の記述だが、データとしても意味のあるもの(基本的にeh4) |
- | -必ず最初は(x)で始まる。最初の(3)はデフォルトのエンコード法(ここではeh4)のまま、有効なデータが2個継続するということを表す。この2という数字は、3-1で求めた。 | + | -必ず最初は(x)で始まる。最初の(3)はデフォルトのエンコード法(ここではgh4)のまま、有効なデータが2個継続するということを表す。この2という数字は、3-1で求めた。 |
| -そして、5と0という数値が来る。これは純粋なAPIファンクションのデータで、詳細は「(8) APIの基本構造(3)」で説明する。 | | -そして、5と0という数値が来る。これは純粋なAPIファンクションのデータで、詳細は「(8) APIの基本構造(3)」で説明する。 |
| -そして5と0を読み終わったことで、先の指定による「2個」が切れたので、再び(x)が来ることが予想される。ということで1つeh4でデコードすると、(1)だった。1-1=0なので0個のデータが継続するといいたいところだが、0個というのは意味不明であって、ここではエンコード法の変更を意味している。 | | -そして5と0を読み終わったことで、先の指定による「2個」が切れたので、再び(x)が来ることが予想される。ということで1つeh4でデコードすると、(1)だった。1-1=0なので0個のデータが継続するといいたいところだが、0個というのは意味不明であって、ここではエンコード法の変更を意味している。 |
| --ちなみに(0)を指定した場合は、0-1=-1で-1個のデータが継続するというさらに不可解なことになるが、これは単なるNOPである。 | | --ちなみに(0)を指定した場合は、0-1=-1で-1個のデータが継続するというさらに不可解なことになるが、これは単なるNOPである。 |
| -次の(2 4)は、2が「一時的なエンコード法の変更で、以降は符号なしで、かつ後続する継続データ数そのものもデータとして扱う」を意味し、その後ろの4が、2^(4-1)=8で、符号なし8bitエンコードモードであることを表している。 | | -次の(2 4)は、2が「一時的なエンコード法の変更で、以降は符号なしで、かつ後続する継続データ数そのものもデータとして扱う」を意味し、その後ろの4が、2^(4-1)=8で、符号なし8bitエンコードモードであることを表している。 |
- | --一時的というのは、この符号なし8bitが終わったら、またもとのeh4に戻るという意味で、これを永続的にしていると、以後は符号なし8bitがデフォルトになり継続する。 | + | --一時的というのは、この符号なし8bitが終わったら、またもとのgh4に戻るという意味で、これを永続的にしていると、以後は符号なし8bitがデフォルトになり継続する。 |
| --2のベキではない長さのデータ長を指定する方法はまた別の機会に。 | | --2のベキではない長さのデータ長を指定する方法はまた別の機会に。 |
| --2^(0-1)のときはeh4を意味する。 | | --2^(0-1)のときはeh4を意味する。 |
- | -次の8Dはeh4で0xd=13を意味するが、この13はAPIのデータでもあるし、符号なし8bitのエンコードが続く長さでもある。 | + | -次の8Dはgh4で0xd=13を意味するが、この13はAPIのデータでもあるし、符号なし8bitのエンコードが続く長さでもある。 |
| -(4)は4-1=3で3個のデータが継続するという意味になる。 | | -(4)は4-1=3で3個のデータが継続するという意味になる。 |
| ---- | | ---- |