Патчинг с ida pro - PullRequest
       49

Патчинг с ida pro

0 голосов
/ 27 декабря 2011

У меня есть такая программа

#include <stdio.h>

int somma(x,y){
  return x+y;
}

int diff(x,y){
  return x-y;
}



int main(){
  int x=5;
  int y=4;
  printf("la somma e' %d", somma(x,y));
  printf("La differenza e' %d", diff(x,y));
}

Я пытаюсь исправить это, чтобы заменить вызов функции somma функцией diff.В E8 79 FF FF FF и функция diff имеет опцию E8 70 FF FF FF, поэтому я попытался сделать следующее: заменить опцию функции somma на diff.Таким образом, моя операция Somma стала E8 70 FF FF FF, но когда я пытаюсь выполнить ее, я получаю ошибку сегментации.Зачем?В чем моя ошибка?

РЕДАКТИРОВАТЬ Это экран моей работы.ida pro

1 Ответ

1 голос
/ 27 декабря 2011

Вы не можете просто заменить смещение чем-то другим в другом месте, чтобы заменить то, что оно вызывает. Вам нужно вычислить относительное смещение от смещения вызывающего абонента до смещения функции: destination - source - 5. Так, например, если местоположение кода операции, где вы вызываете somma, равно 0x348232, а местоположение somma равно 0x858232, то относительное смещение будет 0x858232-0x348232-5 = 0x50FFFB, и вы получите заменить оригинальные байты на E8 FB FF 50 00

...