Если под eip
вы подразумеваете расширенный указатель инструкций x86, то нет, не напрямую (если у вас есть что-то похожее на действительную реализацию memcpy
).Это потому, что регистры x86 не отображены в памяти.Вы можете сделать это косвенно, переписав возвращаемое значение, которое было помещено в стек при вызове memcpy.Затем, когда memcpy вернется, он вставит это плохое значение в eip
и попытается продолжить выполнение от того, кто знает, где.
Если перезаписать его чем-то значимым, это зависит от того, что вы подразумеваете под «значимым».Если вы имеете в виду «что-то, что не приведет к аварийному завершению программы (с точки зрения ОС) сразу», тогда да.Если вы предполагаете, что полностью перезаписываете его случайными данными, то статистически у вас есть столько страниц, отображенных в вашей программе таким образом, что они исполняемые, и так много возможных страниц памяти, и вы можете рассчитать вероятность того, что вы перейдете к исполняемому файлу.стр.Тогда вам будет сложнее вычислить вероятность того, что то, что там может быть выполнено очень долго без сбоев (на самом деле это форма классической остановка проблема ).