[Mac OS] 맥의 OS X에서 readelf와 같은 binary utility 사용하기

by Blogger 하얀쿠아
2016. 4. 4. 01:39 소프트웨어 Note

GNU 바이너리 유틸리티 - GNU Binutils 

맥의 OS X건, 리눅스 건, 개발을 하다 보면 디버깅 할 일이 생기게 마련이다.

디버깅시 유용한 도구중 하나가 GNU 바이너리 유틸리티(GNU Binutils)이다.

GNU 바이너리 유틸리티는 여러 종류의 오브젝트 파일 형식들을 조작하기 위한 프로그래밍 도구 모음인데, 이들은 일반적으로 GCC, make, GDB와 함께 사용하게 된다.


as - 어셈블러

ld - 링커

addr2line - 주소를 파일과 줄로 바꾼다.

ar - 아카이브(압축) 파일을 만들고, 수정하고, 해제한다.

c++filt - 맹글링된 C++ 심볼들을 원래대로 되돌린다.

nm - 오브젝트 파일의 심볼을 출력한다.

objcopy - 오브젝트 파일을 복사한다.

objdump - 오브젝트 파일에 대한 정보를 출력한다.

ranlib - 아카이브(압축)를 위한 색인을 만든다.

readelf - ELF 파일의 내용을 출력한다.

size - 전체와 부분의 크기를 출력한다.

strings - 표시할 수 있는 문자열을 출력한다.

strip - 오브젝트 파일로부터 심볼을 제거한다.

gprof - 프로파일러


GNU Binutils에 대해 좀더 자세히 알고 싶다면, 아래 링크를 통해 공식 홈페이지를 방문해보길 바란다.


GNU Binutils Homepage : http://www.gnu.org/software/binutils/binutils.html


또한, 다른 기종에 GNU Binutils를 포팅할 계획이라면, 아래 가이드가 도움이 될 것이다.


binutils proting guide : https://sourceware.org/binutils/binutils-porting-guide.txt 


binutils-porting-guide.txt



MAC에서 readelf 설치하기


나는 이 여러가지 도구중 symbol offset, relocation table 등의 정보등을 볼 때 사용하는 readelf 가 필요했는데,

OS X에는 기본적으로 포함되어 있지 않다. (당연한건가?)


OS X 에서 readelf와 유사한 도구가 있나 찾아보았지만 없었다.

그러나 readelf 를 직접 설치해서 사용하는 방법이 있었다.

아래 두가지 방법중 하나를 사용한다.


참고로 readelf 를 사용하는 예시화면을 보여주면 아래와 같다.

보면 대충 기능이 짐작갈 것이다.

readelf -r app


Relocation section '.rel.dyn' at offset 0x5ec contains 2 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
08049d58  00001706 R_386_GLOB_DAT    00000000   __gmon_start__
08049d60  00000305 R_386_COPY        08049d60   _ZSt4cout

Relocation section '.rel.plt' at offset 0x5fc contains 13 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
08049d24  00000107 R_386_JUMP_SLOT   0804868c   print
08049d28  00000207 R_386_JUMP_SLOT   0804869c   _ZNSt8ios_base4InitC1E
08049d2c  00000507 R_386_JUMP_SLOT   080486ac   _ZStlsISt11char_traits
08049d30  00000607 R_386_JUMP_SLOT   080486bc   _ZNSolsEPFRSoS_E
08049d34  00000707 R_386_JUMP_SLOT   08048664   _init
08049d38  00000807 R_386_JUMP_SLOT   080486dc   sleep
08049d3c  00000907 R_386_JUMP_SLOT   080486ec   _ZNKSsixEj
08049d40  00000b07 R_386_JUMP_SLOT   080486fc   _ZNKSs4sizeEv
08049d44  00000c07 R_386_JUMP_SLOT   0804870c   __libc_start_main
08049d48  00000d07 R_386_JUMP_SLOT   08048ae4   _fini
08049d4c  00001307 R_386_JUMP_SLOT   0804872c   _ZSt4endlIcSt11char_tr
08049d50  00001507 R_386_JUMP_SLOT   0804873c   __gxx_personality_v0
08049d54  00001607 R_386_JUMP_SLOT   0804874c   _ZNSt8ios_base4InitD1E

1. mac ports 사용하는 방법

$ port install binutils



2. home brew 사용하는 방법

$ brew install binutils




homebrew 를 통해서 binutils를 설치한다


나는 home brew를 사용하는 방법을 선택했다.


그러나 설치 후 사용을 하려고 하면 커맨드가 없다고 나오는 것을 보고 당황했는데, 알고보니 리눅스와는 실행파일 이름이 달랐다.

각 커맨드 앞에 'g' 가 prefix 로 붙는다는 것이다.

즉, 'greadelf' 와 같이 g를 붙여서 사용하면 된다.


즐거운 디버깅이 되길.

이 댓글을 비밀 댓글로

삼성 GearS2를 위한 타이젠 앱 개발하기 : [1] SDK설치 (맥 OS X)

by Blogger 하얀쿠아
2016. 4. 2. 11:32 소프트웨어 Note/Tizen





삼성에서 출시한 스마트워치 GearS2 에서 사용할 앱을 개발하는 과정을 풀어내 봅니다.



1. SDK 설치


특정 플랫폼에서 간단하게 앱을 개발해 보려면 해당 플랫폼이 제공하는 SDK를 사용하는게 통상적인 쉬운 방법이죠.

2016년 현재 GearS2는 Tizen 2.3.1 Wearable 플랫폼 기반으로 동작합니다.


SDK를 다운로드 받고, 설치하려면 타이젠 개발자 사이트 ( http://developer.tizen.org ) 를 방문합니다.



바로 가는 링크는 : https://developer.tizen.org/ko/development/tools/download?langredirect=1





Tizen개발자 사이트의 다운로드 페이지에 가보니깐 Tizen 2.4 Rev4 SDK가 2016/3/4 부터 배포시작했다고 되어있네요.

이 SDK를 사용하면 2.3, 2.3.1, 2.4 세개 버전의 Tizen 앱을 개발할 수 있다고 합니다.

통합 SDK 네요.







Installer를 받아서 설치를 시작하면 되는데요,

저는 맥북의 OSX에서 개발을 진행할 것이므로, Mac OS X®(Intel)를 받았습니다.


Installer를 실행해보면 아래와 같이 Installer 화면이 표시됩니다. 

Installation Location으로 설치 경로를 원하는 곳으로 지정한 후, 우측에 화살표 아이콘을 누르면 설치가 진행됩니다.

물론 Software License Agreement는 동의에 체크를 해주어야 해요.



Installer 실행 화면


설치 진행중  설치 완료





설치가 완료 되고 나면 'Tizen Update Manager' 가 실행됩니다.

이게 뭔지 보니깐, Android의 'SDK Manager'와 유사한 것이네요.


설치된 SDK 에서 각 Tizen버전별로 필요한 몇가지 추가 패키지들을 다운받고 설치해주는 도구입니다.

저는 Tizen 2.3.1 Wearable 을 설치했습니다.

GearS2 에서 사용할 앱을 개발하는 것이니깐요!






설치가 진행되는 모습입니다.

설치가 완료되고 저는 Extras -> Wearable Extension for 2.3.1 을 추가로 설치했습니다.

설명을 읽어보니 GearS2 가 Android와 연동되었을 때 data exchange 를 위한 Samsung Accessory Service 관련된 추가적인 SDK 인 듯 합니다.

필요할 것 같네요. 일단 설치해놓습니다.



설치가 완료 된 후 설치된 항목들을 확인해봅니다.


Tizen IDE-2.4

Emulator Manager

Tizen Web simulator

Update Manager

Dynamic Analyzer

SDK Un-installer 


이렇게 6개의 항목들이 보입니다.

각각에 대해서는 차차 알아보기로 하고, 당장 Hello world라도 띄워보고 싶군요.





Hello World앱을 구현해보기 위해서 일단! Tizen IDE-2.4 를 실행을 해보겠습니다.

아래와 같이 Eclipse를 기반으로 한  Tizen SDK IDE 환경이 실행되는데요.

Android SDK 혹은 기타 Eclipse를 기반으로 한 개발환경을 사용해보셨던 개발자분들이라면 금방 적응 할 수 있을 것 같습니다.


참고로 저는 OS X El Capitan 기반에서 개발을 진행하고 있습니다.



다음 포스팅에서는, SDK를 이용해서 실제 GearS2에 Hello world앱을 올려보는 과정을 설명하겠습니다.

이 댓글을 비밀 댓글로