C/C++

Получить имена полей класса c++

Если коротко я работаю с апи у которой нет документации, а исходники скрыты. У меня есть только псевдокод одной из первых версий этого апи и могу глянуть символы через дизассемблер. Мне нужно получить некоторые данные из класса этого апи, и с помощью псеводкода я узнал, что в этом классе есть нужные мне данные в каком-то из полей, но в псеводкоде не пишутся имена полей. Так вот, к сути вопроса.
Есть какие-то способы узнать имя этого поля?
Я прогаю с телефона и всякие Иды мне не помогут. Может есть что-то подобное на жабный рефлекшн? Чтоб получить имена всех полей класса? Там уже я дальше сам разберусь
David Xubunaia
David Xubunaia
136
глупость какую-то спрашиваешь. зачем тебе имена? думаешь, поля как собачка по имени откликнутся?
вопрос задан плохо, так что давай гадать. судя по описанию, твое АПИ - это набор абстрактный классов. Тогда варианта 2.
1) "Реальные" классы - наследники абстрактных. Тогда просто скопируй экземпляр класса в массив размером sizeof и перебирай, пытаясь поймать корректные значения полей.
2) "Реальные" классы просто содержат указатель на имплементацию. Тут можно пробовать через "вариант 1" вытащить указатель на импл и уже его по "варианту 1" разбирать, но никто не может гарантировать, что внутри импла не будет указателя на следующий импл и т.д.
Анвар Алеев
Анвар Алеев
38 458
Лучший ответ
David Xubunaia Ну, вообще, откликнутся. Было такой, что угадывал имя поля и могу работать с ним.
1 вариант уже пробовал, но запарился от крашей проги (которая по минут 10 запускается)
David Xubunaia Палагаю, я ряльно чот не договариваю. Я не настолько силен в плюсах. Возможно следующие подробности помогут понять, чо да как.
Крч.
Для начала у меня идет хедер класса этогт апи

class A {
public:
всякие методы которые я взял из символов апишки
};

Дальше я хукаю метод класса этого апи по символу и получаю экземпляр класса А
Дальше мне нужно получить поле с данными, но для этого мне нужно узнать имя этого поля, чтобы в хедере прописать
David Xubunaia Как хочешь нельзя назвать. Иначе будет пустоту возвращать при обращении.
Нужно, чтоб имя поля в хедере совпало с нужным именем поля в апи.
А так насчёт оффсетов.
Мне как то знакомый показывал такой способ получения полей по оффсетам

SomeData* sm = (SomeData*)((char*) someClazz + оффсет);
Так можна?

Еще был какой-то способ, но я не смог найти переписку
Страшная тайна заключается в том, что у полей и методов нет имен. IDE с++ подсказывает имя метода класса, имя его поля, только потому что разработчик библиотеки этого класса, предоставил специально для этой IDE специальную библиотеку с этими именами (вроде lib называется, но не уверен). Да и если подумать зависит ли что-то от имени?
(с) Кажется его зовут Х**й, только пишется с двумя Х )
Саша Постовит
Саша Постовит
51 416
С помощью программатора сн341а. Там все раскрывается тайные коды.
Игорь Юрьевич
Игорь Юрьевич
15 589
David Xubunaia А что нибудь по проще??
У ж меня ведро
Один из способов узнать имена полей класса C++ - это использовать такой инструмент, как cppinsight, который анализирует исходный код класса C++ и автоматически создает над ним слой абстракции. С помощью этого вы можете получить доступ к списку членов и классов, которые отображаются в этом классе. Кроме того, инструменты обратного инжиниринга, такие как IDA Pro и OllyDbg, позволяют вам разбирать исполняемые файлы, создавая представление о том, что делает программа, предоставляя такие элементы, как имена символов, строки, ссылки на данные, функции и т.д.
МT
Максим Teterkin
4 780
David Xubunaia Ну ида эт на пк. Остальное чекну, но палагаю, тут все для пк?