« 【速報】安部首相が辞任を正式に表明・現在官邸にて会見中 | メイン | Second HSP 前身完成 »

Second HSPの型作成中

はてなブックマーク

とりあえずMZヘッダだけ出力してMs-Dosで表示するだけの試作品作成中。
うん、大体うまくいくんだけどね、ちょっとうまくいかない部分が。

http://academic.meganebu.com/~nanosha/php-bin/pwshsp/pukiwiki/index.php?EXE%A5%D5%A5%A1%A5%A4%A5%EB
で適当にEXEについてまとめているんだけど、そこをあまり参考にしないで
IMAGE_DOS_HEADER構造体部分を調整しているんだよね。今は。

もっと詳しく言うと、ただ文字を出力するだけのプログラムを出力するプログラムを作っているんだよね。
shsp test test.exeとやると、testとコンソールに表示されるプログラムを出力するというね。

もう一回言うけど、ヘッダの出力がうまくいかないんだよね。

とりあえず、こんな感じのソース。役には立たない。


/* Second HSP Bilder Ver1.00
   This Program do parse, compile and link. */

#include 

int main(int argc, char *argv[])
{
    // secondhsp.exe [Output message] [filename]
    if (argv[1] == 0x00)
        return FALSE;
    if (argv[2] == 0x00)
        return FALSE;

    // from 0x00 to 0x1E
    char *outs1 = new char;
    outs1 = "4D","0x5A","0x1E","0x00","0x02","0x00","0x01","0x00","0x20","0x00","0x11","0x00","0xFF","0xFF","0x02","0x00","0x00","0x01","0x00","0x00","0x00","0x00","0x00","0x00","0x1E","0x00","0x00","0x00","0x01","0x00","0x01";

    // from 0x200 to 0x20F
    char *outs2 = new char;
    outs2 = "ク..借エ.コ..ヘ!エLヘ!";

    // from after text to after text bytes
    char *outs3 = new char;
    outs3 = "..$";

    ofstream out;
    out.open(argv[2]);

    int i = 0;
    int seek = 0;

    cerr << ((int)outs1[1]) << endl;

    // output mz header
OUTMZHD:
    out.seekp(seek);
    out.put((int)outs1[i]);
    cerr << "|";
    i ++; seek ++;
    if (i != 0x1E)
        goto OUTMZHD;

    // output null
    i = 0x01E;
OUTNUL:
    out.seekp(seek);
    out.put(0x00);
    cerr << "|";
    i ++; seek ++;
    if (i != 0x200)
        goto OUTNUL;

    // output outs2
    i = 0;
OUTO2:
    out.seekp(seek);
    out.put(outs2[i]);
    cerr << "|";
    i ++; seek ++;
    if (i != 16)
        goto OUTO2;

    // output words
    i = 0;
OUTWRD:
    out.seekp(seek);
    out.put(argv[1][i]);
    cerr << "|";
    i ++; seek ++;
    if (argv[1][i] != 0x00)
        goto OUTWRD;

    // End
    i = 0;
OUTEND:
    out.seekp(seek);
    out.put(outs3[i]);
    cerr << "|";
    i ++; seek ++;
    if (i != 03)
        goto OUTEND;

    out.close();
    if(!out)
    {
        cerr << "Output Error!" << endl;
        return FALSE;
    }
    //delete outs1;
    //delete outs2;
    //delete outs3;

    cout << "Output end" << endl;

    return 0;
}


deleteはなぜかうまくいかないから消している。
出力部もfor使えばいいんだけどなぜかうまくいかないからラベルとgotoで代用している。

うまくいったら多分Wikiに載せるかもしれないです。

追記。shsp Hello_World test.exeとかやったとき出力される物。
凄く重くなるのでやめた。


トラックバック

このエントリーのトラックバックURL:
http://academic.meganebu.com/~nanosha/cgi-bin/MT/mt-tb.cgi/180

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

他のブログORトップへ

About

2007年09月12日 20:10に投稿されたエントリーのページです。

ひとつ前の投稿は「【速報】安部首相が辞任を正式に表明・現在官邸にて会見中」です。

次の投稿は「Second HSP 前身完成」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Tag cloud

Powered by
Movable Type 3.35