Snusmumriken
Ничего не понял. Нормальный образец кода можно?
Заха́р
Это файловый менеджер выводит в колонку часть имени файла.
Выводит посредством плагина на луа.
Вот тут на 38 строке добавляется эта конструкция
https://github.com/j2969719/doublecmd-plugins/blob/617a920d052ae51faf581014389b965c7fea0ac6/plugins/wdx/scripts/filenamematchwdx.lua#L38
Snusmumriken
Snusmumriken
Кажется, это ровно то что тебе нужно, нет?
Заха́р
Заха́р
Спасибо ещё раз!
Anonymous
Народ подскажите плиз, нужно в скрипте под GameGuardian из значения (id предмета)
получать его указатель
На arm системах работало идеально так:
function idToPointer(id)
local tmp = gg.getValues({{address = id,value=nil,flags=gg.TYPE_DWORD}})
return tmp[1].value
end
Где id - DWORD значение
Anonymous
На arm64 системе он криво преобразовывает id в адресс и идет сбой
Anonymous
Snusmumriken
(наверное, проблема в gameguardian на ARM-системах)
(или тебе стоит сделать то же, что было в прошлый заход, когда была схожая фигня?)
Anonymous
Не, там наоборот было, значение из адреса получать
Snusmumriken
И что ты там таки сделал? : )
Anonymous
function convertAddressToValue(pageInMemory,addressToConvert)
local a = gg.setValues({{address=pageInMemory,value=addressToConvert,flags=gg.TYPE_DWORD}})
local b = gg.getValues({{address=pageInMemory,value=nil,flags=gg.TYPE_DWORD}})
return b[1].value
end
Anonymous
Выделяю адрес в памяти , присваиваю ему значение равное адресу, получаю значения, возвращаю получившееся значение
Anonymous
Тут нормально стало работать и на arm, и на arm64 и на разных ведрах
Snusmumriken
А теперь попробуй выделить адрес в памяти, и записать туда указатель предмета по ID какой-нибудь функцией "получить адрес по ID". Работаем с указателями через выделение в памяти кусочка.
Anonymous
Щас попробую)
Anonymous
Не
Anonymous
На arm - ок
Anonymous
На arm64 хрен
Anonymous
Anonymous
function convertValueToPointer(pageInMemory,valueToConvert)
local a = gg.setValues({{address=pageInMemory,value=idToPointer(valueToConvert),flags=gg.TYPE_DWORD}})
local b = gg.getValues({{address=pageInMemory,value=nil,flags=gg.TYPE_DWORD}})
return b[1].value
end
Anonymous
Получается 0
Snusmumriken
Жуть какая
Igor
Anonymous
Неправильно
Igor
Ты меня не понял
Anonymous
Они никогда не равно нулю
Igor
Я так понимаю, ты получаешь значение из поинтера. Поинтер, в свою очередь получается из статичной области памяти
Anonymous
Ни указатели ни id
Igor
У тебя просчитываются разные "пути" для разных архитектур до значения в указателе?
Anonymous
Нет
Igor
Полагаю, у тебя где-то захардкодены база и её смещения
Igor
И найдены они только для arm32
Igor
А для arm64 ты их не искал, а они находятся совершенно по другим адресам
Snusmumriken
*могут находиться
Anonymous
Я делаю три шага:
Ищу постоянное значение, далее смещаю и получаю ID, дальше надо из id получить указатель для дальнейшего поиска (точнее сверки каждого результата на соответствие указателю) полного списка id определенной категории товаров которые имеют свои указатели
Anonymous
Anonymous
Я использую пока arm приложение на arm64 системе
Igor
Вот теперь я окончательно запутался. Где и при каких обстоятельствах у тебя возникает проблема?
Anonymous
Щас
Anonymous
5 - 10 минут,проскриню все
Anonymous
Я просто мало понимаю в этом ,поэтому объяснить как полагается-для меня проблема(
Igor
*могут находиться
Ну когда речь идёт о разных архитектурах, насколько мне известно, не просто "могут". Компилеры же по разному компонуют код для разных архитектур.
Snusmumriken
А если память динамическая, то оно может каждый раз находиться где угодно, и можно рандомом попасть на один и тот же участок ))
Igor
Вообще да, но вероятность такая, что её вероятностью-то назвать сложно
Anonymous
Так
Anonymous
Anonymous
Anonymous
Ищу постоянное значение, из которого после смещения получается id
Anonymous
Anonymous
Это id после смещения найденного результата
Anonymous
В интерфейсе есть кнопка перейти к указателю
Anonymous
Anonymous
Anonymous
Сам указатель собственно говоря
Anonymous
Это на arm
Anonymous
И скрипт отрабатывает как надо
Anonymous
Anonymous
Anonymous
На arm64 системе я использую arm приложение,т.е. структуры данных те же самые
Anonymous
Но, ошибка именно в функции преобразования ЗНАЧЕНИЯ в АДРЕС
Anonymous
Из за этого я не получаю нужный указатель, хотя остальные условия выподлняются как надо
Anonymous
Может под х64 он формат как то подругому форматирует, я уж хз...
Anonymous
Anonymous
Сам скрипт...
Igor
Не пойму, это сам GG чтоль требует хранить адреса в HEX строке?
Igor
Тут в самом начале какое-то непонятное мне преобразование адреса выделенной страницы в hex строку
Anonymous
Я не знаю честно говоря
Anonymous
Это из документации гг
Igor
"0x%08x"
Anonymous
Вот
javascript:void(0)
Anonymous
Ай
Igor
0x8x - это плохо
Igor
8 шестнадцатеричных цифр - это 32 бита адрес
Anonymous
https://gameguardian.net/help/classgg.html#a15e72eaba99c1eadac1ccdeb8e2b5009
Igor
0x00000000
Igor
А 64битное число кодируется 8 БАЙТАМИ
Igor
То есть 0x0000000000000000
Anonymous
Суть в том что игра 32 бита , а гг работает под 64битной