1

我正在尝试从 open watcom IDE 中的 rootkit 武器库中编译一个 16 位汇编代码片段。它给出了错误“找到多个起始地址”。由于组装知识非常有限,我无法对其进行整理。这是代码:

CSEG SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CSEG,DS:CSEG,SS:CSEG
ORG 100H


_here:

JMP _main
JMP _overData

_buffer DB 512 DUP('W')
_terminator DB 'Z'
_index DW 0H
_oldISR DD 0H
_chkISR DD 0h
_overData:


_getBufferAddr:

STI
MOV DX, CS
LEA DI,_buffer
IRET


_hookBIOS:

PUSH AX
PUSH BX

PUSHF 
CALL CS:_oldISR

MOV AH, 01H
PUSHF
CALL CS:_chkISR

CLI
PUSH DS 
PUSH CS
POP DS

jz _hb_Exit 
LEA BX,_buffer
PUSH SI
MOV SI,WORD PTR[_index]
MOV DS:[BX+SI],AL
INC SI
MOV WORD PTR[_index], SI
POP SI


_hb_Exit:

POP DS
POP AX
POP BX

STI
IRET


_install:

LEA DX,_getBufferAddr
MOV CX,CS
MOV DS,CX
MOV AH,25H
MOV AL,187
INT 21H

MOV AH,35H
MOV AL,9H
INT 21H
MOV WORD PTR _oldISR[0],BX
MOV WORD PTR _oldISR[2],ES

MOV AH, 35H
MOV AL,16H
INT 21H
MOV WORD PTR _chkISR[0],BX
MOV WORD PTR _chkISR[2],ES

MOV AH,25H
MOV AL,9H
MOV CX,CS
MOV DS,CX
LEA DX,_hookBIOS
INT 21H

RET

PUBLIC _main


_main:

PUSH BP
MOV BP,SP
MOV AX,CS
MOV SS,AX
LEA AX,_localStk
ADD AX,100H

CALL NEAR PTR _install

MOV AH, 31H
MOV AL,0
MOV DX, 200H
INT 21H

POP BP
RET

PUBLIC _localStk
_localStk DB 256 DUP(?)

CSEG ENDS
END _here

请帮帮我。

4

2 回答 2

1

抱歉回复晚了,但我只是想通了这一点,并在另一个 StackOverflow 问题上发布了一个解决方案,询问了一个类似的问题:

编译实模式 asm (rootkit.arsenal)

于 2013-07-06T23:48:25.677 回答
0

我用 OpenWatcom 构建 .com 文件的方法是用 wasm 编译程序集文件,然后使用 wlink。

wasm hello.asm
wlink sys dos com file hello.o

这里的目标文件具有扩展名 .o,这是 wasm 在 Linux 上生成的。在 DOS、Windows 和 OS/2 中,它可能是 .obj,因此请根据您的系统调整命令行。

我在开始时使用 .model tiny 和 .286p 并省略 CSEG 和 ASSUME 行。我想那没关系。

于 2012-12-14T22:16:13.157 回答