具体你可以去看DOS下EXE文件是如何加载的(以前DOS下的病毒文件必须要注意修改的事项)!编译的时候会缺省一个基址进行定位,但实际分配的时候这个基址并不一定就等于编译的基址,这时候程序的某些代码执行就会出错,EXE文件把这些需要重新定位的地方保存成一个表,当分配不同的基址的时候就把这个表值做一些加减方式的修正,这样就可以适应在不同的基址下执行了!具本可以网上搜搜看。
当然如果你的程序<(64K-100字节),可以使用EXE2COM转换成COM文件,这个COM文件固定的从CS:0x100处开始执行,复制整个程序到CS:100H处,CS、DS、ES、SS都使用相同的段,然后JMP CS:0x100处执行就可以了。
无论如何,没有现成工具的情况下你需要知道EXE或是COM的程序如何加载,你就去实现这个程序的加载工作就可以了。
|