ここでの問題 (少なくとも Linux では) は、ドキュメントから gdb が助けようとしている可能性があると思います:
ランダム化を無効にする
ランダム化の無効化をオンに設定
このオプション (gdb ではデフォルトで有効) は、開始されたプログラムの仮想アドレス空間のネイティブなランダム化をオフにします。このオプションは、複数のデバッグ セッションで実行の再現性を高め、デバッグ セッション間でメモリ アドレスを再利用できるようにするのに役立ちます。
この機能は、gnu/Linux でのみ実装されています。を使用して同じ動作を得ることができます
(gdb) set exec-wrapper setarch `uname -m` -R
http://sourceware.org/gdb/current/onlinedocs/gdb/Starting.html
更新:これを確認したところ、私の場合はそうであるようです(Linux 2.6.28を実行しています)。単純な Hello World プログラムをコンパイルし、コマンドライン引数なしで gdb を起動します (disable-randomization 設定をオーバーライドする前にプログラムをロードしたくありません)、次のように入力します。
(gdb) set disable-randomization off
(gdb) file ./a.out
(gdb) break main
(gdb) run
(gdb) disas printf
printf のアドレスは、プログラムを実行するたびに異なります。