Ну, короткий ответ: если вы не знаете сборку, вам не следует этого делать, ха-ха.
Но, если вы так сильно хотите взломать стену, я имею в виду изменение работы законной программы, вы не можете просто взять адрес и назвать его хорошим.
Вам нужно найти символ (если он находится в счастливой стране Linux) или использовать sig-сканирование (или оба D =), чтобы найти реальную функцию.
Как только вы это сделаете, все относительно просто, вам просто нужно написать mov и jmp. Предполагая, что у вас уже есть доступ к запущенному процессу, и ваш sig-сканер нашел правильный адрес, этот бит кода даст вам желаемый
mov eax, 0×deadbeef
jmp eax
Теперь, если эта функция, которую вы хотите, является методом класса ... вам нужно еще немного изучить. Но этот фрагмент сборки будет запускать любую статическую функцию, какую вы захотите.
Существует также некоторая путаница, связанная с различными соглашениями о вызовах, так что никто из комментаторов не пытается меня об этом назвать, что далеко продвинулось в этом вопросе.
EDIT:
Между прочим, я не использую call, потому что при использовании call вы должны беспокоиться о кадрах стека и других очень беспорядочных вещах. Этот код перейдет на любой адрес и начнет выполняться.
Если вы хотите вернуться к своему коду, это уже другая история, но это заставит вашу целевую функцию работать, если это правильное соглашение о вызовах, а не метод класса и т. Д.