FreeBSD 테스트 RTLD

FreeBSD 테스트 RTLD

어떤 이유로 나는 내 자신의 rtld 버전(ld-elf.so.1)을 수정하고 테스트하려고 합니다. 이 링커를 변경할 때마다 시스템을 재부팅하고 CD/DVD에서 가져와서 /libexec/에 내 버전을 설치한 다음 시스템을 다시 재부팅해야 합니다. 때로는 분할 오류로 인해 사용자 공간을 실행하지 않는 경우도 있습니다. 나는 그런 과정에서 많은 시간을 낭비하고 있다.

/libexec에 rtld를 다시 설치하고 시스템을 재부팅하지 않고 명령줄에서 이 링커를 시작할 수 있는 방법을 묻고 싶습니다. Linux /lib/ld-linux.so.2와 유사하게 rtld를 실행할 수 있습니까?

ld-elf.so.1을 실행하려고 시도했지만 분할 오류가 발생할 때마다. 아마도 rtld 명령줄에서 일부 매개변수를 놓친 것 같습니다. 명령줄에서 rtld를 실행하는 방법에 대한 제안이 있으십니까?

실행 파일의 기본 인터프리터를 변경할 수 있을까요?

편집: 내 rootfs의 파일 시스템으로 UFS를 사용합니다.

답변1

Linux와 유사하게 rtld를 실행할 수 있습니까 /lib/ld-linux.so.2?

예, /libexec/ld-elf.so.1 /path/to/your_binaryLinux에서와 마찬가지로 FreeBSD에서도 실행이 잘 작동합니다.

실행 파일의 기본 인터프리터를 변경할 수 있을까요?

예, 바이너리를 컴파일할 때 cc -Wl,-dynamic-linker=/path/to/your_interpreter. 이는 gcc/clang이 인수를 링커에 직접 전달하는 방식입니다. 해당 플래그 와 기타 플래그 에 대한 설명은 맨페이지를 -Wl,..참조하세요 .ld(1)--dynamic-linker

실행하려고 시도했지만 ld-elf.so.1분할 오류가 발생할 때마다.

동적 링커/인터프리터는 위치 독립적( -pie)으로 컴파일되어야 하며 자체적으로 공유 객체에 의존하거나 다른 인터프리터를 사용할 수 없습니다.

답변2

내 rootfs에는 UFS를 사용합니다.

ZFS 답변은 매우 간단하기 때문에 안타깝습니다. 아마도 당신은 그것을 전환 이유라고 생각할 것입니다.

운영 체제의 정적 부분이 모두 하나의 데이터 세트에 있는 한 ZFS를 만듭니다.클론데이터 세트의 일부 하위 디렉터리에 마운트하고 거기에서 로더(또는 수정하려는 모든 항목)를 수정한 다음 해당 하위 디렉터리를 루트로 사용하여 감옥을 만듭니다. 이는 운영 체제의 쓰기 중 복사 복사본을 제공하지만 수정된 로더를 사용합니다.현장에서메인 로더로 설치된 경우와 같습니다(그것은감옥에 관한 한).

(TrueOS는 루트에 대한 큰 데이터 세트를 보유하고 , 및 와 같은 /usr별도의 데이터 세트에 대한 지점을 효과적으로 잘라내는 방법을 보여주었습니다 .)/var/*/tmp/usr/{obj,src,ports,jails,home}

이 접근 방식을 사용하면 jail매뉴얼 페이지와 14장 에 설명된 긴 프로세스가 필요하지 않습니다.FreeBSD 핸드북, 감옥의 루트 디렉터리 내에 운영 체제의 전체 복사본을 구축하는 것과 관련된 감옥 디렉터리 트리를 설정합니다. ZFS 복제본은 실제 루트 데이터 세트를 원본으로 사용하는 빠른 쓰기 중 복사입니다.

관련 정보