2017-05-21 22 views
1

특정 함수 및 변수의 주소 및/또는 크기를 얻기 위해 objdump을 ELF에서 수행해야합니다. 나중에 수행 할 작업을 위해 objcopy을 다른 형식으로 변환해야합니다. 특히 첫 번째 부분에서는 objdump의 결과에서 수행 된 작업 중 일부가 약간 복잡하기 때문에이를 수행하기 위해 작은 C++ 응용 프로그램을 만들었습니다. 작동하지만 현재는 gcc의 objdumpobjdopy에 직접 매개 변수를 포함하여 system 호출이 포함되어 있습니다.objdump 및 objcopy를 c/C++ 라이브러리로 사용

내가이 접근 방식을 좋아하지 않는 데는 여러 가지 이유가 있습니다. 그 중 하나는 내가 PC에있는 사용자에게 의존하거나 자신의 실행 파일로 배포하고이를 일종의 동적 파일로 취급해야한다는 것입니다 라이브러리,하지만 실행 파일의 형태로, 나는 어느 쪽이든을 좋아하지 않는다.

내 질문에, (gcc?) 라이브러리의 일부 양식 (동일한 방법으로 동일한 작업을 수행하기 위해 정적으로 링크 할 수 있음)이 있습니까? 난 정말 오히려 가까운 gcc를 같이 뭔가를 사용하고 싶습니다, 특히 gcc와의 호환성에 관해서는 입력 및 동일한 출력을 제공하는 파일에 관해서는, 내가 이미 내 자신의 실행 파일 버전의 그런 일을하고있다.

+0

해결하려는 실제 문제는 무엇입니까? * 왜 * 당신은 이것을합니까? –

+0

그래서'objdump/objcpy'의 부분을 다시 작성하고 싶습니까? 그렇다면 아마도 [libbfd] (ftp://ftp.gnu.org/old-gnu/Manuals/bfd-2.9.1/html_mono/bfd.html)를 보길 원할 것입니다. – kaylum

+0

@JesperJuhl 나는 이것이 토론과 관련이 없지만 당신이 묻는 것처럼 나는 대답 할 것입니다. 이는 응용 프로그램을 시작 (또는 디버깅)하기 전에 몇 가지 초기 단계를 수행해야하는 임베디드 (베어 메탈) 프로젝트에서 작업하기 때문입니다. 특히, 메인 MCU에 연결된 외부 메모리에 바이너리의 일부를로드해야합니다. 이것은 MCU의 RAM 내부에 일시적으로 배치 된 로더에 의해 가장 쉽게 수행됩니다. 그러나 타겟 애플리케이션을 (내부 메모리와 외부 메모리 모두에)로드하는 PC는 로더 함수의 위치를 ​​알아야하므로 'objdump'가 필요합니다. –

답변

3

obj * 도구는 모두 BFD library을 기반으로합니다. objdump가 그 일을 어떻게 복사 하는지를 보면, 자신의 코드에서 똑같이 할 수 있어야합니다.

당신이 할 수있는 또 다른 일은 objdump와 친구들의 코드를 자신의 프로그램에 복사하는 것입니다. 그것은 오픈 소스이고 당신은 그것을 할 수 있습니다. 당신이 필요로하는 것은 당신 자신의 프로그램을 GPL로 만드는 것이고, 그것은 어쨌든 BFD 라이브러리를 사용해야만합니다.

2

프로그램 objdump와 objcopy는 gcc의 일부가 아니며 binutils의 일부입니다. 말하자면 : libbfd와 libopcodes는 binutils의 일부이기도하며 여러분이 사용할 수있는 기능을 포함하고 있습니다.

+0

감사합니다. 나는 그것들을 살펴볼 것입니다. –