重庆酱肉包子的做法:如何将.bin打包成.exe

来源:百度文库 编辑:高校问答 时间:2024/04/29 19:44:03
ds

下面是使用’bin'格式来产生`.EXE'文件(nasm);当然也有一些第三方的工具可以使用。你可以到网上搜索。

'.EXE'文件是相当简单的,所以可以通过编写一个纯二进制文件然后在前面连接上一个32bytes的头就可以产生一个'.exe'的文件了。这个文件头也是相当简单,它可以通过使用NASM自己的'DB'和'DW'命令来产生,所以你可以使用'bin'输出格式直接产生'.EXE'文件。

在NASM的包中,有一个'misc'子目录,这是一个宏文件'exebin.mac'。它定义了三个宏`EXE_begin',`EXE_stack'和`EXE_end'.

要通过这种方法产生一个'.EXE'文件,你应当开始的时候先使用'%include'载入'exebin.mac'宏包到你的源文件中。然后,你应当使用'EXE_begin'宏(不带任何参数)来产生文件头数据。然后像平常一样写二进制格式的代码-你可以使用三种标准的段'.text','.data','.bss'.在文件的最后,你应当调用'EXE_end'宏(还是不带任何参数),它定义了一些标识段size的符号,而这些宏会由'EXE_begin'产生的文件头代码引用。

在这个模块中,你最后的代码是写在'0x100'开始的地址处的,就像是'.COM'文件-实际上,如果你剥去那个32bytes的文件头,你就会得到一个有效的'.COM'程序。所有的段基址是相同的,所以程序的大小被限制在64K的范围内,这还是跟一个'.COM'文件相同。'ORG'操作符是被'EXE_begin'宏使用的,所以你不必自己显式的使用它

你可以直接使用你的段基址,但不幸的是,因为这需要在文件头中有一个重定位,事情就会变得更复杂。所以你应当从'CS'中拷贝出一个段基址。

进入你的'.EXE'文件后,'SS:SP'已经被正确的指向一个2Kb的栈顶。你可以通过调用'EXE_stack'宏来调整缺省的2KB的栈大小。比如,把你的栈size改变到64bytes,你可以调用'EXE_stack 64'

一个关于以这种方式产生一个'.EXE'文件的例子在NASM包的子目录'test'中,名字是'binexe.asm'