Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 近距离跳远自动变为短距离跳远_Assembly_Dos_Masm_Tasm_Short - Fatal编程技术网

Assembly 近距离跳远自动变为短距离跳远

Assembly 近距离跳远自动变为短距离跳远,assembly,dos,masm,tasm,short,Assembly,Dos,Masm,Tasm,Short,我需要近跳转(E9 XX XX)并在代码中指定,但TASM(和MASM)在组装后将其更改为短跳转(EB XX NOP) MAIN SEGMENT BYTE ASSUME CS:MAIN,DS:MAIN,SS:NOTHING ORG 100H HOST: jmp NEAR PTR VIRUS_START db ’VI’ mov ah,4CH mov al,0 int 21H ;terminate normally with DOS COMFILE DB ’*.COM’,0 ;

我需要近跳转(E9 XX XX)并在代码中指定,但TASM(和MASM)在组装后将其更改为短跳转(EB XX NOP)

MAIN SEGMENT BYTE

ASSUME CS:MAIN,DS:MAIN,SS:NOTHING

ORG 100H


HOST:

jmp NEAR PTR VIRUS_START 

db ’VI’

mov ah,4CH

mov al,0

int 21H ;terminate normally with DOS

COMFILE DB ’*.COM’,0 ;search string for a com file
VIRUS_START:

强制使用近跳转而不是短跳转的一个简单方法是有足够的字节跳转

  • 或者使用一些填充,如:

    COMFILE DB ’*.COM’,0 ;search string for a com file
    padding db 127 dup (0)
    VIRUS_START:
    
  • 或者在标签开始之前添加一些有用的子例程

另一种可能性是手动编码跳转。

只需编写
db 0E9h,14,0

我不知道MASM或TASM的答案,但这可能对某些人有用:

在NASM中,
jmp靠近VIRUS_START
执行长编码。您还可以使用
adddx、strict word 1
等工具强制imm16编码,而不是imm8编码。看

使用
nasm-fbin foo.asm进行组装
。然后看看我们通过
ndisam-o 0x100 foo得到了什么(它只知道平面二进制文件):


您可以通过手动编码rel16附近的
jmp来绕过汇编程序:

db  0E9h                    ;  JMP NEAR opcode
dw  VIRUS_START-$-2         ;  relative address
$是当前指令(dw)的绝对地址
下一条指令的($+2)地址(在我们的jmp之后)


(VIRUS_START-($+2))-目标地址(VIRUS_START)和下一条指令之间的差异。在执行JMP指令期间,它将被添加到IP寄存器。

这有什么关系?你是想让我们帮助你让你的病毒工作吗?我需要这个是为了教育目的,如果你知道的话,请帮助,谢谢。当汇编程序修复我的跳转时,我一直很高兴,从来没有试图让它不这样做。谢谢你的回复,但在这个示例中,我不需要汇编程序优化,我需要一种方法来禁用它,虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
00000100  E91000            jmp 0x113
00000103  EB0E              jmp short 0x113
db  0E9h                    ;  JMP NEAR opcode
dw  VIRUS_START-$-2         ;  relative address