请问一下dos下exe文件的格式 真正的指令在从什么位置执行?
------解决方案--------------------------------------------------------
在dos下,可执行程序都是由外壳程序进行加载,运行完成后再返回外壳程序,exe文件中的程序执行过程如下:
1. 由其他程序(Debug, command(shell 程序))将exe文件中的程序加载入
内存;
2. 设置 CS:IP指向程序第一条要执行的指令(即程序的入口地址),从而使程序可以运行
3. 程序运行结束后,返回到加载者
所以程序是从程序被加载进入内存后,第一次设定的CS:IP指向的内存处开始执行的。
------解决方案--------------------------------------------------------
bbs.pediy.com 有一篇描述模拟系统加载 exe 代码的文章,写得不错可以借鉴。
------解决方案--------------------------------------------------------
关于EXE,可以查查VC的包含文件里的相关结构
------解决方案--------------------------------------------------------
exe文件的格式,网上都有,你可以自己搜一下,或者给我发Email:little_grass at 163.com,我给你发一个。
------解决方案--------------------------------------------------------
文件头:
NE_MAGIC = 0 # Magic number
NE_EXRABYTES = 1 # Bytes on last page of file
NE_PAGES = 2 # Pages in file
NE_RELOCITEMS = 3 # Relocations
NE_HEADERSIZE = 4 # Size of header in paragraphs
NE_MINALLOC = 5 # Minimum extra paragraphs needed
NE_MAXALLOC = 6 # Maximum extra paragraphs needed
NE_INITSS = 7 # Initial (relative) SS value
NE_INITSP = 8 # Initial SP value
NE_CHECHSUM = 9 # Checksum
NE_INITIP = 10 # Initial IP value
NE_INITCS = 11 # Initial (relative) CS value
NE_RELOCTABLE = 12 # File address of relocation table
NE_OVERLAY = 13 # Overlay number
指令从 ne_header[NE_HEADERSIZE]*16 + ne_header[NE_INITCS]*16 开始
------解决方案--------------------------------------------------------
DOSEXE使用的是MZ格式,可以参考一下其结构图