ページへ戻る
印刷
hideyosi/hijk計画
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:hideyosi/hijk計画 をテンプレートにして作成
開始行:
*なんぞねこれ?
Kタンが作っている第二世代、efg01ってあるよね。あれを元にh...
派生させたんだから、もうオイラが好きに改良していくよ。
*バージョン番号表記
好きだねぇ~これwww
すこし調べてみると、.g01アプリの場合、ソース冒頭で引数の...
今までは普通のCのソースに''文字列''を書き足せばそれでよか...
(もちろん.g01だってそれは出来る。)~
・・・でもなぁ。なーんかそれじゃ、色気がないというか。欲...
そこで、Usageと同じように、ソースヘッドに番号だけを埋め込...
で、現在の妄想。バージョン番号を出したい場合はhijk側でオ...
>hijk.exe -v Nasuka.g01
hijk Version 1.1
Nasuka Version 1.3
Usage>Nasuka in:filename out:filename
こんな感じに。
COLOR(blue){この構想には二つ意味がある。まず、現在はなに...
-なぜそんなにバージョン番号を付けたがる!貴様それでも軍人...
--民間人です。はいwww
--好きだから
--オイラ自身がいろんなツールを収集・整理する時に、バージ...
**バージョン番号の文字列の制限
これはUsage(オプションの扱い)でも同じで、普通のC言語の...
COLOR(blue){誤解してほしくないのだが別にそれを悪だと言っ...
たとえばこんな仕様。
-バージョン番号はあくまでも番号なので、数値のみで行う
-3つだけってことにする。(6.3.2とか)三つまでを許容してお...
-各番号は256まで。(実際、バージョン189とかってなさそうだ...
-どうしても番号以外の場合は別にコードを打ち込むような仕様...
どかな??
**できるかな?
[[ここ>http://osask.net/w/538.html]]でいろいろ解析してみ...
なんか余ってないかな? さっそくソースコードを読み解いて...
ここかなぁ・・・ func06_init();
void func06_init()
{
UCHAR *p;
func06str = malloc(sizeof (struct FUNC06STR));
func06str->flags &= 0;
func06str->usgs = 2;
func06str->def_arg0 = 1;
func06str->usg[0].tag[0] = '\0';
func06str->usg[0].flg = 0;
func06str->usg[0].usg[0] = '\0';
func06str->usg[0].typ = 0xff;
func06str->usg[1].tag[0] = '\0';
func06str->usg[1].flg = 3;
func06str->usg[1].usg[0] = '\0';
func06str->usg[1].typ = 0xfe; /* 3:str */
for (func06str->argv0 = p = *main_argv; *p != '\0'; p++...
if (*p == '\\' || *p == '/')
func06str->argv0 = p + 1;
}
return;
}
うーん。この関数って、内部にコマンドライン情報を格納する...
102行目がそれかな。ここでFUNC06STR構造体を定義。さらに108...
COLOR(blue){おっと!FUNC06STR内に、さらにFUNC06STR_SUB00...
***FUNC06STR構造体
|0 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|1 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|2 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|>|>|>|>|>|>|>|>|>|CENTER: ・ |
|62|usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|63|usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|>|>|>|>|>|>|>|>|>|LEFT:def_arg0(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:flags(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:usgs(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:*argv0(ポインタ)|
|>|>|>|>|>|>|>|>|>|LEFT:argv_f(256文字)|
|>|>|>|>|>|>|>|>|>|LEFT:argv_all(6万5千文字)|
-func06_initはなにをやってるのか?(ヘタレの予測)
--メモリをmallocを使って確保(全部でいくつになるんだこれ...
--flagsをゼロに(なんで?)
--usgsを2に(とりあえず、引数は二個だよってことで初期化か...
--def_arg0を1に(なんだろこれ。defっていうくらいだから、...
--以降、とりあえず2列、usg(FUNC06STR_SUB00構造体)に値を...
---tag[0]に0を。(tagは文字列なので、頭に0を入れて空文字...
---flgを0に。(なんだろう。flgかぁ。なにを表すものかな?)
---usg[0]に0を。(同じく空文字化だと思う)
---typを0xffに(0xffはなんだろう?0xfeは文字列引数ってこ...
--次にforループはなにしてるんだろう? *main_argvって、た...
***煮詰まった・・・
ちょっと別の方向からアプローチしてみよう。
gas2naskのソースを見てみると、先頭で例のコマンドラインの...
んんん? guigui01.hを見てみると、この関数はdefineになっ...
#define g01_setcmdlin(p) __asm__ __volatile__("movl %%...
_g01_execcmd"::"a"(p):"%esi","%edi","cc")
つーことは・・・・
__asm__ __volatile__("movl %%eax,%%edi\n\tcall_g01_execc...
これに置換された後コンパイルされるってこと・・・なのか?...
はっはあぁぁぁ・・・・・~
わかったぞ! これはgcc由来の''インラインアセンブラ''の書...
__asm__ __volatile__(" movl %%eax,%%edi
call_g01_execcmd"::"a"(p):"%esi",...
)
うへぇ! 難しい・・・。 eaxの値をediに写し、g01_execcmd...
やっと見つけた。startup.ask内にやっとこさg01_execcmdを見...
だめだあぁぁぁ・・・わっかんねえぇぇぇぇ・・・・
**func06_putusage()
この関数を見ていると、やっぱりどう見ても、例のコマンド定...
*ヒントキターーー!
seroさんがヒントくれた!! さっそくそのへんを検証・・・...
こんなコードを発見。状況から予測を当てはめると・・・
for (j = 0;; j++) { ←jは63ま...
i = getnum_api(&ra, 0); たしか、SUB00...
if (i == 4) {
func06str->usgs = j; ←iが4だとループ...
break; ブレイク時に...
}
if (j == 64) {
puts("func6: internal error (2)");
exit(1);
}
if (i == 5)
i = 0xfff0 << 2 | 0;
if (i == 6) ←引数の先頭...
i = 0xfff1 << 2 | 2;
if (i == 7) { ←確か、改行...
/* 改行 */
if (j == 0) { ←jが0の時。...
puts("func6: internal error (3)");
exit(1);
まだ確認が甘いが、このiって、コードの''一桁目''に合致する...
そもそもiってなんだよ? i = getnum_api(&ra, 0); getnum_...
また、''一桁目が重要''なのは、いずれも0x8xなコード達。(...
-なぜ0x8xが選ばれてるんだろう? ヤマカンでASCIIコード表...
--俗に言われるASCIIコードのうち、0x80以降は第7ビットが立...
--キーボードから入力できる文字はみな前半に意図的に集中さ...
i = 0xfff0 << 2 | 0; ←なにしてっかってーと・・・
・ 1111111111110000(0xfff0) を左に二つ、ビットシ...
・ 1111111111000000 できやした。
・ 0000000000000000(0) ゼロと論理演算(論理和...
・ 1111111111000000 できやした~
あれ?? これ、なにをしてるの??なんのために...
終了行:
*なんぞねこれ?
Kタンが作っている第二世代、efg01ってあるよね。あれを元にh...
派生させたんだから、もうオイラが好きに改良していくよ。
*バージョン番号表記
好きだねぇ~これwww
すこし調べてみると、.g01アプリの場合、ソース冒頭で引数の...
今までは普通のCのソースに''文字列''を書き足せばそれでよか...
(もちろん.g01だってそれは出来る。)~
・・・でもなぁ。なーんかそれじゃ、色気がないというか。欲...
そこで、Usageと同じように、ソースヘッドに番号だけを埋め込...
で、現在の妄想。バージョン番号を出したい場合はhijk側でオ...
>hijk.exe -v Nasuka.g01
hijk Version 1.1
Nasuka Version 1.3
Usage>Nasuka in:filename out:filename
こんな感じに。
COLOR(blue){この構想には二つ意味がある。まず、現在はなに...
-なぜそんなにバージョン番号を付けたがる!貴様それでも軍人...
--民間人です。はいwww
--好きだから
--オイラ自身がいろんなツールを収集・整理する時に、バージ...
**バージョン番号の文字列の制限
これはUsage(オプションの扱い)でも同じで、普通のC言語の...
COLOR(blue){誤解してほしくないのだが別にそれを悪だと言っ...
たとえばこんな仕様。
-バージョン番号はあくまでも番号なので、数値のみで行う
-3つだけってことにする。(6.3.2とか)三つまでを許容してお...
-各番号は256まで。(実際、バージョン189とかってなさそうだ...
-どうしても番号以外の場合は別にコードを打ち込むような仕様...
どかな??
**できるかな?
[[ここ>http://osask.net/w/538.html]]でいろいろ解析してみ...
なんか余ってないかな? さっそくソースコードを読み解いて...
ここかなぁ・・・ func06_init();
void func06_init()
{
UCHAR *p;
func06str = malloc(sizeof (struct FUNC06STR));
func06str->flags &= 0;
func06str->usgs = 2;
func06str->def_arg0 = 1;
func06str->usg[0].tag[0] = '\0';
func06str->usg[0].flg = 0;
func06str->usg[0].usg[0] = '\0';
func06str->usg[0].typ = 0xff;
func06str->usg[1].tag[0] = '\0';
func06str->usg[1].flg = 3;
func06str->usg[1].usg[0] = '\0';
func06str->usg[1].typ = 0xfe; /* 3:str */
for (func06str->argv0 = p = *main_argv; *p != '\0'; p++...
if (*p == '\\' || *p == '/')
func06str->argv0 = p + 1;
}
return;
}
うーん。この関数って、内部にコマンドライン情報を格納する...
102行目がそれかな。ここでFUNC06STR構造体を定義。さらに108...
COLOR(blue){おっと!FUNC06STR内に、さらにFUNC06STR_SUB00...
***FUNC06STR構造体
|0 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|1 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|2 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|>|>|>|>|>|>|>|>|>|CENTER: ・ |
|62|usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|63|usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)...
|>|>|>|>|>|>|>|>|>|LEFT:def_arg0(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:flags(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:usgs(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:*argv0(ポインタ)|
|>|>|>|>|>|>|>|>|>|LEFT:argv_f(256文字)|
|>|>|>|>|>|>|>|>|>|LEFT:argv_all(6万5千文字)|
-func06_initはなにをやってるのか?(ヘタレの予測)
--メモリをmallocを使って確保(全部でいくつになるんだこれ...
--flagsをゼロに(なんで?)
--usgsを2に(とりあえず、引数は二個だよってことで初期化か...
--def_arg0を1に(なんだろこれ。defっていうくらいだから、...
--以降、とりあえず2列、usg(FUNC06STR_SUB00構造体)に値を...
---tag[0]に0を。(tagは文字列なので、頭に0を入れて空文字...
---flgを0に。(なんだろう。flgかぁ。なにを表すものかな?)
---usg[0]に0を。(同じく空文字化だと思う)
---typを0xffに(0xffはなんだろう?0xfeは文字列引数ってこ...
--次にforループはなにしてるんだろう? *main_argvって、た...
***煮詰まった・・・
ちょっと別の方向からアプローチしてみよう。
gas2naskのソースを見てみると、先頭で例のコマンドラインの...
んんん? guigui01.hを見てみると、この関数はdefineになっ...
#define g01_setcmdlin(p) __asm__ __volatile__("movl %%...
_g01_execcmd"::"a"(p):"%esi","%edi","cc")
つーことは・・・・
__asm__ __volatile__("movl %%eax,%%edi\n\tcall_g01_execc...
これに置換された後コンパイルされるってこと・・・なのか?...
はっはあぁぁぁ・・・・・~
わかったぞ! これはgcc由来の''インラインアセンブラ''の書...
__asm__ __volatile__(" movl %%eax,%%edi
call_g01_execcmd"::"a"(p):"%esi",...
)
うへぇ! 難しい・・・。 eaxの値をediに写し、g01_execcmd...
やっと見つけた。startup.ask内にやっとこさg01_execcmdを見...
だめだあぁぁぁ・・・わっかんねえぇぇぇぇ・・・・
**func06_putusage()
この関数を見ていると、やっぱりどう見ても、例のコマンド定...
*ヒントキターーー!
seroさんがヒントくれた!! さっそくそのへんを検証・・・...
こんなコードを発見。状況から予測を当てはめると・・・
for (j = 0;; j++) { ←jは63ま...
i = getnum_api(&ra, 0); たしか、SUB00...
if (i == 4) {
func06str->usgs = j; ←iが4だとループ...
break; ブレイク時に...
}
if (j == 64) {
puts("func6: internal error (2)");
exit(1);
}
if (i == 5)
i = 0xfff0 << 2 | 0;
if (i == 6) ←引数の先頭...
i = 0xfff1 << 2 | 2;
if (i == 7) { ←確か、改行...
/* 改行 */
if (j == 0) { ←jが0の時。...
puts("func6: internal error (3)");
exit(1);
まだ確認が甘いが、このiって、コードの''一桁目''に合致する...
そもそもiってなんだよ? i = getnum_api(&ra, 0); getnum_...
また、''一桁目が重要''なのは、いずれも0x8xなコード達。(...
-なぜ0x8xが選ばれてるんだろう? ヤマカンでASCIIコード表...
--俗に言われるASCIIコードのうち、0x80以降は第7ビットが立...
--キーボードから入力できる文字はみな前半に意図的に集中さ...
i = 0xfff0 << 2 | 0; ←なにしてっかってーと・・・
・ 1111111111110000(0xfff0) を左に二つ、ビットシ...
・ 1111111111000000 できやした。
・ 0000000000000000(0) ゼロと論理演算(論理和...
・ 1111111111000000 できやした~
あれ?? これ、なにをしてるの??なんのために...
ページ名: