OD中字符串的条件断点技巧

  OD中字符串的条件断点如何下:
  
  首先我们看一下CreateFileA在MSDN中的解释:
  
  HANDLECreateFile(
  
  LPCTSTRlpFileName,//pointertonameofthefile
  
  DWORDdwDesiredAccess,//access(read-write)mode
  
  DWORDdwShareMode,//sharemode
  
  LPSECURITY_ATTRIBUTESlpSecurityAttributes,
  
  //pointertosecurityattributes
  
  DWORDdwCreationDisposition,//howtocreate
  
  DWORDdwFlagsAndAttributes,//fileattributes
  
  HANDLEhTemplateFile//handletofilewithattributesto
  
  //copy
  
  );
  
  从上面我们可以看出第一个参数就是文件名指针,也就是说这个参数中存放的就是文件名称的地址。在32位程序中调用这个函数时这个参数的堆栈地址就应该是esp+4(4×8=32),同理,下一个参数就应该是esp+8。其它类推,返回值是esp+0。我们现在要判断文件名,这里的文件名就是esp+4地址所指向的地址中的内容。取地址中的内容在OD中用双方括号来操作,如取esp+4中的内容就该写成这样:[esp+4]。现在我们取的[esp+4]中的内容还是个地址,所以要得到文件名则还要再取这个地址中的内容,就该这样:[[esp+4]]。而那个STRING前缀在OD中的解释是以零作为结尾的ASCII字符串。所以我们下条件断点时这样写:
  
  bpCreateFileA,[STRING[esp+4]]=="abcdefghigklmn"
  
  但却发现断不下来,写成这样:
  
  bpCreateFileA,[[STRING[esp+4]]]=="abcdefghigklmn"
  
  才能断下来,这里就应该是三层的地址了。为什么这样目前尚不清楚,等我以后有空写第六篇条件断点时我会再详细解释一下。
  
  bpCreateFileA,[[STRING[esp+4]]]=="abcdefghigklmn"
  
  若按OllyDBG中的帮助文档上说的,应该是
  
  bpCreateFileA,[STRING[esp+4]]=="abcdefghigklmn"
  
  或
  
  bpCreateFileA,[[esp+4]]=="abcdefghigklmn"

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: