|
|
  |
Lua. Вызов колбека из сторонней библиотеки |
|
|
Cockney |
2.3.2024, 21:51
|
       
Master
Сообщений: 1.404
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22633
Пользователь №: 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 то пилот просто падает. Ваши идеи ?
|
|
|
|
Cockney |
3.3.2024, 22:40
|
       
Master
Сообщений: 1.404
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22633
Пользователь №: 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)  Там и причину краша увидеть можно будет и сам лог собственно почитать.
с чего бы там быть причине краша ? там падение проходит через луа, он его никак не детектит
|
|
|
|
DarkMaster |
4.3.2024, 22:46
|
          
Модератор UOPilot
Сообщений: 9.764
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29994
Пользователь №: 11.279

|
Цитата с чего бы там быть причине краша ? там падение проходит через луа, он его никак не детектит А с чего ты вообще взял, что падает луа? Если упадет именно луа - у тебя просто вкладка остановится. Пилот при этом не падает. Ну по крайней мере у меня за все время ни разу краш луа по каким-либо причинам не вызывал краш пилота. А вот вывод в лог на ура крашил пилот и ДО луа и после. Причин было несколько в т.ч. ему не нравились какие-то символы. Были краши от слишком больших сообщений, потом это было исправлено, но не до конца. Так же из последних приколов, если ты выведешь в лог слишком большое сообщение, то пилот крашанет после _следующего_ любого вывода в лог. То, что в переменную все успешно сохраняяется скорее говорит о том, что проблема вообще не в луа. Именно поэтому я тебе и предлагаю записать в файл средствами луа эту чудо-то строку в бинарном режиме, чтобы получить по сути дамп. Открой потом его через hex редактор или на крайняк включи отображение непечатных символов и посмотри, что там творится.2
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
DarkMaster |
5.3.2024, 20:16
|
          
Модератор UOPilot
Сообщений: 9.764
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29994
Пользователь №: 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____ Контакт актуален, подпись актуальна.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|