无法与NASM组装EICAR测试文件

时间:2016-08-10 17:11:31

标签: assembly nasm

我反汇编了EICAR测试文件并获得了以下代码:

[org 100h]   
pop  ax
xor  ax,214Fh
push ax
and  ax,4140h
push ax
pop  bx
xor al,5Ch
push ax
pop  dx
pop  ax
xor  ax,2834h
push ax
pop  si
sub  [bx],si
inc  bx
inc  bx
sub  [bx],si
jge  0140h
db   "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$"
dec  ax
sub  cx,[bx+si+2Ah]

我不明白为什么当我尝试使用nasm -fbin将它组装回DOS COM文件时它不起作用,它给了我以下输出(它没有执行):

X5O!P%@AP[4\PZX54(P^)7CC)7..".EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

实际应该是:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

关于NASM出了什么问题的指针?

PS1:当使用旧的A86 Assembler时,它的效果非常好。

PS2:我使用Windows 7 32位。

1 个答案:

答案 0 :(得分:2)

尝试使用nasm -O0 -fbin

-O0(大写“o”,零)将关闭所有优化。纳斯姆试图帮助你。

另外,如果你稍微调整一下源代码......

bits 16
[org 100h]    
pop  ax
xor  ax,214Fh
push ax
and  ax,4140h
push ax
pop  bx
xor al,5Ch
push ax
pop  dx
pop  ax
xor  ax,2834h
push ax
pop  si
sub  [bx],si
inc  bx
inc  bx
sub  [bx],si
db   "}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$"
dec  ax
sub  cx,[bx+si+2Ah]

它有效。我的AV刚刚标记了输出。

那个jge似乎是个问题。看看它是如何组装的 - 不同的长度跳跃等。这很可能解释了文件的差异,特别是因为你的输出似乎与正确的输出不同。