<div style="text-align: left">c 프로그래밍 공부 어렵죠.</div> <div style="text-align: left">어려운 이유가 저 개인적으로는 기계가 처리하는 방식에 맞추어 <span style="font-size: 9pt; line-height: 1.5">사람의 사고를</span><span style="font-size: 9pt; line-height: 1.5"> 재 구성 하는 과정 때문이라 생각됩니다.</span></div> <div style="text-align: left"><span style="font-size: 9pt; line-height: 1.5">컴퓨터 프로그램은 단어 그대로 컴퓨터가 처리해야할 일을 순서대로 나열한 것입니다.</span></div> <div style="text-align: left"><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div style="text-align: left">c 프로그램을 빨리 배우는 방법중의 하나가 코딩을 하고 디버깅을 해보는 것입니다. <span style="font-size: 9pt; line-height: 1.5">vc는 디버깅 모드에서 어셈블리 코드를 볼 수 있는데 이것이 프로그램을 이해하는 데 많은 도움이 됩니다.</span></div> <div style="text-align: left"><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div style="text-align: left"><span style="font-size: 9pt; line-height: 1.5">c언어에서 포인터는 아주 중요하죠. 포인터 변수는 장치, 코드, 메모리 등의 주소를 지정할 수 있는데 함수 포인터는 함수의 실행 코드를 저장하고 있는 변수로 </span><span style="font-size: 9pt; line-height: 1.5">c언어를 배운 분들이라면 다들 알고 있을것입니다.</span><span style="font-size: 9pt; line-height: 1.5">.</span></div> <div style="text-align: left"> <div><br /></div> <div>포인터 중에서 함수 포인터도 정말 이렇게 되는지 이것을 디스어셈블리로 확인해 보죠.</div> <div><br /></div> <div><span style="font-size: 9pt; line-height: 1.5">다음과 같이 함수를 작성하고 </span></div></div> <div style="text-align: left"><br /></div> <div style="text-align: left"><span style="font-size: 9pt; line-height: 1.5">#include <stdio.h></span></div> <div style="text-align: left"> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><span style="font-size: 9pt; line-height: 1.5">void MyFunc() </span><span style="font-size: 9pt; line-height: 1.5">{</span></div> <div><span class="Apple-tab-span" style="white-space: pre"> </span>int c=10;</div> <div><span class="Apple-tab-span" style="white-space: pre"> </span>printf("%d\n", c);</div> <div>}</div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><span style="font-size: 9pt; line-height: 1.5">void main() </span><span style="font-size: 9pt; line-height: 1.5">{</span></div> <div><span class="Apple-tab-span" style="white-space: pre"> </span>void (*pf)() = MyFunc;</div> <div><span class="Apple-tab-span" style="white-space: pre"> </span>pf();</div> <div>}</div> <div><br /></div> <div>메인함수에서 함수 포인터 pf를 디스 어셈블리로 확인해 봅시다.</div> <div><br /></div> <div>보통 디버거 모드로 실행하면 다음 그림의 main함수에서부터 실행될 것입니다.</div> <div><br /></div> <div>이러한 이유는 실행런처가 보조기억장치에서 주기억장치로 코드 세그먼트, 스택 세그먼트를 확보한후에 main 함수를 호출하기 때문입니다.</div> <div><br /></div></div> <div style="text-align: left"><br /></div> <div style="text-align: left"><img src="http://thimg.todayhumor.co.kr/upfile/201311/1385533757pEmCsziFk5zClU67Cz3qZfig6UNYzV.jpg" width="580" height="765" alt="func.jpg" style="border: none" /></div><br /> <div><br /></div> <div>암튼 붉은 색 부분 00E3143E 에서 함수 포인터에 0E311D6h 주소를 지정하고 있는데 <span style="font-size: 9pt; line-height: 1.5">0E311D6h 주소를 </span><span style="font-size: 9pt; line-height: 1.5">따라가면 녹색 화살표에 jmp 00E313b0로 값이 저장되어 있는 것을 볼 수 있고 </span><span style="font-size: 9pt; line-height: 1.5">00E313b0은 MyFunc 코드의 시작주소입니다.</span></div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><span style="font-size: 9pt; line-height: 1.5">이렇게 디버드 모드와 디스어셈블리를 활용하면 활자로 배우는 C언어의 내용이 기계(머신)에서 어떻게 동작하는지 눈으로 확인 할 수 있어서 언어를 이해하는데 많은 도움이 됩니다.</span></div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><br /></div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.