【发布时间】:2012-04-22 18:35:00
【问题描述】:
为什么下面的汇编代码是反调试工具?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
我知道C3h 是RETN 并且我知道stobs 根据edi 中的偏移量将al 中的值作为操作码写入,并且由于@987654329 而完成ecx 次@。
我还知道stobs 和stosw 将在英特尔架构上作为原始格式预取时运行。
如果我们在调试模式下运行程序,则预取无关紧要,并且 l2 标签将运行(因为它是单步的),否则如果没有调试器,它将在 l1 和 l3 之间进行乒乓,我是对的?
【问题讨论】:
-
不会还是要看是否设置为单步?因为我真的不明白为什么调试器会绊倒这个。单步规则有些不同。
标签: windows debugging assembly x86 reverse-engineering