Как удалить символ NULL из строки

Чтобы ответить на заглавный вопрос (который едва связан с остальной частью вашего вопроса):

Куда указывает указатель SI, когда он указан для указания смещения?

В модели сегментированной памяти x86 ближние указатели имеют смещения относительно базы сегментов. mov si, OFFSET symbol устанавливает SI в смещенную часть адреса seg:off из symbol.

Если symbol является меткой в ​​разделе данных вашей программы, и вы используете [SI], тогда как DS сегментная база = начало этого раздела, тогда [SI] дает вам байт (ы) в [ 117] как операнд памяти.

SI не указывает на смещение, оно содержит смещение после mov si, OFFSET symbol. Этот является указателем.


В простой плоской модели памяти (например, 32- или 64-битный код) все использует base = 0, поэтому offset = linear address.

В 16-битном коде с «крошечной» моделью памяти (например, .com) CS = DS = ES = SS, поэтому все ссылки на память используют одну и ту же базу. Опять же, только 16-битное смещение работает как полный указатель. Неважно, какова фактическая база сегмента, потому что все относительно нее.

19
задан hakre 12 July 2012 в 17:27
поделиться

1 ответ

$text = str_replace("\0", "", $text);

заменит все нулевые символы в эти $text строка. Можно также предоставить массивы для первых двух аргументов, если Вы хотите сделать несколько замен.

48
ответ дан 30 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: