3

私はこの構造を持っています:

struct Books {
 char  title[50];
 char  author[50];
};

arg1プログラムに渡すと、コードの一部で、方​​向$title+52にいくつかの文字が追加されるため、author値が上書きされることがわかっているとしましょう(バッファオーバーフロー)。

次に、バイナリに ASLR を追加します。このようにランダムな方向もあるので、先ほど説明したバッファオーバーフローはありえなかったと思います。

これは本当ですか?または、ASLR を追加しても、構造体メンバーの方向が一緒になり、バッファー オーバーフローが発生する可能性がありますか?

4

3 に答える 3

2

ASLR は、コンパイル時のものには影響しません。コンパイラはコンパイル時に構造のレイアウトを選択し、これは結果のオブジェクト コードにハードコーディングされます。

さらに、C 標準では、連続する構造体メンバーが構造体定義に現れる順序でメモリに配置される必要があります (メンバー間のパディングは指定されていませんが、これもコンパイル時に修正されます)。

于 2018-10-17T15:38:47.483 に答える