8, 1/1 회원가입  로그인  
   ka0r1
   커널에서 어셈블리어

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_Kernel&no=11 [복사]


#define switch_to(prev,next,last) do {                                  \
        unsigned long esi,edi;                                          \
        asm volatile("pushl %%ebp\n\t"                                  \
                     "movl %%esp,%0\n\t"        /* save ESP */          \
                     "movl %5,%%esp\n\t"        /* restore ESP */       \
                     "movl $1f,%1\n\t"          /* save EIP */          \
                     "pushl %6\n\t"             /* restore EIP */       \
                     "jmp __switch_to\n"                                \
                     "1:\t"                                             \
                     "popl %%ebp\n\t"                                   \
                     :"=m" (prev->thread.esp),"=m" (prev->thread.eip),  \
                      "=a" (last),"=S" (esi),"=D" (edi)                 \
                     :"m" (next->thread.esp),"m" (next->thread.eip),    \
                      "2" (prev), "d" (next));                          \
} while (0)



switch_to()함수가 define으로 전처리가 되어 있다니...
그나저나 저 4번째 줄에 "movl %%esp,%0\n\t" <- 이 문법을 어떻게 해석해야 될까요?
책에선 간단하게 "prev로 표시될 프로세스의 ESP 레지스터를 백업해 두고..."라고 나오는데
저는 저 어셈블리어의 작동과정과 원리가 궁금합니다.





p.s. 어셈 공부 좀 해둘 걸... ㅠㅠ

  Hit : 3577     Date : 2013/01/31 07:43
[불법/스팸글로 신고하기]



    
ka0r1 어... 소스 코드를 자세히 보니
"pushl %%ebp\n\t"
"movl %%esp,%0\n\t"
라고 적혀있는데 이게 "스택 프레임"인지 뭐시기인지 그거 아닌가요?
스택을 깨지는 것을 방지하기 위해...???
2013/01/31  
Mephist Context switching 코드네요...
%0, %1 등은.. 맨 밑에서 알려주고 있죠..
:"=m" (prev->thread.esp),"=m" (prev->thread.eip), \
"=a" (last),"=S" (esi),"=D" (edi) \
:"m" (next->thread.esp),"m" (next->thread.eip), \
"2" (prev), "d" (next)); \
입니다.
%0 은.. 맨 앞... prev->thread.esp 를 얘기합니다.. %1 는 prev->thread.eip 가 되겠죠.
2013/02/01  
Mephist 참고로~
"movl %5,%%esp\n\t" /* restore ESP */ 라인 하고...
"pushl %6\n\t" /* restore EIP */ \ 라인...
"jmp __switch_to\n" 라인이... Context switching 의 핵심입니다.

잘 분석해보세요~
2013/02/01  
8   OS와 커널 질문[1]     chnh3
01/07 1455
7   서버 접속 아이피 기록 삭제하는 방법좀 알려주세요     k201113
02/16 2706
6   키보드 드라이브     k1990121
10/08 2729
  커널에서 어셈블리어[3]     ka0r1
01/31 3576
4   커널에대해[1]     eck1220
06/18 2839
3   커널공부하려면[4]     creeper
12/03 3622
2   ssdt hook     열정
05/06 3472
1   커널이 어렵긴 한가보군요..[1]     helloman
04/27 4217
1

Copyright 1999-2022 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com