Перейти к содержимому
logic

bios с очень широким функционалом

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

За форумом я в последнее время слежу через RSS-читалку, и недавно мне начали попадаться какие-то настолько огромные стены безграмотного текста, что решил заглянуть, что тут творится. В общем, это были посты @rootmaster: с ошибками в словах, которые третьеклассник не допустит, желанием материться в каждом третьем посте, без форматирования, без точек, запятых, всё сплошняком, зато с излишними самоуверенностью и невежеством.

 

Тут вот заверяется защита от замены биоса изнутри запущенной системы. За фичу эту много людей берётся, но постоянно делают всё не так от незнания. Напомню: достаточно просто подменить component.invoke именно в таблице, которую получает биос в окружении.

 

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

 

...Ну да, если бы. И саспенса не получилось даже: были б ум да красота, я бы пост этот в принципе не писал.

 

Код напичкан костылями.

  • Было решено скопировать component в отдельную таблицу, в которой покрыть влоб бронёй прокси, отдаваемый методом component.proxy для компонента eeprom.
  • Затем пришлось переопределить поле invoke в копии, чтобы он работал через component.proxy, а не внутренние механизмы machine.lua.
  • И это всё работает на одной сопле в форме локальной переменной со ссылкой на эту прокси: без неё все изменения бы откатились при следующем же collectgarbage, потому что возвращаемые прокси лежат в эфемерной (__mode = "v") табличке-кэше.

Хотя я наврал со словом "работает". Если хоть немного вдаться в работу machine.lua, сразу должно стать понятным, что "защита" элементарно обходится. Например, вот так.

getmetatable(component.eeprom.getSize).__call({address = component.eeprom.address, name = "set"}, "lol")

И без перепрошивки комп больше не запустится.

 

Насчёт третьего пункта выше я даже не особо понял, как так вышло. То ли автор всё-таки под капотом смог разглядеть тонкости кэша проксей, то ли он просто от балды пытался код менять, пока не заработало, то ли досталось счастливым артефактом от прошлых версий проги.

 

Неважно. Осуждаю по всем пунктам обвинения. А ведь стоило бы по-человечески написать, и лайкнул бы, и похвалил. И другие, думаю, сарказмом бы не поливали.

  • Одобряю 2
  • Спасибо 1
  • Ха-ха 1
  • Грусть 3

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


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

Сколько лет тому назад написано оно? 

Просто если не так давно, то смысл использовать 5.2?

 

Вот тут описаны изменения в библиотеках:

https://antirek.github.io/luabook/incompatibility.htm

Можно переписать под 5.3. Или добавить веток, чтобы работало и на 5.2, и на 5.3

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


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

_

Изменено пользователем logic

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


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

_

Изменено пользователем logic

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


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

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

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

Гость
Ответить в тему...

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

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

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

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

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


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