Поиск точек входа в программу Lua из среды Lua - PullRequest
1 голос
/ 04 мая 2011

У меня есть среда выполнения Lua, предоставляемая через API для более крупной системы Си.Есть несколько точек входа в программу Lua, которые управляются событиями системы C.Есть также обратные вызовы, которые я могу сделать в системе C изнутри Lua.У меня есть root-доступ к системе, работающей под управлением Lua, но у меня нет исходного кода C.

Я обнаружил список допустимых обратных вызовов, которые я могу сделать для функции C изнутри Lua, поскольку это раскрывается внутри -Lua должна знать, что это действительные функции.

Есть ли способ обнаружить функции Lua, которые система C будет вызывать?API, который я использую, не полностью документирован, и я хотел бы знать список функций Lua, которые я могу написать, которые будут вызываться системой C.

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Lua обладает довольно тщательными способностями в песочнице Если дизайнер API не хочет, чтобы вы знали что-то, чего не хотите.

Чтобы усложнить это, Lua API является очень свободной формой. Существует 101 способ, которым разработчик приложения может решить представить API для Lua. Из которых ни один не является более стандартным, чем другой. Тем не менее, у Lua также есть очень приятное отражение и метапрограммирование на языке. Если дизайнер не попытался остановить вас, возможно, вам все же повезло.

Если C API принимает таблицу методов (AKA класс) часто, вы можете переопределить метаметоды __index и __newindex. Когда C API пытается вызвать метод таблицы, вызывается __index с именем метода, который он пытается выполнить. Затем вы можете распечатать сообщение или написать журнал, содержащий имя обратного вызова. Затем я бы предложил вызвать функцию базового класса, чтобы приложение продолжало работать (и вызывало обратные вызовы).

1 голос
/ 06 мая 2011

В этом конкретном случае мне удалось найти скомпилированный файл, содержащий код C, который называется песочницей Lua. Я пропустил это через строки, чтобы получить список строк, жестко закодированных в файл, что привело меня к функциям API, которые были отправлены и получены API в мою песочницу Lua и из нее.

Теперь у меня есть список всех функций, которые могут быть вызваны API в моей песочнице Lua.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...