生のポインタを保存しない、保存されてるポインタを生のまま利用しないというのは、リターンアドレスの書き換えを困難にするため、バッファオーバーフローなどを本質的に防ぐことができるわけではありませんが、攻撃の成功を難しくできますね。 というか、Windows でそのための関数が用意されているとは知りませんでした。 EncodePointer(PVOID) function [Base] DecodePointer(PVOID) function [Base] EncodeSystemPointer(PVOID) function [Base] DecodeSystemPointer(PVOID) function [Base] ところで、Windows だと atexit に限らず、コールバック関数を登録するようなAPIがたくさんあるけど、あれの内部実装はどうなっているんだろう…。