ソフトウェアをリバース エンジニアリングする方法と、コンパイラの最適化前のコードがどのように見えるかを理解するためのすべてのトリックを学ぼうとしています。
私はこのようなものを数回見つけました:
if (a < 0)
a = -2147483648 - a;
私はもともとそれがabs()
アンダーフローだと思っていたので、正の値が得られます。しかし、a
は負であるため (if を参照)、これは次と同等です。
if (a < 0)
a = -2147483648 + abs(a);
これは非常に小さな負の数であり、絶対値ではありませんa
。私は何が欠けていますか?