回 帖 发 新 帖 刷新版面

主题:[讨论]QB程序的格式.

迫于"生活"压力最近不得不去学一下QB了,目前是7.1,在网上苦搜了一翻之后,发现这里对QB讨论的比较多,因此在这里发贴咨询一下各位大侠,先谢过了~[em1]

一个BAS文件被编译成一个EXE之后,会被生成一个段,真正的代码从第49个字节开始,前48个字节貌似是一些配置信息,如:该BAS文件的名称,但之后的就不知道了,有没有哪个熟悉一点的大侠给指点一下??

回复列表 (共4个回复)

沙发

好像编译原理里面有说,但我没看懂没看完没去考。

板凳


谢谢moz的回贴,个人感觉这应该是编译器的特殊做法,因为并不是所有语言的编译器都会生成这48个字节.

具体如下代码所示,这个程序是由MAIN.BAS编译出来的:
=======================================================
seg000          segment byte public 'CODE' use16
                assume cs:seg000
                assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
aBlmain         db 'blMAIN    '         
                db 0BDh ; ?
                db    5
                db  82h ; ?
                db 0C5h ; ?
                db 0B0h ; ?
                db  2Ch ; ,
                db 0D0h ; ?
                db  6Ch ; l
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db  50h ; P
                db    0
                db  20h
                db  24h ; $
                db    0
                db    0
                db    0
                db    0
                db 0D0h ; ?
                db  6Ch ; l
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db 0FFh
                db 0FFh
                db  85h ; ?
                db  1Eh
                jmp     short user_Entry ; 这是第一行代码,前面的不知道是些什么~!

Seg0_Ignore     proc near               ; CODE XREF: user_Entry+Ap
                cmp     ds:g_wIgnoreFuncFlag, 0 
                jnz     short loc_1003A 
                retn                    
loc_1003A:                              
                pop     ax
                push    cs
                push    ax
                jmp     B$EVK1          ; 
Seg0_Ignore     endp

user_Entry      proc near               ; 程序的入口点.

...

3 楼

16位DOS下MS的编译都是用LINK把中间目标代码二次编译的,应该是一样的。

4 楼

回MOZ,那个不是由LINK加进去的,再BC编译成OBJ文件的时候,就已经加进去了.
经过大半夜的研究,在文件名后的前两个字节的意义是该段有效代码的长度.
在QB中每个能正常结束的函数,编译器都会加入一条call B$EXSA,而一个段结束编译器加上一条
call B$CENP, 为了达到对齐的效果,在CENP函数之后会存在一些无意义的数据.那两个字节刚好指
向了这里,在上面的代码中是05BDh,正在看其它字段的意义,欢迎高手前来指点.

我来回复

您尚未登录,请登录后再回复。点此登录或注册