본문 바로가기
코스웨어/15년 스마트컨트롤러

20151202 / ARM_5, winsock_3- 남수진

by 알 수 없는 사용자 2015. 12. 2.
728x90
반응형

ARM

  • Symbol
    • link 후 자신만의 주소를 갖게 된는 단위
  • object 파일
    • 정확한 변수 주소 정보 없이 심볼 정보만 존재
    • link 후 실행파일이 만들어졌을 때 변수의 주소가 결정된다
      • 이 때 변수의 주소는 Symbol table을 참조하여 결정된다
    • 보안이 걸린다
      • =base 주소가 실행할 때마다 바뀐다
      • C++의 가상 함수와 비슷
  • 변수 분류
    • symbol/ non-symbol
      • symbol
        • 직접적인 주소를 가진다
        • 코드 내 어디에서든 접근 가능
      • non-symbol
        • ebp 기반의 상대적 위치로 접근한다
        • esp 범위를 벗어나면 변수 내용이 보호받지 못한다
    • 임베디드 메모리 구조
      • RO(Read Only)
        • .text : 코드
        • .constdata : 상수
      • RW
        • .data : 초기값이 0이 아닌 static이나 전역변수
      • ZI
        • .bss : 초기값이 0인 static이나 전역변수
  • ELF 구조(Executable and Linkng Format)
    • .obj(.o) 파일 구조 중 하나
    • 컴파일러 -c 옵션: link하지 말라는 뜻
    • readelf 명령어로 확인

Image(124)

Image(125)

Image(126)

    • fromelf 명령어로 elf 파일 구조 확인

Image(127)

========================================================================
** ELF Header Information
    File Name: main.o
    Machine class: ELFCLASS32 (32-bit)
    Data encoding: ELFDATA2LSB (Little endian)
    Header version: EV_CURRENT (Current version)
    File Type: ET_REL (Relocatable object) (1)
    Machine: EM_ARM (ARM)
    Entry offset (in SHF_ENTRYSECT section): 0x00000000
    Flags: None (0x02000000)
    EABI conformance : ARM EABI Version 2.
    Built with
    Thumb C Compiler, ADS1.2 [Build 848]
    Header size: 52 bytes (0x34)
    Program header entry size: 32 bytes (0x20)
    Section header entry size: 40 bytes (0x28)
    Program header entries: 0
    Section header entries: 8
    Program header offset: 0 (0x00000000)
    Section header offset: 620 (0x0000026c)
    Section header string table index: 1
========================================================================
** Section #1 '.shstrtab' (SHT_STRTAB)
    Size   : 88 bytes
** Section #2 '.symtab' (SHT_SYMTAB)
    Size   : 160 bytes
    String table '.strtab'
    Last local symbol no. 5
** Section #3 '.strtab' (SHT_STRTAB)
    Size   : 151 bytes
** Section #4 '.comment' (SHT_PROGBITS)
    Size   : 88 bytes
** Section #5 '.text' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
    Size   : 4 bytes (alignment 4)
    main
    $t
    .text
        0x00000000:    2000        .       MOV      r0,#0
        0x00000002:    4770        pG      BX       r14
** Section #6 '.debug_frame$$$.text' (SHT_PROGBITS)
    Size   : 60 bytes
** Section #7 '.rel.debug_frame$$$.text' (SHT_REL)
    Size   : 16 bytes
    Symbol table '.symtab'
    2 relocations applied to section #6 '.debug_frame$$$.text'

---------------------------------------------------------

Winsock

 

  • Win32 프로그램
    • OS에서 던져주는 message에 의해서 구동
    • WinMain에서 폴링 방식으로 message 입력을 감시
  • 리눅스에서 select()를 사용
    • select()를 이용해 폴링 방식으로 입력을 감시하는 방법
      • 폴링 방식 인터럽트와 비슷
    • 각 소켓에 대한 입력을 동시처리하지 않도록 하기 위해서
      • 다른 소켓에 입력 메시지를 전송해야하는데 접속 인원이 많아질수록 관리하기 힘들어진다
  • 스레드의 특징
    • 메인 프로세스가 죽으면 안의 스레드도 죽는다
    • 메인 프로세스의 전역 변수를 공유할 수 있다 -> 데이터 공유가 편리
    • 프로세스를 만드는 것보다 메모리 소모를 더 줄일 수 있다
  • 스레드 채팅 프로그램
    • main 함수

Image(128)

728x90