Почему следующий код сборки является средством отладки?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
Я знаю, что C3h является RETN
, и я знаю, что stobs
записывает значение в al
в качестве кода операции в соответствии с offset в edi
и выполняется для ecx
раз из-за rep
.
Мне также известно, что stobs
и stosw
будут выполняться, если они были предварительно учтены в архитектуре Intel в качестве исходного формата.
Если мы запускаем программу в режиме отладки, предварительная выборка не имеет значения, и метка l2 будет работать (поскольку она является одношаговой), иначе если отладчик не будет, он будет пинг-понг между l1 и l3 утра. Я прав