我反汇编了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位。
答案 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似乎是个问题。看看它是如何组装的 - 不同的长度跳跃等。这很可能解释了文件的差异,特别是因为你的输出似乎与正确的输出不同。