'objdump'에 해당되는 글 2건

  1. 2009.05.26 binutils - ar, nm, objdump
  2. 2009.02.23 elf format 분석용 binutils - objdump, readelf, ldd 4
Programming/C Win32 MFC2009. 5. 26. 23:23
libjpeg.a 라는 녀석을 발견하고는 어떻게 생겼나 궁금증이 생겼다.

$ ll libjpeg.a
-rw-r--r-- 1 root root 166012 2007-10-01 23:36 libjpeg.a

$ file libjpeg.a
libjpeg.a: current ar archive

$ nm -A libjpeg.a
libjpeg.a:jcapimin.o:00000330 T jpeg_CreateCompress
libjpeg.a:jcapimin.o:         U jpeg_abort
libjpeg.a:jcapistd.o:         U jinit_compress_master
libjpeg.a:jcapistd.o:000001b0 T jpeg_start_compress
libjpeg.a:jctrans.o:000000c0 t compress_output
libjpeg.a:jctrans.o:         U jinit_c_master_control
libjpeg.a:jcparam.o:000008a0 t add_huff_table
libjpeg.a:jcparam.o:000000e2 r bits_ac_chrominance.3846
... 파일별로 반복
'
U,T,r 등은 symbol type 이라고 하며,
위의 U는 Undefined 을, T는 Text section(code) 을 의미한다.



$ ar -t libjpeg.a
jcapimin.o
jcapistd.o
jctrans.o
jcparam.o
jdatadst.o
...


$ objdump -x libjpeg.a
In archive libjpeg.a:

jcapimin.o:     file format elf32-i386
rw-r--r-- 0/0   2296 Oct  1 23:36 2007 jcapimin.o
architecture: i386, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x00000000

Sections:
SYMBOL TABLE:
RELOCATION RECORDS FOR [.text]:
... 파일별로 반복



mangling은 컴파일러에서 이름이 중복되지 않도록 독특한 이름을 지어주는 것으로
C++에서 overloading을 지원하기 하는데 사용되기도 한다고 한다. [링크 : http://rubyeye.kr/]

int _cdecl    f (int x) { return 0; }	//	_f
int _stdcall  g (int y) { return 0; }	//	_g@4
int _fastcall h (int z) { return 0; }	//	@h@4

위키피디아에서 참조한 녀석으로 MS 컴파일러가 C언어 맹글링하는 방식의 예제이다.
[링크 : http://en.wikipedia.org/wiki/Name_mangling]

그리고 이러한 녀석을 원래이름으로 돌려주는 유틸리티로 c++filt가 존재한다.
[참고 : http://kldp.org/node/68410]


'Programming > C Win32 MFC' 카테고리의 다른 글

indent style  (0) 2009.06.09
C99 구조체 초기화 하기  (0) 2009.05.28
신기한 코드 사이즈  (0) 2009.05.19
double형을 int 형으로 출력하면?  (0) 2009.05.15
전처리기를 이용한 디버깅용 선언문(#define)  (0) 2009.05.15
Posted by 구차니
Linux2009. 2. 23. 17:34
카페에서 우연히 주워들은 프로그램이름인데..
검색해보니 readelf가 조금 더 분석에 강력하다고 한다.

#include <stdio.h>

void main()
{
        unsigned char b = 0xF1;
        unsigned short c = 0xF1;
        unsigned int d = 0xF1;

        printf("%X\n",b);
        printf("%X\n",c);
        printf("%X\n",d);
}


위의 소스를 분석한 내용이다. 내용이 많으므로 눌러서 보기바람.

$ gcc -S test.c
$ more test.s

$ gcc -Wl,-Map -Wl,test.map test.c
$ more test.map

$ gcc test.c
$ objdump -x a.out

$ readelf -a a.out

$ ldd a.out

솔찍히 머가 먼지 모르겠다.

덧 : 생각해보니 이것저것 생각나는거 다 붙이다 보니 제목이 안 맞네 ㄱ- 바꿔야 하나?

'Linux' 카테고리의 다른 글

rdate - get the time via the network  (0) 2009.03.02
Visuel Hexdiff - console based visual hex diff  (4) 2009.02.24
ln의 반대말은? - unlink  (0) 2009.02.23
sleep 함수들  (0) 2009.02.22
ls 와 친해지기 - 디렉토리만 봅시다!  (0) 2009.02.22
Posted by 구차니