我有一个这样的程序

#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,但是当我尝试执行它时,我收到了分段错误。为什么?我的错误是什么?

编辑
这些是我工作的画面。

最佳答案

您不能在其他地方简单地将偏移量替换为其他内容来替换其调用的内容。您需要做的是计算从调用方偏移量到函数偏移量的相对偏移量:destination - source - 5。因此,例如,如果您调用somma的操作码的位置是0x348232,而somma的位置是0x858232,则相对偏移将是0x858232-0x348232-5 = 0x50FFFB,并且您将用E8 FB FF 50 00替换原始字节

关于c - 使用ida Pro修补,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8640242/

10-10 19:26