æxsfɨxꙮ
и эти длл открыть через dnSpy
æxsfɨxꙮ
Узнать их смещения
æxsfɨxꙮ
И вечно менять
Anonymous
И вечно менять
Так а тут же не в библиотеке, а в динамической памяти. Допустим в anonymous
Anonymous
В данном случае в c++ alloc
æxsfɨxꙮ
Кто сказал что найти скорость стрельбы нельзя через поиск значений
æxsfɨxꙮ
Скорее тяжело
æxsfɨxꙮ
Узнать их адреса памяти
æxsfɨxꙮ
Легче
æxsfɨxꙮ
И обращаться каждый раз по этому адресу
Snusmumriken
Ты сформулируй мысль полностью, и отправь одним сообщением, а то поток сознания читается не особо хорошо.
Anonymous
Anonymous
Я делал и не такое
Snusmumriken
Блин, кароч, с подобной фигнёй дуйте во флудилку.
@ProLuaSnooze
Очень узкоспециализировано. Совершенно не нужно никому кроме мамкиных хацкеров.
Elsavi
Anatoliy
Уже ведь одного такого "раздавальщика" посадили на 120 лет ))) Но похоже еще ктото сесть хочет 😂😂😂
Godruma-vihari Dasa
Думаю, пожизненный бан спасёт его от пожизненного заключения 😃
Anonymous
Я сижу в других группах и там эта же картинка с других аккаунтов.(сегодня)
Anonymous
имя акка другое, а картинка та же
ㅤ
В сишных Луа-библиотеках нет способа без костылей сделать константы, доступные в Lua?
https://www.lua.org/pil/26.2.html
> Next, we declare an array with all functions and their respective names. This array has elements of type luaL_reg, which is a structure with two fields: a string and a function pointer.
static const struct luaL_reg mylib [] = {
{"dir", l_dir},
{NULL, NULL} /* sentinel */
};
Выглядит, там могут быть только функции, верно?
sudo summon @Snusmumriken, ты много биндил, вроде.
ㅤ
Хотя, есть смысл посмотреть, как встроенные библиотеки сделаны, там же есть константы.
ㅤ
/* placeholders */
{"pi", NULL},
{"huge", NULL},
{"maxinteger", NULL},
{"mininteger", NULL},
{NULL, NULL}
};
/*
** Open math library
*/
LUAMOD_API int luaopen_math (lua_State *L) {
luaL_newlib(L, mathlib);
lua_pushnumber(L, PI);
lua_setfield(L, -2, "pi");
lua_pushnumber(L, (lua_Number)HUGE_VAL);
lua_setfield(L, -2, "huge");
lua_pushinteger(L, LUA_MAXINTEGER);
lua_setfield(L, -2, "maxinteger");
lua_pushinteger(L, LUA_MININTEGER);
lua_setfield(L, -2, "mininteger");
return 1;
}
Забавно.
ㅤ
ㅤ
Иными словами, есть ли смысл сохранить общий для всех функций префикс и сохранить флаги на уровне библиотеки?
Или лучше убрать префикс (т.к. функции всё равно в таблице-неймспейсе) и заменить передачу интовых флагов в функции на таблицы с параметрами?
TL;DR:
lib.lib_func1(param1, param2, lib.FLAG1 | lib.FLAG3)
vs
lib.func1(param1, param2, {flag1 = true, some_value = something })
За первый вариант говорит то, что не нужно делать документацию или много пояснений, и все примеры переносятся почти 1 в 1. Против него, кажется, говорит всё остальное.
Snusmumriken
Иными словами, есть ли смысл сохранить общий для всех функций префикс и сохранить флаги на уровне библиотеки?
Или лучше убрать префикс (т.к. функции всё равно в таблице-неймспейсе) и заменить передачу интовых флагов в функции на таблицы с параметрами?
TL;DR:
lib.lib_func1(param1, param2, lib.FLAG1 | lib.FLAG3)
vs
lib.func1(param1, param2, {flag1 = true, some_value = something })
За первый вариант говорит то, что не нужно делать документацию или много пояснений, и все примеры переносятся почти 1 в 1. Против него, кажется, говорит всё остальное.
2
Документацию всё равно нужно делать.
Примеры и так переносятся 1в1, если у тебя есть строка с require твоей библиотеки:
local mylib = require"mylib"
print( mylib.foo(10, 20) )
Snusmumriken
/* placeholders */
{"pi", NULL},
{"huge", NULL},
{"maxinteger", NULL},
{"mininteger", NULL},
{NULL, NULL}
};
/*
** Open math library
*/
LUAMOD_API int luaopen_math (lua_State *L) {
luaL_newlib(L, mathlib);
lua_pushnumber(L, PI);
lua_setfield(L, -2, "pi");
lua_pushnumber(L, (lua_Number)HUGE_VAL);
lua_setfield(L, -2, "huge");
lua_pushinteger(L, LUA_MAXINTEGER);
lua_setfield(L, -2, "maxinteger");
lua_pushinteger(L, LUA_MININTEGER);
lua_setfield(L, -2, "mininteger");
return 1;
}
Забавно.
// Не люблю setfield, дёргает метаметоды
#define luax_tsfunction(L, name, func) lua_pushstring(L, name); lua_pushcfunction(L, func); lua_rawset(L, -3)
#define luax_tnnumber(L, index, value) lua_pushnumber(L, index); lua_pushnumber(L, value); lua_rawset(L, -3)
#define luax_tsnumber(L, name, value) lua_pushstring(L, name); lua_pushnumber(L, value); lua_rawset(L, -3)
int luaopen_math (lua_State *L) {
luaL_newtable(L);
luax_tsfunction(L, "dir", luamath_dir);
luax_tsnumber(L, "pi", PI);
luax_tsnumber(L, "huge", HUGE_VAL);
return 1;
}
Мне нравятся подобные варианты тем, что тут полный контроль над либой.
Alxius
Да знаю пошутить что-ли нельзя )
Anonymous
надо видимо сменить тэг группы. она в какой-то базе :/
Snusmumriken
> Документацию всё равно нужно делать.
Не уверен, что в этом есть смысл, если можно сослаться на официальную документацию, указав разницу в API. Написать полноценную документацию для ~100 функций там, где официальная документация не очень хорошо структурирована (т.е. её нельзя сконвертировать) — работа в несколько раз больше, чем сгенерировать биндинг.
По крайней мере, если не уверен, что этим кто-то кроме тебя когда-нибудь будет пользоваться.
В подобном виде, всё равно крайне желательна документация, за примером биндинга почти без доки можно посмотреть сюда: https://luapower.com/libcurl или сюда: https://luapower.com/clipper.
В этом очень неудобно разбираться, постоянно скача между одной докой и другой, ещё приходится смотреть на код биндинга, чтобы понимать какие константы где что означают, где какая версия либы была использована и т.д. Плюс придётся документировать твои разрешения ситуаций несовместимости типов, а ля "сишная функция хочет список указателей строк с указанием количества элементов".
Snusmumriken
Человеку, который учится работать с твоей либой, значительно удобнее смотреть всё в одном месте, особенно когда там, пусть и повторно, но расписаны все фичи, плюс есть примеры использования именно твоей либы.
Snusmumriken
Если биндинг простой, и там все функции легко мапятся - пожалуйста. Если он худо-бедно сложный - уже желательно всё передокументировать.
mendisobal
Всем привет, посоветуйте пожалуйста библиотеку для работы с snmp под lua
mendisobal
раньше использовал luasnmp, но она не поддерживает работу с последней версией netsnmp
mendisobal
не работает с net-snmp 5.8 если быть точным
usernameak
https://www.lua.org/manual/5.1/manual.html
тут написано
Lua handles a chunk as the body of an anonymous function with a variable number of arguments (see §2.5.9). As such, chunks can define local variables, **receive arguments**, and return values.
вопрос, а как он может принимать аргументы, если у него нет части которая function()?
допустим я передал из сишного апи при вызове его аргументы
куда они попадут?
anton
\o а есть какая-нибудь простенькая либа, чтоб красиво таблицу в консоль распечатывать? (под таблицей я имею ввиду массив простых луа таблиц с одинаковыми ключами)
Snusmumriken
Snusmumriken
anton
usernameak
usernameak
у них же нет имени
ㅤ
у них же нет имени
tea@teapot ~> lua5.3
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
> load
function: 0x558d777634a0
> x = load("print(...)")
> x(1, 2, 3)
1 2 3
usernameak
usernameak
океей
usernameak
а можно туда как-то обычные нормальные неймед аргументы скормить?)
ㅤ
ㅤ
А, ты про имена. Нет.
usernameak
я просто хочу чтобы определенная переменная была локальной для этого скрипта
ㅤ
> y = load("return (function(a, b) print(a, b); end)(...)")
> y(1, 2)
1 2
usernameak
у меня если что не оригинальная сишная имплементация и не LuaJIT, но не суть
usernameak
у меня LuaJ, это имплементация Lua 5.2 для JVM
usernameak
ㅤ
Ещё можно сделать переменную в environment, как раз.
usernameak
по дефолту туда идет таблица глобалов
ㅤ
Она типа глобальной, но на самом деле это будет переменная environment, снаружи её не будет видно.
usernameak
я так полагаю, глобалы определенные в этом скрипте туда же пойдут?)
ㅤ
Если будет environment, сможешь сделать такие глобалы, какие нужны.
usernameak
через метатаблицу __index переопределить?)
ㅤ
Вплоть до отключения доступа к вообще всем стандартным либам.
usernameak
ㅤ
usernameak
кстати, просто интересно: lua5.1 ещё жива лишь за счет luajit?
Anatoliy
ㅤ
через метатаблицу __index переопределить?)
local env1 = {
my_variable = 123
}
for k, v in pairs(_G) do
env1[k] = v
end
local chunk1 = load("print(my_variable)", "chunk1", "bt", env1)
chunk1()
----------------
local env2 = setmetatable({
my_variable = 123
}, {
__index = _G
})
local chunk2 = load("print(my_variable)", "chunk2", "bt", env2)
chunk2()
Да, работают оба варианта.
usernameak
usernameak
может рассказать, что мне надо?
usernameak
а то я чую у меня тут X-Y problem
usernameak
usernameak
ну и надо как-то передавать инстанс этого самого типа
ㅤ
Не понятно, тебе нужно в чанк передать игровой объект? Есть пример уровня hello world?