2013-11-18 2 views
2

В системе с предкомпилированным двоичным похожее на это:Переписывания уже скомпилированные функций во время выполнения

int foo(int bar) { 
// do something wrong 
    return ...; 
} 

Есть ли способ я могу использовать, во время выполнения, изменить эффект вызова этой функции для:

int foo(int bar) { 
    return fixedFoo(bar); 
} 

Без изменения других бинарных файлов? То есть есть ли какой-нибудь хакерский хакер, который я могу сделать, чтобы изменить функциональность вызова foo?

К сожалению, я не могу предварительно скопировать двоичный файл, поскольку правильное поведение foo зависит от результата запуска.

+0

Вы могли бы сделать Foo указатель на функцию, а затем установить Foo в подпрограмму, которую после «запуска» во время выполнения. –

+0

Вы можете «предварительно установить» двоичный код с вызовом фиксированной функции, которая вызывает другую функцию, которая делает что-то, зависящее от «запуска запуска». – dasblinkenlight

+0

Какая платформа/архитектура? –

ответ

0

Если у вас есть доступ к исходному коду, вы можете сделать foo указателем на функцию, а затем установить foo в нужную вам процедуру после запуска «runtime startup».

#include <stdio.h> 

int (*foo)(int); 

int bar(int a) { printf("bar %d\n", a); return 0; } 
int baz(int a) { printf("baz %d\n", a); return 0; } 

int main(void) { 
     // do start up here 
     foo = bar; 
     foo(23); 
     return 0; 
} 

печатает

bar 23 
Смежные вопросы