C статический указатель на указатель на значение

#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.