Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Lua. Вызов колбека из сторонней библиотеки
Cockney
сообщение 2.3.2024, 21:51
Сообщение #1


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21064
Пользователь №: 16.156



Я возможно знаю ответ, но хочу убедиться в его верности.

Имеется код

Цитата

--lua
exec('tcpserver.exe')
local pid = errorlevel()
wait(500)
exec('tcpclient.exe')
local ffi = require("ffi")
local mininet = ffi.load("libwpe_proxy")

ffi.cdef[[
int wpe_inject(const char *libwpePath,
unsigned int pid,
unsigned int dataChannelBlocksCount,
unsigned int dataChannelBlockSize,
unsigned int commandChannelBlocksCount,
unsigned int commandChannelBlockSize
);

typedef int32_t(*packet_handler)(const char* sourceHost, uint32_t sourceHostSize, uint16_t sourcePort, const char* destHost, uint32_t destHostSize, uint16_t destPort, const uint8_t* data, uint32_t dataSize);

int wpe_listen(unsigned int pid, packet_handler);
]]


mininet.wpe_inject("libwpe.dll", pid, 3, 65535, 15, 10000)

function handler(sourceHost, sourceHostSize, sourcePort, destHost, destHostSize, destPort, data, dataSize)
local message = 'Source host: ' .. ffi.string(sourceHost, sourceHostSize) .. '\t, source port: '.. sourcePort .. '\tdest host: ' .. ffi.string(destHost, destHostSize) .. '\tdest port: ' .. destPort .. '\t data size: ' .. dataSize
--log('Source host: ' .. ffi.string(sourceHost, sourceHostSize) .. '\t, source port: '.. sourcePort .. '\tdest host: ' .. ffi.string(destHost, destHostSize) .. '\tdest port: ' .. destPort .. '\t data size: ' .. dataSize)
return 0
end

mininet.wpe_listen(pid, handler)

while true do
wait(1000)
end


Что он делает - не суть важно, внимание к функции handler, которая передается в библиотеку и вызывается этой же библиотекой в подходящий момент,

в текущем варианте - заполнение локальной переменной + возврат все ок работает, а вот если добавить любую функцию вывода инфы - msg, log то пилот просто падает.

Ваши идеи ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.3.2024, 21:31
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27725
Пользователь №: 11.279



Набор строк с 0x00 в конце? Вообще смысл какой гадать? Ну не может он в лог вывести - записать в файл и посмотреть, что там внутри будет. Бинарный режим записи только не забудь включить.

Там и причину краша увидеть можно будет и сам лог собственно почитать.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 3.3.2024, 22:40
Сообщение #3


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21064
Пользователь №: 16.156



Цитата(DarkMaster @ 3.3.2024, 21:31) *

Набор строк с 0x00 в конце?


да, но там как бы я явно строку собираю с указанием размера

Цитата(DarkMaster @ 3.3.2024, 21:31) *

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


Это не ответ. То что там лежит я и так знаю, меня интересует почему происходит краш

Цитата(DarkMaster @ 3.3.2024, 21:31) *
Бинарный режим записи только не забудь включить.


странная рекомендация при работе со строками


Цитата(DarkMaster @ 3.3.2024, 21:31) *
Там и причину краша увидеть можно будет и сам лог собственно почитать.



с чего бы там быть причине краша ? там падение проходит через луа, он его никак не детектит
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.3.2024, 22:46
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27725
Пользователь №: 11.279



Цитата
с чего бы там быть причине краша ? там падение проходит через луа, он его никак не детектит

А с чего ты вообще взял, что падает луа? Если упадет именно луа - у тебя просто вкладка остановится. Пилот при этом не падает. Ну по крайней мере у меня за все время ни разу краш луа по каким-либо причинам не вызывал краш пилота.

А вот вывод в лог на ура крашил пилот и ДО луа и после. Причин было несколько в т.ч. ему не нравились какие-то символы. Были краши от слишком больших сообщений, потом это было исправлено, но не до конца. Так же из последних приколов, если ты выведешь в лог слишком большое сообщение, то пилот крашанет после _следующего_ любого вывода в лог.

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 4.3.2024, 23:16
Сообщение #5


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21064
Пользователь №: 16.156



Так я вроде сразу и обозначил что крашится пилот, а не просто луа. К нему у меня вопросов нет.

Проблема в том что там не может быть спец символов никаких - латиница, точки, табы да и цифры.

Я пошел по другому пути - я привязался к окну пилота и вместо вывода сообщения делаю left(0, 0). Клик происходит (к слову вывод в лог тоже происходил 50 на 50) но далее все равно крашится пилот.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.3.2024, 20:16
Сообщение #6


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27725
Пользователь №: 11.279



я три дня напролет пытаюсь вспомнить, что это было. У меня была данная проблема, но я убей не могу вспомнить точную причину. В голове крутится два момент: вывод в лог(возможно слишком длинный) и кривой указатель(не обязательно в логе). Причем я несколько раз вставал на эти грабли. Решалось нативно. Во 1 проблема точно несколько выше по коду, чем сами строки на которых падает. Понятно что left 0 0 не должен крашить. Во 2 я очень настоятельно рекомендую убрать все выводы в лог в коде. Самое простое переобъяви саму функцию в шапке. Я бы заменил ее на запись в файл. Есть выоский шанс, что крашит именно лог. Не обязательно последний вызов лога. Если быть точнее лог точно может приводить к таким крашам, но он не единственная возможная причина. Насчет 50 на 50 отдельно хочу заметить, что это тоже указывает потенциально на проблемы с логом. Т.е. ты загоняешь что-то кривое в лог, он это как-то выводит, а через N строк скрипт просто начинает падать. Шанс краша выше, если лог вызывается повторно, но краш на left 0 0, это точно тоже самое, что я получал когда поубирал логи. Присмотрись к ним, убери, переобъяви, выведи в файл. Очень высокий шанс, что на этом все решится.

Сообщение отредактировал DarkMaster - 5.3.2024, 20:53


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 5.3.2024, 20:37
Сообщение #7


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21064
Пользователь №: 16.156



Запись через io.write() работает ок, проблем нет.

А вот пилотовский write() тупо ничего не делает, но и не крашит

проблема вообще не в выводе лога, а в том, что сами пилотовские функции ведут себя странно если они вызываются не из потока луа машины.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.3.2024, 20:57
Сообщение #8


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27725
Пользователь №: 11.279



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

я допускаю, что проблема именно в этом. Если это так, то помочь я тебе вряд ли смогу, но все описанное выше у меня было при других обстоятельствах (кривой вывод в лог и кривые указатели).


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 27.4.2024, 9:40
Designed by Nickostyle