Что использование сам изменяет код?

Я бы подклассы UIButton или UIControl сделал вашу пользовательскую кнопку. Затем переопределите pointInside:withEvent:, чтобы увидеть, находится ли событие касания в правильной области.

См. Эти ссылки для получения дополнительной информации и идей:

49
задан Niyaz 5 February 2009 в 16:34
поделиться

13 ответов

Оказывается, что статья в Википедии о" код самоизменения " имеет большой список:

  1. Полуавтоматическая оптимизация из зависимого цикла состояния.
  2. генерация кода Во время выполнения , или специализация алгоритма во времени выполнения или время загрузки (который популярен, например, в домене графики в реальном времени), такой как общий код подготовки утилиты сортировки для выполнения ключевого сравнения, описанного в определенном вызове.
  3. Изменение встроенного состояния из объекта или моделирование высокоуровневой конструкции закрытий.
  4. Исправление адреса подпрограммы, звоня , как делается обычно во время загрузки динамических библиотек, или, на каждом вызове, исправляющем внутренние ссылки подпрограммы к ее параметрам, чтобы использовать их исполнительные адреса. Рассматривается ли это как 'самоизменение кода' или не является случаем терминологии.
  5. Эволюционные вычислительные системы , такие как генетическое программирование.
  6. Сокрытие кода к [1 123] предотвращают инженерный анализ , как посредством использования дизассемблера или отладчика.
  7. Сокрытие кода к [1 124] уклоняются от обнаружения программным обеспечением сканирования вируса/шпионского ПО и т.п..
  8. Заполняющиеся 100% памяти (в некоторой архитектуре) с прокручивающимся шаблоном повторяющихся кодов операций, к [1 125] стирание все программы и данные , или к [1 126] запись - в аппаратных средствах .
  9. Сжатие кода , чтобы быть распакованным и выполненным во времени выполнения, например, когда пространство памяти или дисковое пространство ограничены.
  10. Некоторые очень ограниченные системы команд не оставляют опции, кроме как использовать код самоизменения к [1 128] достигают определенной функциональности . Например, "Одна Компьютерная машина" Системы команд, которая использует только subtract-and-branch-if-negative "инструкцию", не может сделать косвенной копии (что-то как эквивалент "*a = ** b" на языке программирования C), не используя самоизменение кода.
  11. Изменяющиеся инструкции для [1 129] отказоустойчивость

На точке о срыве хакеров, использующих самоизменение кода:

В течение нескольких микропрограммных обновлений, DirectTV медленно собирал программу на их смарт-карте для уничтожения карт, которые были взломаны для недопустимого получения неоплаченных каналов. См. статью Coding Horror Jeff о Черный воскресный Взлом для получения дополнительной информации.

49
ответ дан Zach Scrivena 7 November 2019 в 21:31
поделиться

Потому что это действительно круто, и иногда этого достаточно.

6
ответ дан 7 November 2019 в 11:31
поделиться

Я видел код самоизменения, используемый для:

  1. оптимизация скорости, при наличии программы пишут больше кода для себя на лету

  2. obsfucation, для создания инженерного анализа намного тяжелее

13
ответ дан Alnitak 7 November 2019 в 21:31
поделиться

Поскольку Commodore 64 не имеет многих регистров и имеет процессор на 1 МГц. Когда необходимо считать адрес памяти, смещенный значением, легче изменить источник.

@Reader:
LDA $C000
STA $D020
INC Reader+1
JMP Reader

Это - прошлый раз, когда я написал код самоизменения так или иначе :-)

7
ответ дан Peter Morris 7 November 2019 в 21:31
поделиться

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

11
ответ дан Kosi2801 7 November 2019 в 21:31
поделиться

Много причин. Первое, что пришло на ум:

  • конструкция Класса среды выполнения и метапрограммирование. Например, имея фабрику классов, которая берет соединение с таблицей SQL и генерирует клиентский класс, специализированный для той таблицы (со средствами доступа для столбцов, найдите методы, и т.д.).

  • Затем, конечно, существует известный пример пересылки битовой строки и regexp аналоги.

  • Динамично оптимизация на основе информации о RT, а-ля прослеживающей МОНЕТЫ В ПЯТЬ ЦЕНТОВ

  • специализация Подтипа ada, разрабатывают родовые функции в нарастающей среде.

- MarkusQ

5
ответ дан MarkusQ 7 November 2019 в 21:31
поделиться

Нейронные сети являются видом самоизменения кода.

Затем существуют эволюционные алгоритмы , которые изменяют себя.

3
ответ дан Georg Schölly 7 November 2019 в 21:31
поделиться

Искусственный интеллект?

5
ответ дан Al Katawazi 7 November 2019 в 21:31
поделиться

Динамическое подключение является своего рода самомодификацией (исправляющий абсолютные и/или относительные местоположения перехода)... это обычно делается загрузчиком программы O/S, все же.

4
ответ дан ChrisW 7 November 2019 в 21:31
поделиться

LOL - я написал код самоизменения в двух случаях:

  1. при первом изучении ассемблера, прежде чем я понял косвенный индексный доступ
  2. случайно как ошибки указателя в ассемблере и C

, я могу предположить, что могут быть сценарии, где самоизменение кода было бы более эффективным, чем альтернативы, но ничто очевидные прыжки для возражения. В целом это - что-то для предотвращения - отладка кошмара, и т.д. - если Вы сознательно не пытаетесь запутать, как упомянуто выше.

3
ответ дан Steven A. Lowe 7 November 2019 в 21:31
поделиться

Mike Abrash описал генератор кода Pixomatic для Журнала доктора Dobb некоторое время назад: http://www.ddj.com/architect/184405807 . Это - программное обеспечение 3-й dx7(?) совместимый растрирующий процессор.

2
ответ дан MSN 7 November 2019 в 21:31
поделиться

Приложения, которые реализуют их собственные языки сценариев часто, делают это. Например, серверы баз данных часто компилируют хранимые процедуры (или запросы) этот путь.

1
ответ дан Craig Stuntz 7 November 2019 в 21:31
поделиться

Динамическая генерация кода в SwiftShader является формой сам изменяющий код, который позволяет этому эффективно реализовать Direct3D 9 на ЦП.

0
ответ дан 7 November 2019 в 21:31
поделиться
Другие вопросы по тегам:

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