2012-07-25 5 views
1

실행중인 프로그램이 있다고 가정하고 /proc/[pid]/map을 BSD (또는 /proc/[pid]/maps in Linux)에서 보면 다음과 같은 줄이 보입니다.BSD 또는 Linux에서 프로그램의 기본 스택 설정을 제어하는 ​​방법은 무엇입니까?

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

스택입니다. 모든 PC-BSD 프로그램은이 같은 스택 경계 0xbfc00000을 사용합니다. 리눅스에서는 ASLR을 끄면 비슷한 결과가 발생합니다.

일부 프로그램에서는이 설정을 사용하고 싶지만 스택은 elf 프로그램 헤더 나 섹션 헤더에 지정되어 있지 않은 것으로 보입니다.

그래서 같은 설정을 변경하려면 :

  • 변화가
  • 가 다른 값

에 스택 경계를 설정 스택의 실행 권한을 변경할 수있는 방법이 있나요 개별 프로그램을위한 "스택 설정"? 시스템 전체는 어떨까요? FreeBSD를 들어

답변

1

:

AMD64, i386을하고 스택 어떠했는지를 제어 할 수있는 파워에는 sysctls kern.elf32.nxstackkern.elf64.nxstack (FreeBSD의 9.0 이후)로 실행 파일입니다.

당신은 다른 스택 크기로 프로그램을 시작하거나 사용자의 다른 클래스에 대한 제한을 설정 login.conf(5)를 사용하는 limits(1)를 사용할 수 있습니다. 스택 경계은 커널에서 하드 코딩 된 것처럼 보입니다. 아키텍처에 대해서는 struct sysentvecsv_usrstack 필드를 참조하십시오.

편집 프로그램에서 setrlimit(2)을 사용하여 더 큰 최대 스택 크기를 요청할 수 있습니다.

GNU 링커는옵션을 지원하지만 설명서 페이지에 따라;

이 옵션은 링커

창에 따라서이 단지 작품의 i386 PE 대상 포트 에 따라 다릅니다.

+0

일부 프로그램에는 ELF 데이터에 GNU_STACK 부분이 있습니다. 이런 식으로 경계를 설정하는 방법이 있는지 궁금합니다. 그렇지 않으면 ELF 정보가 스택의 모든 메모리 레이아웃을 지정할 수 있다는 것이 이상하게 보입니다. – EdBrown

+0

elf 형식에는 프로그램의 어느 부분을 메모리에로드 할 것인지와 그 위치에 대한 정보가 들어 있습니다. 리소스 제한은 운영 체제에 의해 제어되므로 설정하지 않아도됩니다. 'setrlimit (2)'를 보라. –