这个问题得换个角度思考
start:
mov bp, sp ; Antidebugging get ?offset!
int 0003h ; Int for breakpoints
next:
mov bp, ss:[bp-6] ;运行时动态获取本条指令的偏移量
sub bp, offset next ;offset next 这个偏移量是在汇编过程中确定的
我明白楼上所说的,而且也同意。
但是,正如我在帖子中说的,他在计算这个delta时有差错。在病毒源程序中,我们认为start指令前面有个carrier的指令,在感染文件中,我们可以认为start前面有个另外的z指令长度。那么start的变化量因该是这个被感染文件的指令长度减去carrier指令的长度,也就是start前面的差值才对。
因此代码中有一行应该改变:
sub bp, offset next - 3