2015-06-11 6 views
0

системы x86изменить возвращаемое значение функции с переполнением буфера

Я пытаюсь изменить возвращаемое значение функции. Например

int foo(){ 
    char buffer[12]; 
    gets(buffer); 
    return 1; 
} 

int main(){ 
    int value; 
    value = foo(); 
    return 0; 
} 

Foo() всегда возвращает 1. Я знаю, что значения возврата из функций сохраняются в% EAX (так 1 хранятся в% EAX). Есть ли способ, что я могу достигнуть и изменить% е стоимость? Я думаю, что этого не может быть, потому что% eax не появляется в стеке! Правильно?

+1

'foo' всегда возвращает' 1', потому что вы возвращаете 1; '. Выясните, что вы хотите вернуть, а затем «return the_value;». В сборке x86 аргументы предоставляются вызываемому в стеке, возврат возвращается вызывающему в EAX (не в стеке). –

+0

Я думаю, он пытается взломать существующую программу, а не переписывать код. –

+0

Глядя на него снова. Я думаю, вы правы. Спасибо за разъяснения. –

ответ

0

Вы не сможете изменить значение EAX в этой функции через переполнение буфера именно по той причине, по которой вы предполагаете. Однако, как потенциально можно выполнить выполнение программы, так как вы можете перезаписать весь стек стека, включая сохраненный указатель кадра и обратный адрес.

Как это сделать, кажется, вне сферы вашего вопроса, но оно будет зависеть от того, используется ли ASLR, используются ли стопки канарейки, неиспользуемый стек на месте и т. Д.