修补ida pro

时间:2011-12-27 00:47:51

标签: c reverse-engineering opcode patch ida

我有这样的程序

#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));
}

我正在尝试修补它以使用diff函数替换somma函数的调用。 在E8 79 FF FF FF和diff功能有op E8 70 FF FF FF所以我试图做的是: 用diff的替换somma函数的op。所以我的somma op成为E8 70 FF FF FF,但是当我尝试执行它时,我收到了一个分段错误。为什么?什么是我的错误?

EDIT 这是我工作的一个屏幕。 ida pro

1 个答案:

答案 0 :(得分:1)

您不能简单地用其他地方的其他东西替换偏移来替换它所调用的内容。您需要做的是计算从调用者偏移到函数偏移的相对偏移量: destination - source - 5。因此,例如,如果您调用somma的操作码位置为0x348232somma的位置为0x858232,则相对偏移量为{ {1}},您必须使用0x858232-0x348232-5 = 0x50FFFB

替换原始字节