Be myself :: elf DWARF관련..

달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

elf DWARF관련..

Reversing 2015. 5. 8. 11:48

c++에서 익셉션이 발생했을 때 (try~catch 구문에서) stack unwinding 과정을 거쳐 catch문으로 eip가 이동해 핸들러가 실행되게 되는데, 익셉션이 발생한 시점에서 바로 예외 핸들러가 실행되게 되면, 스택이나 레지스터가 제대로 세팅된 상태가 아니기 때문에 에러가 난다. 이를 방지하기 위해 DWARF(elf 디버깅 정보 저장)에 byte code로 eh_frame섹션에 저장되어 있다. 이 byte code들은 libc의 DWARF 인터프리터에 의해 실행된다. 

DWARF 정보를 알기 위해 readelf -w [elf file name]과 같이 입력하면 된다.

flack3r@ubuntu:~/prob$ readelf -w echo

Contents of the .eh_frame section:


00000000 0000000000000014 00000000 CIE

  Version:               1

  Augmentation:          "zR"

  Code alignment factor: 1

  Data alignment factor: -8

  Return address column: 16

  Augmentation data:     1b


  DW_CFA_def_cfa: r7 (rsp) ofs 8

  DW_CFA_offset: r16 (rip) at cfa-8

  DW_CFA_nop

  DW_CFA_nop


00000018 0000000000000024 0000001c FDE cie=00000000 pc=0000000000400610..00000000004006b0

  DW_CFA_def_cfa_offset: 16

  DW_CFA_advance_loc: 6 to 0000000000400616

  DW_CFA_def_cfa_offset: 24

  DW_CFA_advance_loc: 10 to 0000000000400620

  DW_CFA_def_cfa_expression (DW_OP_breg7 (rsp): 8; DW_OP_breg16 (rip): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit11; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus)

  DW_CFA_nop

  DW_CFA_nop

  DW_CFA_nop

  DW_CFA_nop


00000040 000000000000001c 00000044 FDE cie=00000000 pc=0000000000400794..00000000004007c0

  DW_CFA_advance_loc: 1 to 0000000000400795

  DW_CFA_def_cfa_offset: 16

  DW_CFA_offset: r6 (rbp) at cfa-16

  DW_CFA_advance_loc: 3 to 0000000000400798

  DW_CFA_def_cfa_register: r6 (rbp)

  DW_CFA_advance_loc: 39 to 00000000004007bf

  DW_CFA_def_cfa: r7 (rsp) ofs 8

  DW_CFA_nop

  DW_CFA_nop

  DW_CFA_nop


여기서 CIE는 익셉션이 발생했을 때 공통적으로 실행되는 부분이고 FDE는 특정 예외 처리 부분이라고 한다.

DW_CFA_val_expression 에 대한 설명은 http://www.dwarfstd.org/doc/040408.1.html 에 있다.


'Reversing' 카테고리의 다른 글

vmware 디버깅  (0) 2015.01.28
peda 설치법  (0) 2014.10.17
지뢰 찾기 핵  (1) 2014.07.29
치트엔진을 활용한 환세취호전 핵  (2) 2014.07.28
DLL Injection  (1) 2014.05.17
Posted by flack3r
|