首页
社区
课程
招聘
[旧帖] [求助]关于中断dos中断指令int 21h 0.00雪花
发表于: 2009-7-5 21:22 7591

[旧帖] [求助]关于中断dos中断指令int 21h 0.00雪花

2009-7-5 21:22
7591
最近分析一段dos程序,在漫天盖地的int 21h中断下碰到如下疑惑,希望各位达人解决                                
                                              mov     bx, 2
seg009:11CA 004 B9 19 00                          mov     cx, 19h
seg009:11CD 004 B4 40                             mov     ah, 40h
seg009:11CF 004 CD 21                             int     21h

ah=40时
int 21h指令指:
将dx地址数据的CX字节内容写入到bx指定句柄的文件中
BX = file handle 那么这里bx=2是什么文件呢?x86有相关介绍么?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
把代码都贴出来。这里的bx应该是你前面打开的文件句柄 。现在传到这里来了而已。
2009-7-5 21:34
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
public start
seg009:0CF2                       start:
seg009:0CF2 BF C3 63                              mov     di, seg seg042
seg009:0CF5 8B 36 02 00                           mov     si, ds:2
seg009:0CF9 2B F7                                 sub     si, di
seg009:0CFB 81 FE 00 10                           cmp     si, 1000h
seg009:0CFF 72 03                                 jb      short loc_31A04 ;
seg009:0D01 BE 00 10                              mov     si, 1000h
seg009:0D04
seg009:0D04                       loc_31A04:                              ; CODE XREF: seg009:0CFFj
seg009:0D04 FA                                    cli                     
seg009:0D05 8E D7                                 mov     ss, di
seg009:0D07                                       assume ss:seg042
seg009:0D07 81 C4 CE DF                           add     sp, 0DFCEh
seg009:0D0B FB                                    sti
seg009:0D0C 73 03                                 jnb     short loc_31A11        =============>跳转1
seg009:0D0E E9 56 01                              jmp     near ptr aStackOverflowD+3Fh

loc_31A11:                              ; CODE XREF: seg009:0D0Cj
seg009:0D11 81 E4 FE FF                           and     sp, 0FFFEh
seg009:0D15 36 89 26 AC CA                        mov     ss:word_706DC, sp
seg009:0D1A 36 89 26 AA CA                        mov     ss:word_706DA, sp
seg009:0D1F 8B C6                                 mov     ax, si
seg009:0D21 B1 04                                 mov     cl, 4
seg009:0D23 D3 E0                                 shl     ax, cl
seg009:0D25 48                                    dec     ax
seg009:0D26 36 A3 A8 CA                           mov     ss:word_706D8, ax
seg009:0D2A B4 30                                 mov     ah, 30h
seg009:0D2C CD 21                                 int     21h             ; DOS - GET DOS VERSION
seg009:0D2C                                                               ; Return: AL = major version number (00h for DOS 1.x)
seg009:0D2E 36 A3 A8 C6                           mov     ss:word_702D8, ax
seg009:0D32 3C 02                                 cmp     al, 2
seg009:0D34 73 2A                                 jnb     short loc_31A60        ===========〉跳转2

loc_31A60:                              ; CODE XREF: seg009:0D34j
seg009:0D60 03 F7                                 add     si, di
seg009:0D62 89 36 02 00                           mov     word_30D02, si
seg009:0D66 8C C3                                 mov     bx, es
seg009:0D68 2B DE                                 sub     bx, si
seg009:0D6A F7 DB                                 neg     bx
seg009:0D6C B4 4A                                 mov     ah, 4Ah
seg009:0D6E CD 21                                 int     21h             ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
seg009:0D6E                                                               ; ES = segment address of block to change
seg009:0D6E                                                               ; BX = new size in paragraphs
seg009:0D70 36 8C 1E 9E C6                        mov     ss:word_702CE, ds
seg009:0D75 8B 36 2C 00                           mov     si, word ptr loc_30D2B+1
seg009:0D79 1E                                    push    ds
seg009:0D7A 16                                    push    ss
seg009:0D7B B8 00 35                              mov     ax, 3500h
seg009:0D7E CD 21                                 int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
seg009:0D7E                                                               ; AL = interrupt number
seg009:0D7E                                                               ; Return: ES:BX = value of interrupt vector
seg009:0D80 36 89 1E A4 CA                        mov     ss:word_706D4, bx
seg009:0D85 36 8C 06 A6 CA                        mov     ss:word_706D6, es
seg009:0D8A 0E                                    push    cs
seg009:0D8B 1F                                    pop     ds
seg009:0D8C B8 00 25                              mov     ax, 2500h
seg009:0D8F BA 82 0E                              mov     dx, 0E82h
seg009:0D92 CD 21                                 int     21h             ; DOS - SET INTERRUPT VECTOR
seg009:0D92                                                               ; AL = interrupt number
seg009:0D92                                                               ; DS:DX = new vector to be used for specified interrupt
seg009:0D94 36 8B 0E 90 D1                        mov     cx, word ptr ss:off_70DBE+2
seg009:0D99 E3 22                                 jcxz    short loc_31ABD
seg009:0D9B 36 C5 06 92 D1                        lds     ax, ss:off_70DC2
seg009:0DA0                                       assume ds:nothing
seg009:0DA0 8C DA                                 mov     dx, ds
seg009:0DA2 33 DB                                 xor     bx, bx
seg009:0DA4 36 FF 1E 8E D1                        call    ss:off_70DBE
seg009:0DA9 73 03                                 jnb     short loc_31AAE
seg009:0DAB E9 DB 00                              jmp     loc_31B89            ============〉跳转3

loc_31B89:                              ; CODE XREF: seg009:0DABj
seg009:0E89 B1 1D                                 mov     cl, 1Dh
seg009:0E8B BA 4A 0E                              mov     dx, 0E4Ah
seg009:0E8E EB DC                                 jmp     short WriteToFile1

WriteToFile1:                           ; CODE XREF: seg009:0E87j
seg009:0E6C                                                               ; seg009:0E8Ej
seg009:0E6C 32 ED                                 xor     ch, ch
seg009:0E6E 0E                                    push    cs
seg009:0E6F 1F                                    pop     ds
seg009:0E70                                       assume ds:seg009
seg009:0E70 BB 02 00                              mov     bx, 2
seg009:0E73 B4 40                                 mov     ah, 40h
seg009:0E75 CD 21                                 int     21h        
     ; DOS - 2+ - WRITE TO FILE WITH HANDLE
seg009:0E75                                                               ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
seg009:0E77 16                                    push    ss
seg009:0E78 1F                                    pop     ds
seg009:0E79                                       assume ds:seg042
seg009:0E79 B8 FF 00                              mov     ax, 0FFh
seg009:0E7C 50                                    push    ax
seg009:0E7D 9A B7 0B D0 30                        call    far ptr sub_318B7
2009-7-5 21:58
0
雪    币: 8691
活跃值: (3255)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
http://bbs.pediy.com/showthread.php?t=92911
2009-7-6 07:07
0
雪    币: 86
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
PC中断大全看看
2009-7-6 09:01
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
怪不得找不到打开2号文件句枘的代码,原来2号文件句柄是系统定义好的,就是显示器啊....
2009-7-6 10:20
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
7
0 - stdin
1 - stdout
2 - stderr
2009-7-8 21:58
0
游客
登录 | 注册 方可回帖
返回