とりあえず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とかやったとき出力される物。
凄く重くなるのでやめた。