Что вижу - о том пою (aragont) wrote,
Что вижу - о том пою
aragont

Categories:

Компьютерная логика

Часто можно услышать, что компьютеры работают в двоичной системе счисления и потому не могут ошибаться. Один равняется истине, ноль - лжи и третьего не дано. (Кстати, попытайтесь вспомнить и понять, для чего закон исключения третьего вводится в состав законов логики).

Как специалист заявляю - полная ерунда. Компьютеры с очень большой натугой работают в двоичной системе, чуть лучше они работают в двухсотпятидесятишестеричной системе (восьмибитные игровые приставки), а названия старших систем счисления, в которых работают современные персоналки, я даже не рискну написать.

В связи с этой недвоичностью, у компьютеров (и программистов) появляется серьёзная проблема - какое число считать истиной, а какое ложью?

Вот два примера.

N 1

Недавно, два программиста из моего отдела потратили целый рабочий день, чтобы понять, почему не работает маленькая программ на Фортране, использующая функции из библиотеки MKL от фирмы Intel.

А=3

Х=Проверка()

если Х ИСТИНА, то А=1
.....
если Х ЛОЖЬ, то А=2
.....
Напечатать А

Печаталось всегда 3.

Оказалось, что в нашем фортране истиной считается число +1, а функция Проверка() была написана на другом фортране, в котором за истину считалось число -1. В принципе, эти два фортрана стыкуются, но в данной конкретной версии была ошибка и минус единица не считалась ни за ложь, ни за истину.

N 2

В июне 2012 года выяснилось, что на многие серверы с базой данных MySQL можно зайти с произвольным паролем, повторив его примерно 256 раз подряд.

При проверке прав доступа программисты MySQL честно сравнивали пришедший пароль и настоящий пароль функцией, возвращающей истину или ложь:

result=memcmp(pass, realpass)
если result равен нулю, то полный доступ

Фокус заключался в том, что в случае несовпадения паролей функция memcmp возвращала случайное ненулевое число разрядностью 64 бита, а сохранялось это значение в переменной разрядностью 8 бит. Если ответ был большИм числом с нулями в конце, то программа отбрасывала старшие цифры и считала его за нуль. Поскольку младшие 8 бит обнуляются через каждые 256 чисел, то, в среднем, каждая двести пятьдесят шестая хакерская попытка давала успешный нулевой результат.

Похоже, что написать про программирование для непрограммистов опять не получилось, но, надеюсь, что тем, кто программирует заметка понравится.
Tags: программы
Subscribe

  • Ассиметрия/симметрия головы

    В парикмахерской женщина-мастер быстро обработала большую часть головы машинкой, а потом приостановилась и начала раз за разом с нажимом ездить…

  • Похоронный вопрос

    Недавно подзахоранивали прах женщины в могилу к ее родственникам. В могилу, в которую два года назад уже подзахоронили ее мужа. Дочь привезла из…

  • Ещё про вино

    Посмотрел сегодня расстановку вин в ближайшем супермаркете. Пока закон о виноделии и виноградарстве работает в правильную сторону. Портвейн "Три…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments