Перейти к содержимому
  • 0
Anon

Зачем нужен параметр checksum в eeprom.makeReadonly?

Вопрос

Копаясь среди компонентов и функций, я остановился на eeprom:

Функция makeReadonly зачем-то требует хэш данных, записанных на eeprom. Причем параметр обязательный, и обязательно должен соответствовать хэшу данных на eeprom. Самое смешное, что этот хэш можно получить другой функцией eeprom - getChecksum. Судя по исходникам, ни для чего, кроме проверки в функции makeReadonly этот хэш не используется, но вот если он будет неправильный, то вернётся ошибка. Зачем это вообще было сделано? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

14 часа назад, Anon сказал:

Зачем это вообще было сделано? 

Вопрос "зачем" подразумевает ответ о целях, намерениях. Какие цели преследовали разработчики, реализуя именно такую механику, вряд ли кто-то может уверенно ответить кроме них самих. Но мы можем пофантазировать.

 

Так как результат выполнения метода makeReadonly является необратимым, имеет смысл сделать "защиту от дурака". Если программист всё-таки смог правильно выполнить этот метод, значит он почитал документацию и ознакомился с последствиями. Эта цель мне представляется наиболее вероятной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возможно это было сделано для того чтобы при копировании EEPROM можно было сверить итоговые данные с оригинальным ROMом на другом чипе и уже после заблокировать их перезапись.

 

Ещё теория в том что вполне возможно есть/планировалась функция для получения аналогичного хеша, но напрямую из строки с кодом, чтобы можно было так же удостовериться что мы точно блокируем то что надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

https://github.com/MightyPirates/OpenComputers/issues/792

 

> eeprom.protected // Boolean data value. Prevents changes to the eeprom, think blowing protection fuses.

 

>Boolean eeprom.protect(string chkSum) // returns true on success, requires the chksum of the eeprom in order to prevent idiots from fusing everything.

 

https://en.wikipedia.org/wiki/EFuse

 

https://scribe.rip/hackernoon/how-the-nintendo-switch-prevents-downgrades-by-irreparably-blowing-its-own-fuses-884bd3b7a8ba#:~:text=Blowing a fuse is irreversible— once it’s been set it can never be undone.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, prop сказал:

requires the chksum of the eeprom in order to prevent idiots from fusing everything.

Переведу на русский: защита от дурака. О чём я и сделал предположение выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тыквенная защита потому что еепром никуда, кроме nbt не записывается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, eu_tomat сказал:

Переведу на русский: защита от дурака

В этом и заключается вопрос топикстартера: в чем смысл такой защиты, фича ради фичи? Если у дурака имеется доступ к eeprom, то не всё ли равно, вызывать eeprom.makeReadonly() или eeprom.makeReadonly(eeprom.getChecksum())?

  • Нравится 2
  • Одобряю 2
  • Против 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, ECS сказал:

В этом и заключается вопрос топикстартера: в чем смысл такой защиты, фича ради фичи? Если у дурака имеется доступ к eeprom, то не всё ли равно, вызывать eeprom.makeReadonly() или eeprom.makeReadonly(eeprom.getChecksum())?

Ну, в проге lua есть автоподстановка, поэтому случайно натабать makeReadonly() и тыкнуть энтер, не одумавшись вовремя, очень реально (похоже, но не с этим методом, косячил сам). А внутрь подставить вызов другого метода неосознанно несколько сложно. Поэтому некоторый смысл оно имеет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 14.09.2022 в 18:41, Fingercomp сказал:

Ну, в проге lua есть автоподстановка, поэтому случайно натабать makeReadonly() и тыкнуть энтер, не одумавшись вовремя, очень реально (похоже, но не с этим методом, косячил сам). А внутрь подставить вызов другого метода неосознанно несколько сложно. Поэтому некоторый смысл оно имеет.

В таком случае вполне можно было обойтись более простым аргументом (например строчкой "lock", ну или ещё чем нибудь), иначе выходит некая свистоперделка не имеющая реального назначения, но тратящая ресурсы процессора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...