2009-04-27 4 views
6

elf 파일에 새 플래그를 추가하고 싶습니다. 이 플래그는 프로세스 설명자의 커널에 을 사용할 수 있어야합니다. 내 첫 번째 아이디어는 libelf를 사용하는 것이지만 불행히도 우분투에는 버그가있는 것 같습니다. Elfedit은 아마도 훌륭한 툴이었을 것입니다. 그러나 Linux, 특히 우분투 버전을 찾지 못했습니다.elf 파일 수정

누군가 다른 유용한 도구가 있다면 저에게 제안 할 수 있는지 궁금합니다 elf 파일에 맞춤 플래그를 추가 하시겠습니까?

많은 도움을 주셔서 감사합니다.

+0

libelf에서 어떤 버그가 발생 했습니까? –

+0

파일에 type.c가 포함되어 있음 : 3 : /usr/include/libelf.h:98 : 오류 : 'than64_t'앞에 예상 지정자 - 목록 ... 더 많은 내용은 https ://bugs.launchpad.net/ubuntu/+s...ls/+bug/201078 –

답변

2

새 플래그를 사용하도록 커널을 수정할 수있는 사람은 ELF 라이브러리에 플래그를 추가하는 방법을 묻지 않을 것입니다.

그럼 커널에이 새 플래그를 어떻게 사용할 계획입니까? 깃발의 목적은 무엇입니까?

표준 libelf에 추가 했으므로 Ubuntu의 버그를 수정할 수 없으며 그렇게했음을 알려줄 수는 없습니다 (수정본을 제공 할 수있게 될 것입니다. 체인 업).

+0

예, 정말로 옳습니다. 적절한 커널 해커라면 아마도 간단한 작업 일 것입니다. 불행하게도, 저는 커널에 대한 실제적인 작업을 시작했습니다. 기본적으로 ELF 파일에 플래그를 지정하여 응용 프로그램에 "특별한 대우"가 필요하다는 것을 커널에 알려줍니다. 이 특수 처리는 컨텍스트 전환 중에 발생해야하며 ELF 파일에서 전환 된 작업에이 사용자 정의 플래그가 있는지 알고 싶습니다. 다시 말해서, 나는 2 개의 작업을 가진다. (1) 해당 실행 가능 플래그에 커스텀 플래그를 추가한다. (2)이 커스텀 플래그를 커널이 사용할 수있게 만든다. –

1

ELFIO library에서 확인하십시오. WriteObj 및 Writer 예제를 포함합니다. 라이브러리를 사용하면 ELF 바이너리 파일을 생성 및/또는 수정할 수 있습니다.

+0

나는 라이브러리가 정말 마음에 든다. 그리고 마지막 날을 작업했다. 도서관). lib와 crashing (lol)이 있지만 템플릿과 매크로를 가진 모든 소스를 변환 (일명 선언과 정의로 나누기)했습니다. 글쎄, 자신이 "진짜"라이브러리를 만들 수 있다고 생각해도 될까요? – lama12345

0

(오래된 질문하지만, 참조를 위해 내 자신의 경험을 바탕으로 답을 쓰고 있지만)

나는, 메모리 구조체의 ELF 파일을 읽고 당신의 메모리 구조체와 플래그 및로드 프로세스 메모리를 변경하는 것이 좋습니다. 이 방법은 버그 수정에 비해 덜 efford 필요합니다. 시작하려면 엘프, 프로그램 헤더, 섹션 헤더 구조체에 대해 elf.c 파일을 확인하십시오. elf, program, section에 대해 세 개의 구조체 멤버가 있어야하는 구조체의 파일 헤더를 읽을 수 있습니다. 엘프 헤더에서 구조체를 읽으십시오. 그런 다음 elf 헤더에 주어진 오프셋에서 프로그램 헤더를 읽습니다 (모든 프로그램 헤더에 대해 반복적으로). 같은 방법으로 섹션 헤더를 통해 모든 섹션을 읽을 수 있습니다. 구조체에 3 개의 헤더 구조체를 캡슐화하면 다른 구조체 멤버에서 필요한 데이터를 갖도록 oppertunity를 부여 할 수도 있습니다.