카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/08

asm 64bit Sections Labels "Start" Label Global 정리

Sections
    • 모든 x86_64 어셈블리 파일에는 ".data"섹션, ".bss"섹션 및 ".text"섹션의 세 섹션이 있다.
    • 데이터 섹션은 초기화 된 데이터가 컴파일되기 전에 정의되는 곳이다.
    • bss 섹션은 나중에 사용할 수 있도록 초기화 하지 않은 데이터가 할당되는 섹션이다.(0으로 초기화 된 값은 여기에 위치한다)
    • 텍스트 섹션은 실제 코드가 있다.

Labels

    • "레이블"은 코드의 일부에 레이블을 지정하는 데 사용된다.
    • 컴파일시 컴파일러는 레이블이 메모리에 있을 위치를 계산한다.
    • 나중에 레이블의 이름이 사용될 때마다 컴파일러가 해당 이름을 메모리의 위치로 대체한다.

“Start” Label

    • "_start"레이블은 모든 프로그램에 필수적이다. (예전 이 사실을 몰라다. 이 부분 때문에 아마 임베디드 쪽에 관심을 같게 된 것으로 보인다.)
    • 프로그램을 컴파일하고 나중에 실행하면 "_start"위치에서 먼저 실행 한다.
    • 링커가 "_start"를 찾을 수 없으면 오류가 발생한다.

Global
    • 링커가 레이블의 주소를 알 수있게 하려면 "global"이라는 단어를 사용한다.
    • 생성 된 오브젝트 파일에는 "global"으로 선언 된 모든 레이블에 대한 링크가 포함된다.
    • 현재 예제에서 사용되는 코드가 제대로 링크 되어야 하므로 "_start"를 전역으로 선언 한다.

댓글 없음:

댓글 쓰기