亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? prolog.txt

?? windows exe文件的結構、初始化
?? TXT
字號:

Data-Segment Initialization

The Windows prolog and epilog contain instructions that 
initialize the DS register, setting the register to the 
segment address of the application or DLL. Windows requires 
callback functions, such as window, dialog box, and 
enumeration procedures, to initialize the DS register 
whenever they are called by Windows or an application. This 
guarantees that the function accesses its own data segment 
rather than the data segment of the caller. 

Exported Far Functions

The Windows prolog used with exported far functions, such as 
dialog box and enumeration procedures, ensures that the DS 
register receives the data segment address for the 
application when Windows or an application calls the exported 
function. In Windows version 3.0 and earlier, the prolog and 
epilog for exported far functions have the following form: 
push    ds          ; put DS in AX, take 3 bytes to do it,
pop     ax          ;   so the code can be rewritten as
nop                 ;   MOV AX, IMM when appropriate
inc     bp          ; push odd BP to indicate this stack
push    bp          ;   frame corresponds to a far CALL
mov     bp, sp      ; set up BP to access arguments and
                    ;   local variables
push    ds          ; save DS
mov     ds, ax      ; set DS to proper data segment
sub     sp, const   ; allocate local storage (optional)
 ...
sub     bp, 2       ; restore registers
mov     sp, bp
pop     ds
pop     bp
dec     bp
retf
Because Windows 3.1 does not support real mode, the inc bp and 
dec bp instructions are not required. Also, a variety of other 
changes can be made to the prolog and epilog to improve speed 
and reduce the size of the code. If a far function is part of 
an application (not part of a DLL), the SS register is already 
the proper value for the DS register, so calling the 
________________
MakeProcInstance function is not necessary. The prolog and 
epilog can be modified as follows: 
push    bp          ; set up stack frame (optional)
mov     bp, sp
push    ds          ; save calling function's DS
push    ss          ; move SS to DS
pop     ds
 ...
pop     ds          ; restore registers
pop     bp
retf
An alternative form of the prolog and epilog for far functions 
follows: 
push    bp          ; set up stack frame (optional)
mov     bp, sp
push    ds          ; save calling function's DS
mov     ax, ss      ; move SS to DS
mov     ds, ax
sub     sp, const   ; (optional) allocate local storage
 ...
mov     ds, [bp-2]  ; restore registers
leave
retf
Each of the variations of prolog and epilog code discussed 
previously works whether or not a far function is exported. 
The code can be called by an application or DLL as well as by 
the system. 
If an application copies the contents of the SS register to 
the DS register, it doesn't need to call the ________________
                                             MakeProcInstance 
function to obtain a procedure-instance address before calling 
an exported far function. Similarly, if a DLL moves the DGROUP 
data segment to the DS register through the AX register, the 
DLL doesn't need to call MakeProcInstance before calling an 
exported far function. 
Although window procedures for an application require this 
same prolog, Windows loads the AX register before calling 
these procedures. An application, therefore, never needs to 
create a procedure-instance address for its window procedures. 

Nonexported Far Functions

Although not required, nonexported far functions can also 
include prolog code that initializes the DS register. In this 
case, it is assumed that the function is never called by 
Windows or an application and that the DS register contains 
the correct segment address when the function is called. The 
prolog for a nonexported function has the following form: 
mov     ax, ds      ; copy DS to AX
nop
push    bp          ; set up stack frame (optional)
mov     bp, sp
push    ds          ; save calling function's DS
mov     ds, ax      ; move same value back to DS
 ...
pop     ds          ; pop same value back to DS
pop     bp
retf
An alternative form of the prolog for a nonexported function 
follows: 
push    ds          ; copy DS to AX
pop     ax
nop
push    bp          ; set up stack frame (optional)
mov     bp, sp
push    ds          ; save calling function's DS
mov     ds, ax      ; move same value back to DS
 ...
pop     ds          ; pop same value back to DS
pop     bp
retf
A compiler should not generate the preceding code by default 
because it reloads the DS register with the same value two 
times per far call. Loading segment registers is a slow 
operation in protected mode and should be avoided as much as 
possible. 

Exported Far Functions in a Dynamic-Link Library

Exported far functions in DLLs also require a prolog. The 
prolog code in a DLL must generate a reference to the DGROUP 
data segment. The SS register cannot be used because 
execution occurs on the calling function's stack. Exported 
far functions cannot use this method because fixups to DGROUP 
are illegal for a multiple instance application. 
The prolog and epilog for exported far functions in a DLL has 
the following form: 
mov     ax, DGROUP      ; get DGROUP value
push    bp              ; set up stack frame (optional)
mov     bp, sp
push    ds              ; save calling function's DS
mov     ds, ax          ; move DGROUP to DS
 ...
pop     ds              ; restore registers
pop     bp
retf
Following is an alternative form of the prolog for exported 
far functions in a DLL: 
mov     ax, DGROUP      ; get DGROUP value
push    bp              ; set up stack frame (optional)
mov     bp, sp
push    ds              ; save calling function's DS
mov     ds, ax          ; move DGROUP to DS
sub     sp, const       ; allocate local storage (optional)
 ...
mov     ds, [bp-2]      ; restore registers
leave
Windows inserts the current data segment address as the second 
operand (DGROUP) of the initial mov instruction. 

Prologs in Real Mode

When Windows 3.0 and earlier is running in real mode, Windows 
must walk each application stack whenever it moves or 
discards segments. In particular, it must check each stack 
for any segment addresses that may have been affected by the 
segment operations. 
To help Windows locate segment addresses associated with the 
stack frames of far functions, the Windows prolog increments 
the old frame pointer, contained in the BP register, before 
saving it on the stack. Because all stack offsets, including 
frame pointers, are expected to be word-aligned, incrementing 
the BP register gives Windows a quick way to locate all far 
function stack frames. 
Windows only walks the stack in real mode. In protected mode, 
selector values do not change even though Windows may move 
and discard segments. Therefore, functions in protected mode 
do not need to increment the BP register when they save it.

Prologs in Protected Mode

Although exported functions in protected-mode, 
single-instance applications need to set the DS register, 
these functions do not require the exported prolog described 
in the previous section. Instead, they can use code similar 
to that generated by the _loadds keyword of Borland C++. 
The code generated by __loadds copies the data segment 
selector to the DS register whenever the function is called. 
Because a selector does not change value when the 
corresponding segment is moved, there is no need to set the AX 
register to the appropriate data segment address before 
calling the function (or to mark the stack frame). 
                                                   
                                                   Functions 
that use the _loadds code can be used as callback functions. 
Because no prolog code is required, the functions do not need 
to be exported when used in an application. Functions in DLLs 
can also use the _loadds code. However, the functions must be 
exported to ensure that other applications can link 
dynamically to them. 
In multiple-instance applications, the Windows prolog is 
needed only for far functions called by Windows. For these 
functions, procedure-instance addresses are required. The _
_loadds code cannot be used in multiple-instance applications. 
Instead, applications should copy the SS register to the DS 
register. 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美在线影院| 麻豆精品视频在线观看视频| 久久久久国产免费免费| 一区二区三区成人| 在线观看一区不卡| 亚洲欧美福利一区二区| 成人免费看片app下载| 国产欧美日韩综合精品一区二区| 美女任你摸久久| 日韩欧美www| 成人影视亚洲图片在线| 国产婷婷色一区二区三区四区 | 国产精品蜜臀在线观看| 国产福利精品一区二区| 欧美经典三级视频一区二区三区| 国产一区二区三区免费| 日本一区二区成人在线| 99久久精品情趣| 亚洲黄色小视频| 日本女优在线视频一区二区| 色噜噜狠狠色综合欧洲selulu| 国产精品国产三级国产aⅴ中文| 91国模大尺度私拍在线视频| 亚洲成人第一页| 91精品国产91久久久久久最新毛片| 亚洲成国产人片在线观看| 4438x亚洲最大成人网| 日韩av一二三| 中文幕一区二区三区久久蜜桃| 白白色亚洲国产精品| 午夜视频一区二区| 久久久久久一二三区| 欧美日韩在线播放三区| 国内精品久久久久影院一蜜桃| 亚洲精品五月天| 久久麻豆一区二区| 欧美亚洲高清一区二区三区不卡| 国内精品视频一区二区三区八戒| 亚洲老司机在线| 欧美丝袜第三区| 久久精品国产色蜜蜜麻豆| 亚洲精品免费电影| 国产欧美一区二区三区沐欲| 欧美精品自拍偷拍动漫精品| 91性感美女视频| 国产99精品在线观看| 久久精品国产第一区二区三区| 亚洲一区二区三区在线看| 中文字幕日韩一区二区| 久久久九九九九| 久久无码av三级| 欧美va亚洲va国产综合| 欧美一区2区视频在线观看| 在线一区二区三区四区| 99久久精品国产导航| 成人高清免费在线播放| 成人国产视频在线观看| 成人免费高清在线| 91欧美激情一区二区三区成人| 国产成人99久久亚洲综合精品| 亚洲观看高清完整版在线观看| 国产亚洲成年网址在线观看| 国产校园另类小说区| 国产蜜臀97一区二区三区| 国产欧美一区二区精品仙草咪| 国产欧美一区二区三区鸳鸯浴| 久久奇米777| 亚洲日本丝袜连裤袜办公室| 亚洲精品国产成人久久av盗摄| 亚洲一区在线观看免费 | 国产日韩精品一区二区三区在线| 2欧美一区二区三区在线观看视频| 欧美www视频| 1024亚洲合集| 蜜桃av噜噜一区| 成人性生交大片免费看在线播放| 色综合一区二区| 日韩你懂的电影在线观看| 中文字幕va一区二区三区| 亚洲国产一区二区三区| 国产精品69久久久久水密桃| 国产成人在线看| 欧美人与z0zoxxxx视频| 国产欧美一区二区在线观看| 亚洲成av人片www| 成人app下载| 欧美大度的电影原声| 亚洲一区二区三区在线| 国产成人av福利| 日韩视频123| 一区二区三区不卡视频在线观看| 国产美女在线观看一区| 欧美日韩成人综合| 一区二区三区资源| 成人国产精品免费观看| 国产婷婷色一区二区三区在线| 日韩vs国产vs欧美| 欧美日韩国产高清一区二区三区 | 欧美喷水一区二区| 一区二区三区在线播放| 成人污污视频在线观看| 欧美精品国产精品| 天天综合色天天综合| 欧美性视频一区二区三区| 伊人一区二区三区| 色综合久久中文综合久久牛| 亚洲女人小视频在线观看| 国产成人亚洲综合a∨婷婷| 日韩欧美一级精品久久| 亚洲午夜久久久久久久久久久| 欧美丰满美乳xxx高潮www| 亚洲欧美视频在线观看视频| 色噜噜久久综合| 亚洲精品视频免费观看| 中文字幕av一区二区三区高| 亚洲激情在线播放| 国产伦精品一区二区三区视频青涩| 91精品国产综合久久久蜜臀粉嫩| 亚洲精品视频免费看| 7799精品视频| 免费国产亚洲视频| 久久亚洲欧美国产精品乐播| 久久超碰97中文字幕| 成人av高清在线| 中文字幕一区二区三| 91尤物视频在线观看| 国产精品久久久久久久久免费樱桃 | 9191久久久久久久久久久| 日韩1区2区3区| 亚洲视频免费在线| 欧美三区在线视频| 久久精品99国产精品日本| 久久欧美一区二区| 成人免费毛片a| 精品一区免费av| 国产精品成人在线观看| 91欧美一区二区| 精品午夜一区二区三区在线观看| 日韩视频免费观看高清完整版| 99久久国产综合精品麻豆| 日韩制服丝袜av| 国产精品麻豆久久久| 欧美日韩一区 二区 三区 久久精品| 国产精品成人在线观看| 久久久精品免费免费| 欧美性三三影院| 91丨九色丨国产丨porny| 日本不卡一区二区| 亚洲影视在线观看| 亚洲综合精品久久| 最新久久zyz资源站| 久久综合色8888| 欧美v日韩v国产v| 欧美久久婷婷综合色| 91精品免费在线| 欧美另类z0zxhd电影| 欧美日韩国产首页在线观看| 99re在线精品| 精品亚洲成a人| 国产精品一区在线观看乱码| 国产综合久久久久久鬼色| 美国三级日本三级久久99 | 欧美视频自拍偷拍| 91视频91自| 欧美成人国产一区二区| 欧美一级视频精品观看| 777奇米四色成人影色区| 欧美日韩视频在线第一区 | 99re视频精品| 99精品在线免费| 日本韩国精品在线| 911精品国产一区二区在线| 欧美日韩国产高清一区二区| 色婷婷av一区二区三区gif| 欧美电影一区二区| 26uuu亚洲| 亚洲欧美日韩国产手机在线| 亚洲国产wwwccc36天堂| 美女国产一区二区三区| 国产成人自拍网| 在线观看国产精品网站| 日韩精品一区二区三区视频 | 欧美精品在线观看一区二区| 制服丝袜亚洲网站| 久久久精品免费网站| 伊人开心综合网| 国产一区二区0| 51精品视频一区二区三区| 国产免费成人在线视频| 亚洲欧洲成人自拍| 国产最新精品免费| 欧美视频一区二区三区四区| 欧美国产精品久久| 蜜臀av一级做a爰片久久| 成人一二三区视频| 欧美电影影音先锋| 日韩精品久久久久久| 色狠狠桃花综合| 国产精品亲子伦对白| 波多野结衣亚洲|