2010-06-25 4 views
0

현재 목표 (배경 : 커널 : 제한 사항) 때문에 여러 모듈 (기본적으로 ELF 객체 파일)을 기본 실행 파일에 링크해야하는 시점에 있습니다. , ARM 아키텍처를 목표로 함). 다른 타겟 (x86)에서는 이러한 오브젝트 파일이 런타임에로드되고 그 안에있는 특정 함수가 호출됩니다. 종료시 다른 함수가 호출됩니다. 이 두 함수는 모두 심볼로 커널에 노출되어 있으며이 함수는 모두 잘 작동합니다.여러 객체 파일의 .ctors와 유사한 목록 만들기

오브젝트 파일이 정적으로 링크되어 있지만 말하자면 커널이 자신의 존재를 "감지"할 방법이 없으므로 커널을 하드 코딩하지 않고 init/fini 기능이 있는지 커널에게 알리는 방법이 필요합니다. 존재를 커널에 - 확장 할 수 있어야합니다. 이 문제에 대한 해결책은 모든 init/fini 함수 포인터를 자신의 섹션에 넣는 것이라고 생각했습니다. 의사와 .dtors에서 기대하는 것과 같은 방식으로 관련 시간에 호출합니다.

그들은 실제로 호출 될 때까지 특정 지원 (특히 스레드 및 메모리 관리, 관심이 있다면)이 필요하기 때문에 실제로는 .ctors에 들어갈 수 없습니다.

임의의 함수 포인터를 특정 섹션에 넣는 가장 좋은 방법은 무엇입니까? 더 나은 것은 - 섹션에 임의의 데이터를 주입하는 것이 가능하므로 모듈 이름 (기본적으로 함수 포인터가 아닌 struct)을 저장할 수도 있습니다. arm-elf를 타겟으로하는 GCC 사용하기.

답변

0

GCC의 속성은 섹션을 지정하는 데 사용할 수 있습니다, 나는 여전히 절에서 하나 개의 구조로 결국이 속성을 사용하기보다는 15

__attribute__((section("foobar"))) 
+0

또는 그래서이 편집에서 예상 한 것입니다. 바이너리를 objdump하여 모든 것이 어디로 가는지 볼 수 있습니다 ... –