Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 编译16位汇编代码时出现open watcom错误(找到多个起始地址)_Assembly_Dos_16 Bit_Watcom_Rootkit - Fatal编程技术网

Assembly 编译16位汇编代码时出现open watcom错误(找到多个起始地址)

Assembly 编译16位汇编代码时出现open watcom错误(找到多个起始地址),assembly,dos,16-bit,watcom,rootkit,Assembly,Dos,16 Bit,Watcom,Rootkit,我正试图在OpenWatcomIDE中编译一个16位汇编代码片段,该代码片段取自《rootkit兵工厂》一书。它给出错误“找到多个起始地址”。由于装配知识非常有限,我无法将其整理出来。代码如下: 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' _i

我正试图在OpenWatcomIDE中编译一个16位汇编代码片段,该代码片段取自《rootkit兵工厂》一书。它给出错误“找到多个起始地址”。由于装配知识非常有限,我无法将其整理出来。代码如下:

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

请帮帮我。

我用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和假设行。不过我想这并不重要。

我用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和假设行。不过,我想这没关系。

很抱歉回复得太晚,但我刚刚解决了这个问题,并在另一个StackOverflow问题上发布了一个解决方案,提出了一个类似的问题:


很抱歉回复太晚,但我刚刚解决了这个问题,并在另一个StackOverflow问题上发布了一个解决方案,提出了一个类似的问题:


只是猜测,但当链接器看到公共
\u main
时,它可能会链接到标准库中,而标准库有自己的入口点?我看不出有任何理由在这里使用
\u main
(或者说,老实说,使用该名称)。这只是猜测,但也许当链接器看到公共
\u main
时,它会链接到标准库中,而标准库有自己的入口点?我看不出有任何理由在这里使用
\u main
(或者说实话,使用这个名字)。