您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:12 来源:未知

本文章共1731字,分2页,当前第1页,快速翻页:
 

运行重定位exe文件,重定位因子调度覆盖模块,链接器3制静态覆盖块,析栈初始startup

(1) X86汇编语言的组,段,类

逆风编程技术
伪指令group/segment,定义组/段,这使:

(1.1) 同组的各段,处于同一64k空间

(1.2) 段可声明'对齐,组合,类'可选属性:

(1.2.1) 段首,能对齐到BYTE,WORD,PARA(16字节),PAGE(256字节),缺省对齐到PARA.
(1.2.2) 不同源文的同名同类段,想靠链接,形成空间邻接或重叠的同名组合逻辑
段时,需用PUBLIC,COMMON,指明组合形式:

(1.2.2.1) PUBLIC,指明此段按对齐属性,邻在已包含在此组合逻辑段内的最末字面段之后
(1.2.2.2) COMMON,指明此段与同属此组合逻辑段的其他字面段,从组合逻辑段首铺展

同属组合逻辑段的各参与段的最大对齐属性(例如,WORD比BYTE大),决定组合逻辑段的对齐属性.

不与其它段组合的段,称为单逻辑段.

以下,用"逻辑段",统称组合逻辑段及单逻辑段.

(1.3) 类用'cls'指明,未指明类的各段,属'匿名'类.同类各段,邻接排列.

(2) 解释各逻辑段空间关系的3个源文

a1.asm,声明1个组,4个段,涉及'匿名','dec_'类

(2.1) grp组,含seg1段
(2.2) seg1段
(2.3) ovlap段,用COMMON参与组合,'dec_'类
(2.4) touch段,用PUBLIC参与组合
(2.5) stk1段,用STACK指明栈段及PARA对齐

grpGROUP seg1

seg1 SEGMENT PAGE
str1 DB "S1$"
seg1 ENDS

ovlap SEGMENT PARA COMMON 'dec_'
str3 DB '11$'
ovlap ENDS

touch SEGMENT PUBLIC
ASSUME cs:touch,ds:NOTHING

ORG 11H

@:mov ah,9

mov bx,grp;取grp段值
mov ds,bx

mov dx,OFFSET str1;取str1相对seg1偏置
int 21h

EXTRN str2:far

mov dx,OFFSET grp:str2 ;取str2相对grp偏置
int 21h

ASSUME ds:ovlap

mov bx,SEG str3 ;取str3段值
mov ds,bx
lea dx,str3;取str3相对ds偏置
int 21h

touch ENDS

stk1SEGMENT PAGE STACK
DW 16H DUP (4AH);初值4AH的16H个字
stk1 ENDS

END @

a2.asm,声明1个组,3个段,涉及'匿名','dec_','_stk'类:

(2.6) ovlap段,用COMMON参与组合,'dec_'类
(2.7) stk2段,用STACK指明栈段及PARA对齐,'_stk'类
(2.8) grp组,含seg3段
(2.9) seg3段,'dec_'类

ovlap SEGMENT COMMON 'dec_'
DB '2'
ovlap ENDS

stk2 SEGMENT WORD STACK '_stk'
DW 13H DUP (2BH);初值2BH的13H个字
stk2 ENDS

grpGROUP seg3

seg3 SEGMENT 'dec_'
PUBLIC str3
str3 DB '33$'
seg3 ENDS

END

a3.asm,声明1个组,4个段,涉及'匿名','_stk'类:

(2.10) grp组,含seg2段
(2.11) touch段,用PUBLIC参与组合
(2.12) seg2段
(2.13) stk2段,用STACK指明栈段及PARA对齐,'_stk'类
(2.14) seg1段

grpGROUP seg2

touch SEGMENT BYTE PUBLIC

EXTRN str3:far
ASSUME cs:touch,ds:NOTHING

@1:mov cx,SEG grp;取grp段值
mov ds,cx

mov dx,OFFSET grp:str3;取str3相对grp偏置
int 21h

mov cx,seg1 ;取seg1段值
mov ds,cx

mov dx,OFFSET seg1:str4;取str4相对seg1偏置
int 21h

mov ah,4ch ;程序终止
int 21h

touch ENDS

seg2 SEGMENT BYTE
PUBLIC str2
str2 DB "S2$"
seg2 ENDS

stk2 SEGMENT WORD STACK '_stk'
DW 31H DUP (0B2H);初值B2H的31H个字
stk2 ENDS

seg1 SEGMENT BYTE
str4 DB "%$"
seg1 ENDS

END @1

用masm5.exe(版5.10B,囿95 DDK),生成同名obj及lst文件.例如,汇编a1,命令行是:
masm5 a1,,a1;

用含覆盖管理器的link4.exe(版5.01.17,同囿DDK),依序链接obj,生成a.exe程序文件,a.map映像文件,命令行是:link4 a1 a2 a3,a,a,,,

a.exe,显'S1S22133%'

a.map含:

StartStop Length Name Class
00000H 00002H 00003H SEG1
00010H 00055H 00046H TOUCH
00060H 0008BH 0002CH STK1
0008CH 0008EH 00003H SEG2
0008FH 00090H 00002H SEG1
000A0H 000A2H 00003H OVLAPDEC_
000B0H 000B2H 00003H SEG3 DEC_
000C0H 00147H 00088H STK2 _STK

Origin Group
0000:0 GRP

entry point at 0001:0011

(3) 逻辑段排列准则:按链接次序,按字面段的源文次序,按类名大写ASCII次序

因此,a.exe含8个逻辑段(段名被大写):

(3.1) '匿名'类的a1的单逻辑段SEG1
 

本文章更多内容1 - 2 - 下一页>>
相关文章

如何建立汇编工作环境
汇编与C语言配合
动态链接库
masm中宏指令的bug
虚拟机管理器
DOS下的EXE格式文件
API参数说明符前缀详解
进一步学习对话框
MASM的反反汇编技术
给程序加个图标
学习更多关于“绘制”文本串的知识
程式语言效率分析(1)
任务状态段和控制门
只能在保护模式下执行的指令
系统托盘中的快捷图标
DEBUG命令详解
仿FDISK及PQMAGIC列出分区逻辑盘符的prw.as

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31