Как сказал Бо в своем комментарии, раздел .text
доступен только для чтения по текущим системам. Чтобы этот код работал, вы должны сделать его доступным для записи. Например, вы можете использовать директиву в исходном файле:
.section wtext, "awx", @progbits
Эквивалентная nasm
директива:
section wtext exec write
В качестве альтернативы, также можно передать -N
переключиться на компоновщик.
Обратите внимание, что такой код оболочки обычно предназначен для выполнения стека, что является еще одной вещью, которая обычно отключается в текущих операционных системах. Если вы когда-нибудь захотите попробовать это в стеке, вам может понадобиться опция -z execstack
компоновщика.
Я думаю, какой метод или механизм, используемый, или независимо от того, что, платформа (Угловой/Реагирует), который скрывает его от Вас, следующий принцип содержит:
В потоке программы (думают код или даже самый низкий уровень: машинный код), данные не могут вернуться 2 секунды спустя, 3 секунды спустя, или не могут прибыть вообще, таким образом, нет никакого обычного return
для использования для возврата данных.
Это - классический "шаблон"наблюдатель"". (Это может быть в форме "обратного вызова".) Это: "эй, я интересуюсь знанием успешного прибытия данных; Вы сообщили бы мне, когда это делает". Таким образом, Вы регистрируете наблюдателя, чтобы быть уведомленными (или функция, которую назовут для уведомления об успешном прибытии данных.) Вы также обычно регистрируете наблюдателя для отказа прибытия таких данных.
, Когда это - успешное прибытие данных или отказ возврата таких данных, зарегистрированных наблюдателей (или обратные вызовы) уведомляют вместе с данными (или звонят с данными). Если наблюдатель будет зарегистрирован в форме функции обратного вызова foo
, то foo(data)
будет назван. Если наблюдатель регистрируется в форме объекта foo
, то в зависимости от интерфейса, могло случиться так, что foo.notify(data)
назван.