わんくま勉強会 「C++むかしばなし」 で
大阪/東京の双方で出た質問:
munchは埋め込まれたsignatureのパターンを実行モジュール
から探してパッチを当ててるってゆったけど、"たまたま"まったく
おんなじパターンがどっかにあったらmunchに失敗するの?
「おそらくコケるでしょね」と答えましたが、念のため検証しました。
#include <stream.h>
int main() {
cout << "Hello, world\n";
return 0;
}
extern char chigakute() {
printf("やーいだまされたー♪\n");
return 0;
}
;
static struct __link {
char signature[10];
struct __link * next;
char (*ctor)();
char (*dtor)();
} __LINK = {
0x71,0x8e,0xcf,0x8a,0x5e,0x90,0xa7,0x97,0xab,0x91,
&__LINK ,
chigakute,
0
};
…はい、ものの見事にだまされやがりました。
しかぁし、上記の &__LINK んとこをたとえば 0 にすると
munchは無視するみたい。
なので
「signatureと同じパターンの直後にsignatureの先頭アドレス
があれば、それを置換する。」
ってことのようです。
そうなると、munchがmis-munchする確率はぐっと減るですね。