1

実行中のプログラムがあり、BSDの/proc/[pid]/map (または Linux の/proc/[pid]/maps ) を見ると、次のような行が表示されます。

0xbfbe0000 0xbfc00000 3 0 0xc74c4198 rwx 1 0 0x3000 COW NNC default - CH 1001

これがスタックです。私の PC-BSD プログラムはすべて、この同じスタック境界 0xbfc00000 を使用します。Linux では、ASLR をオフにすると、同様のことが起こります。

一部のプログラムでこれらの設定を試してみたいのですが、エルフ プログラム ヘッダーまたはセクション ヘッダーでスタックが指定されていないようです。

したがって、次のような設定を変更したい場合:

  • スタックの実行権限を変更する
  • スタック境界を別の値に設定する

個々のプログラムの「スタック設定」を変更する方法はありますか? システム全体はどうですか?

4

1 に答える 1

1

FreeBSD の場合:

kern.elf32.nxstackamd64、i386、および powerpc では、スタックが sysctlで実行可能かどうかを制御できますkern.elf64.nxstack(FreeBSD 9.0 以降)。

を使用limits(1)して、異なるスタックサイズlogin.conf(5)でプログラムを開始したり、さまざまなクラスのユーザーに制限を設定したりできます。スタック境界は、カーネルでハードコーディングされているように見えます。アーキテクチャの のフィールドsv_usrstackを参照してください。struct sysentvec

編集 プログラムは、 を使用して、より大きな最大スタック サイズを要求できますsetrlimit(2)

GNUリンカは--stackオプションをサポートしていますが、マニュアルページによると;

このオプションは、リンカーの i386 PE ターゲット ポートに固有です。

したがって、これはWindowsでのみ機能します。

于 2012-08-12T23:14:46.000 に答える