Why the following assembly code is an anti-debugging tool?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
I know that C3h is RETN
and I know that stobs
writes the value in al
as opcode according to the offset in edi
and it is done for ecx
times because of rep
.
I am also aware the fact that stobs
and stosw
will run if they were pre-fetched on intel architecture as their original format.
If we run the program in debugged mode the pre-fetch is irrelevant and the l2 label will run (because it is single-step) otherwise if there is no debugger it will be ping-pong between l1 and l3 am I right?