我有一个这样的程序
#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 所以我尝试做的是: 将 somma 函数的 op 替换为 diff 的 op。所以我的 somma 操作变成了 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/