#c #pointers #reverse-engineering #memory-address
#c #указатели #обратное проектирование #адрес памяти
Вопрос:
Я действительно новичок в C и не совсем понимаю, как правильно использовать указатели. У меня есть dll, которую я хочу внедрить в программу. Я знаю, что по адресу «program.exe 0x29D2CC» указывает на другой указатель на структуру, которую я назвал entList в этой структуре есть несколько экземпляров моего класса ent. Итак, я пытаюсь получить первый объект entList (я точно знаю, что первый объект действителен).
В предыдущих проектах я мог сделать это следующим образом:
entList* entityList = *(entList**)address;
Но здесь это не работает. Затем я попытался использовать эту функцию, которую я также использовал в других проектах.
uintptr_t mem::FindDMAAddy(uintptr_t ptr, std::vector<unsigned int> offsets) {
uintptr_t addr = ptr;
for (unsigned int i = 0; i < offsets.size(); i) {
addr = *(uintptr_t*)addr;
addr = offsets[i];
}
return addr;
}
entList* entityList = (entList*)mem::FindDMAAddy(moduleBase, { 0x29D2CC, 0x0 });
Использование этого моего инжектора выдает ошибку «удаленный код не смог загрузить модуль».
Я искал об этом в Интернете, но, поскольку я новичок в этом, я не знал, что именно искать, и не нашел ничего, что мне помогло. Может кто-нибудь сказать мне, как я могу получить entList * или какой метод я мог бы использовать для получения объектов, которые находятся в конце цепочки указателей?
Комментарии:
1. Если вы действительно новичок в C , я рекомендую начать с самого начала. Сокращение строки не одобряется.
2. Я не думаю, что это проблема, потому что я выполнил два не слишком маленьких проекта на C , и это не мой первый язык программирования, который я изучил, поэтому я понимаю логику и синтаксис кода. Я просто борюсь с более сложным использованием указателей для получения значений в памяти.
3. Я не понимаю, как ошибка, которую вы получаете, связана с кодом, который вы публикуете. Можете ли вы прочитать какой-либо адрес в процессе?
4. Да, я обычно могу читать адреса в процессе. Я думаю, что ошибка с функцией FindDMAAddy заключается в том, что я использую смещение 0. По крайней мере, эта ошибка возникала каждый раз, когда я использовал смещение 0.