C 프로그램에서 간단한 ELF 파일로 작업해야합니다. 외부 라이브러리를 사용할 수 없지만 elf.h
을 사용할 수 있습니다.ELF 파일 작업
은의 소스에 대한 hello.o 파일을 보자 :
int Hello() { return 3; }
내가 ohter의 C 프로그램은
hello.o
파일을 필요에
Hello
에 액세스 할 수있는 방법
?
이렇게하면 mmap
또는 sth를 사용하여 메모리에로드해야합니다. 마지막에는 훨씬 복잡한 ELF 파일로 작업해야하지만 지금은 시작하는 방법을 모른다.
업데이트 : 학습 목적으로 사용했기 때문에이 방법으로 설명해야합니다. 전체 문제는 내가 설명한 것보다 더 복잡합니다.
int HelloFromElfO(const char* helloFile);
helloFile
에서 구현 Hello
기능을 수행하는 것입니다 :이 질문에 대한
전 대답을 원하지 않습니다. 나는 어떤 코드도 필요 없다. 나는 뭔가를 시작할 필요가있다.
필자는 ELF 파일 구조에 대한 기본 지식을 가지고 있지만, 파서 또는 sth없이 바이너리 파일로 C에서 어떻게 작동하는지 전혀 모른다.
UPDATE2 : 좋아, readelf와 같은 앱은 입니다. 매우입니다. 어쩌면 내가이 방법을 시도해 볼 수도 있습니다. 다시 말하십시오. hello.o
은 ptr
에 매핑됩니다. Hello
함수에 대한 포인터를 얻으려면 어떻게해야합니까?
hello.o
에서 구조화 된 데이터를 얻으려면 어떻게해야합니까? 내 말은, 순수한 바이트가 아니라 함께 작업 할 수있는 것입니다.
당신은 단순히 공유 객체들을 만들고, 그리고 동적 로더에 의존하는 옵션을 가지고 있지 않은거야? – NPE
@npe 이것은 학문적 인 문제입니다. 나는 그렇게 할 필요가있다. – Ari
'readelf' 명령과 그 소스 코드를 보면서 .o 파일에서 필요한 정보를 추출하는 방법을 보여 주어야합니다. 아마도'dlsym' 소스를 보아라. 이것은 당신이 원하는대로하는 것이지만, C 라이브러리에서는 가능하다. – teppic