æxsfɨxꙮ
и эти длл открыть через dnSpy
æxsfɨxꙮ
Узнать их смещения
æxsfɨxꙮ
И вечно менять
Anonymous
И вечно менять
Так а тут же не в библиотеке, а в динамической памяти. Допустим в anonymous
Anonymous
В данном случае в c++ alloc
æxsfɨxꙮ
Кто сказал что найти скорость стрельбы нельзя через поиск значений
æxsfɨxꙮ
Скорее тяжело
æxsfɨxꙮ
Узнать их адреса памяти
æxsfɨxꙮ
Легче
æxsfɨxꙮ
И обращаться каждый раз по этому адресу
Snusmumriken
Ты сформулируй мысль полностью, и отправь одним сообщением, а то поток сознания читается не особо хорошо.
Anonymous
Я делал и не такое
Snusmumriken
Блин, кароч, с подобной фигнёй дуйте во флудилку. @ProLuaSnooze Очень узкоспециализировано. Совершенно не нужно никому кроме мамкиных хацкеров.
Anonymous
И обращаться каждый раз по этому адресу
Можно через поиск по радиусу 0~9(допустим) можно найти этот адрес и к нему обращаться.
Anatoliy
Уже ведь одного такого "раздавальщика" посадили на 120 лет ))) Но похоже еще ктото сесть хочет 😂😂😂
Godruma-vihari Dasa
Думаю, пожизненный бан спасёт его от пожизненного заключения 😃
Anatoliy
Думаю, пожизненный бан спасёт его от пожизненного заключения 😃
Так он(а) уже уже в кучу других групп постить пошел, находятся же дураки
Anonymous
Думаю, пожизненный бан спасёт его от пожизненного заключения 😃
Так они закупаются по куче аккаунтов, поэтому бан это капля в море.
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
/* 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
Это илон Маск бесстыдник мошенничает :)
https://news.bitcoin.com/btc-giveaway-scam-chamath-palihapitiya-elon-musk-not-giving-away-bitcoin/
Alxius
Да знаю пошутить что-ли нельзя )
Anonymous
надо видимо сменить тэг группы. она в какой-то базе :/
2 Документацию всё равно нужно делать. Примеры и так переносятся 1в1, если у тебя есть строка с require твоей библиотеки: local mylib = require"mylib" print( mylib.foo(10, 20) )
> Документацию всё равно нужно делать. Не уверен, что в этом есть смысл, если можно сослаться на официальную документацию, указав разницу в API. Написать полноценную документацию для ~100 функций там, где официальная документация не очень хорошо структурирована (т.е. её нельзя сконвертировать) — работа в несколько раз больше, чем сгенерировать биндинг. По крайней мере, если не уверен, что этим кто-то кроме тебя когда-нибудь будет пользоваться.
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 а есть какая-нибудь простенькая либа, чтоб красиво таблицу в консоль распечатывать? (под таблицей я имею ввиду массив простых луа таблиц с одинаковыми ключами)
anton
https://github.com/pkulchenko/serpent
кажется, то что нужно, спасибо!
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
а можно туда как-то обычные нормальные неймед аргументы скормить?)
а можно туда как-то обычные нормальные неймед аргументы скормить?)
Таблицей? В Lua подобное передачей таблицы делается.
А, ты про имена. Нет.
usernameak
я просто хочу чтобы определенная переменная была локальной для этого скрипта
> y = load("return (function(a, b) print(a, b); end)(...)") > y(1, 2) 1 2
я просто хочу чтобы определенная переменная была локальной для этого скрипта
Как костыль — приклей сверху кусок кода (встречал такое). Может, через дебажную либу можно ещё что-то сделать, не знаю.
usernameak
у меня если что не оригинальная сишная имплементация и не LuaJIT, но не суть
usernameak
у меня LuaJ, это имплементация Lua 5.2 для JVM
> y = load("return (function(a, b) print(a, b); end)(...)") > y(1, 2) 1 2
Вот эта штука может сработать, если к чанку приклеишь сверху и снизу функцию-обёртку и её вызов, как в примере. Или просто локальную переменную сверху.
usernameak
у меня LuaJ, это имплементация Lua 5.2 для JVM
правда... здесь у load есть некий параметр environment
Ещё можно сделать переменную в environment, как раз.
usernameak
по дефолту туда идет таблица глобалов
Она типа глобальной, но на самом деле это будет переменная environment, снаружи её не будет видно.
usernameak
я так полагаю, глобалы определенные в этом скрипте туда же пойдут?)
Если будет environment, сможешь сделать такие глобалы, какие нужны.
usernameak
через метатаблицу __index переопределить?)
Вплоть до отключения доступа к вообще всем стандартным либам.
usernameak
Вплоть до отключения доступа к вообще всем стандартным либам.
тут это можно и без этого, просто не загружая их)
usernameak
кстати, просто интересно: lua5.1 ещё жива лишь за счет luajit?
через метатаблицу __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
а то я чую у меня тут X-Y problem
а лучший вариант - так не делать?
Не могу сказать, тем более, не зная потребностей. Делал бы сам — скорее всего скопировал бы _G в env и добавил бы что нужно.
usernameak
Не могу сказать, тем более, не зная потребностей. Делал бы сам — скорее всего скопировал бы _G в env и добавил бы что нужно.
короче, у меня на каждый тип игровых объектов есть отдельный .lua файл, который запускается при регистрации
usernameak
ну и надо как-то передавать инстанс этого самого типа
Не понятно, тебе нужно в чанк передать игровой объект? Есть пример уровня hello world?