Неверная интерпретация кода.
Код:
asm
{ -> EAX pointer to str }
{ <- EAX pointer to PChar }
TEST EAX,EAX
JE @@handle0
RET
test eax, eax выставит флаг нуля если eax = 0 (поскольку test - логический AND без сохранения результатов, если результатом был 0 - ставится флаг нуля). То есть это идентично проверке if Pointer(S) = nil.
je - Если флаг нуля установлен, то идем на обработчик ошибки, а если нет - идем на ret, т.е. выходим. В итоге eax никто не меняет, если он не равен нулю (нормальная строка).
DB 0 - не команда, а видимо выравнивание. Если присмотреться, на него процессор никогда не попадёт. Ну и еще он используется в одном из варинатов обработки ошибок, наверное, как PChar нулевой длины.
И еще доказательство:
Код:
var s: AnsiString;
p: PAnsiChar;
Begin
s:='123'#0'456';
p:=PAnsiChar(s);
ShowMessage(inttostr(DWORD(s))+' '+inttostr(DWORD(p)));
end.
На выходе два одинаковых адреса.
[UPDATE]
Если интересует дальнейшее обсуждение - либо во флейм (предпочтительно), либо в личку.
Или можно попросить админов перенести все эти изыскания во флейм.