0

私はこのようなプログラムを持っています

#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 関数には op E8 70 FF FF FF があるので、私がやろうとしたことは、somma 関数の op を diff のものに置き換えることです。したがって、私の somma op は E8 70 FF FF FF になりましたが、実行しようとするとセグメンテーション違反が発生します。なんで?私のエラーは何ですか?

EDIT これらは私の作品の画面です。 イダプロ

4

1 に答える 1

1

オフセットを別の場所にある別のものに単純に置き換えて、それが呼び出すものを置き換えることはできません。あなたがする必要があるのは、呼び出し元のオフセットから関数のオフセットまでの相対オフセットを計算することです: destination - source - 5 . したがって、たとえば、を呼び出すオペコードの場所がsomma0x348232あり、の場所が でsommaある0x858232場合、相対オフセットは になり0x858232-0x348232-5 = 0x50FFFB、元のバイトを次のように置き換える必要があります。E8 FB FF 50 00

于 2011-12-27T01:30:24.493 に答える