c - 使用 ida pro 打补丁

标签 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 所以我尝试做的是: 将 somma 函数的 op 替换为 diff 的 op。所以我的 somma 操作变成了 E8 70 FF FF FF 但是当我尝试执行它时我收到了段错误。为什么?我的错误是什么?

编辑 这是我的作品的屏幕。 ida pro

最佳答案

您不能简单地用其他地方的其他内容替换偏移量来替换它所调用的内容。您需要做的是计算从调用者偏移量到函数偏移量的相对偏移量: 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/

相关文章:

C - 链表无法将节点**转换为节点*

c++ - 为什么在 main() 之前断言会导致语法错误 "error: expected ' )' before numeric constant"?

python - 源不可用时调试python字节码

mysql - 将数据模型移植到 Rails 迁移的最简单方法

c - c 中嵌入的汇编代码为 cmp 提供了不正确的操作数类型错误

c - 用 C 写入文件的奇怪输出

c++ - _stscanf_s 做什么?

android - 是否可以从命令行使用 Android Studio 的反编译器?

c# - Reflection.Emit 中的短格式操作码错误

ethereum - Solidity - 松露 : Error: VM Exception while processing transaction: invalid opcode NOT because of revert