이제 심볼이란 것이 무엇인지 정확이 알았으니…

IL Code에 왜 심볼 정보가 포함되는지 알아 봐야죠??

저번 시간에 Native Code에 왜 심볼정보가 포함되지 않는지를 봤었죠??

(못봤으면 참고: http://moltak.net/entry/Symbol이란)

간단히 설명하자면 심볼은 linker가 쓰는 것으로 binary가 생성되면서 심볼정보는 다 지운다고 했었습니다.

(정확히 말하면 모두 주소로 변환)

그래서 C언어를 어셈으로 보면 알아 먹기가 힘들었죠.

하지만 IL Code는 안에 심볼정보가 포함되어 있기 때문에 원래 짠 코드 그대로 볼 수 있습니다.

 

(참고: 쩔철이네 블로그)

 

처음 심볼이 뭔지 제대로 알지도 못할 때 진 MVP인 철에게 물었습니다.

어째서 IL코드에는 심볼정보가 포함되는 거야? 하구요. 철은 범용적인 것 보다는 .NET에 특화된 말을 했습니다.

(철이 말: 즉.. .Net에서는 이런 "언어간 상호 운영성"을 위해서 CLS가 존재하고, CLR은 이에 기인하여 생성된 IL코드를 기반으로 명령을 수행한다는 것이지요..

   

여기서 서로 다른 언어에서 동일한 Type이나 기능이지만 언어간에 서로 다른 형태의 Keyword를 사용할 수 있기 때문에..

IL코드의 생성이 필요하게 되었고, 이렇게 서로 다른 Keyword를 사용하는 언어간 동일한 동작을 보장하기 위해 어떤 동일한 명령으로 변환시키기 위해서 "IL코드에 심볼들이 포함 될 수 밖에 없었다."라는 것이 제가 내린 결론입니다.)

 

네…. 맞는 말인 것 같지만… 너무 복잡하네요. 쉽게 풀어서 설명해보죠.

 

다음 내용들은 ezbeat(http://ezbeat.tistory.com/182)블로그를 참고했습니다.

(모르는게 나오면 지인들의 힘을 빌리는 것이 참…. 편하고 좋더군요 ㅋㅋ)

 

자자 이제 정리해보죠. 사실 참 쉬운 것들이었습니다.

제가 자주 사용하는 C, C++은 Native Code를 생성해 내게 됩니다. 이게 뭐냐 하면 하드웨어에 종속되어 있는 코드입니다. 바로 어셈블리어죠.

위에 있는 그림처럼 처음 보는 사람은 절대 그 내용을 알 수 없는 내용들이 가득 차게 됩니다.

 

하지만 .NET, Java 같은 경우는 좀 다릅니다.

이것들이 만드는 코드는 하드웨어에 종속되어 있는 코드가 아닌 플랫폼에 종속된 코드를 만들게 됩니다. 바로 IL 코드입니다. 여기서 플랫폼이란 .NET Framework나 JVM이 되겠네요.

그리고 이 플랫폼들을 거쳐서 Native Code가 튀어나오게 되는 것입니다. 그리고 이 언어들은 한줄 한줄씩 컴파일되면서 실행되는 JIT(Just In Time) 컴파일을 하게 됩니다.

실행이 되는 순간에 동적으로 컴파일이 되어야 한다는 것입니다.

근데 컴파일을 하려면 결국 무엇이 필요하냐 면… 네 맞습니다. 바로 Symbol이 필요하죠. 그래서 IL 코드에는 Symbol 정보가 필요합니다.

자 이제 IL 코드에는 왜 심볼정보가 필요한지 아시겠죠??

 

간단히 말하자면… 실행이 되어야 하니까 필요합니다. 하하하하 쉽네요. ㅋㅋ

 

 

Bloger: moltak.net

'Programming > 이것저것' 카테고리의 다른 글

어셈블리어 점프 명령어  (0) 2010.04.29
Symbol  (0) 2010.04.24
초기화 하지 않은 메모리  (0) 2010.04.16
[Design Pattern] Singleton Pattern  (2) 2010.04.16
typeid 연산자  (1) 2010.04.15

+ Recent posts