Я хочу просто перезаписат отделюную инструкцию, как мне это сделать, если она каждый раз находится на разных адресах
WinApi же. Из юзермода - инжект кода в процесс. Т.е. принципиально что-то вроде (как бы я делал на си, во всяком случае):
0. Инжектимся (банальный вариант, от которого может психовать антивирус/что там еще - аллоцируем в процессе исполняемую память, загоняем туда в бинарном виде свой код, создаем на нем тред). Дальше вся работа в целевом процессе:
1. GetModuleHandle - находим интересующую нас dll, хендл эквивалентен ее базовому адресу.
3. NtProtectVirtualMemory - разрешаем запись на странице с интересующей инструкцией. Опционально - приостанавливаем остальные треды.
4. Перезаписываем инструкцию (для конкретной dll просто находим ее относительно начала dll)
5. Профит (если останавливали треды - возобновляем, опционально возвращаем старые аттрибуты странице)
для конкретной dll просто находим ее относительно начала dll - вилами по воде, конечно. Если функция экспортируется - есть GetProcAddress, что позволит искать ее относительно начала функции (уже меньше шансов на фейл).
Напрямую с памятью другого процесса разве что из ядра шаманить выйдет.