+ -
当前位置:首页 → 问答吧 → 关于NEG指令的不解之处

关于NEG指令的不解之处

时间:2011-11-16

来源:互联网

请教各位高师,本段程序中的NEG指令起到什么作用,谢谢!


;*************************************************
;功 能: 搜索PE文件里全零的区域
;返回值: EAX - 起始地址
;     EDX - 全零区域的大小
;************************************************* 
GetZero proc zStart,zSize,rSize
pushfd
push esi
push edi
cld
mov eax,zStart
  .if word ptr [eax] == 5A4Dh 
add eax,[eax+3ch]
.if dword ptr [eax] == 00004550h 
  mov edx,0F8h
add edx,eax
sub edx,zStart
sub zSize,edx
add zStart,edx
  .endif
  .endif
mov edi,zStart
mov ecx,zSize
shr ecx,2
xor eax,eax
  lp0:repnz scasd
lea esi,[edi-4]
mov edx,esi
repz scasd
sub edx,edi  
neg edx ;*** ?
sub edx,4 ;*** ? 
jecxz lp1
cmp edx,rSize
jb lp0
  lp1: .if edx >= rSize
lea eax,[esi+4]
sub edx,4
  .endif
  pop edi
  pop esi
  popfd
  ret
GetZero endp

作者: isunx   发布时间: 2011-11-16

这个问题,调试软件里,在这儿单步运行,看 edx 的内容和它的变化,就会发现其作用了。其实也就是个根据位移计算长度的计算方法的问题。

作者: zara   发布时间: 2011-11-16