Вызов функции из DLL, введенной в процесс, и изменение адресов функций-указателей.

0

Привет, у меня такая проблема; Я хочу вызывать функции из процесса с моей вложенной DLL, но я хотел бы иметь возможность изменять адрес функции, поскольку адреса отличаются от каждой версии программы.

В основном я получил DllMain, что привело к созданию нового потока, который делает то же, что и в этом главном примере.

typedef void (*func_t)();
func_t func = (func_t)0x2000; //as an example

int main(int argc, char* argv[]) {
    int type = 1;

    if(type == 0) {
        *func = 0x2001; //altough *(int*)func = 0x2001; works but it doesn't change it
    }
    func(); //func will do the same in each version of the program except the addresses change so you can e.g change the type with cin >> type; and that'll it work
}

Я получаю следующее: ошибка: назначение местоположения только для чтения '* func

благодаря

  • 0
    В чем основная проблема? Что заставляет вас пытаться перейти на абсолютные адреса?
  • 1
    Нашел проблему, я пытался изменить глобальную переменную из другого файла.
Теги:
dll

1 ответ

1
Лучший ответ
*func = 0x2001;

Вы, вероятно, хотите сделать обратное. вместо func *func func вместо *func. Например, это будет работать:

func = (func_t)0x2001;
  • 0
    Может ли кто-нибудь объяснить мне, почему это когда-либо имеет смысл?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню