어셈블리어 레지스터 질문
글쓴이: qkrwncks593 / 작성시간: 수, 2012/08/01 - 3:24오후
어셈블리어를 배우고있는데 레지스터에대해 이해가 잘안갑니다.
1. 메인함수에 있는 short a=2; char b=5;
변수선언코드의 역어셈블 코드를 보면
처음에 부터시작하면
push ebp
mov ebp,esp
sub esp,0x4 // 여기서 esp 에서 4를 빼는 이유를 모르겠습니다 ; 스택메모리를 할당한다는데 왜 esp 에서 4를 뺀다는건지 이해가안가요
..
..
mov word ptr [ebp-2],0x2
mov byte ptr [ebp-3],0x5
여기서 또 왜 값을 대입할때 esp 를 이용하지않고 ebp 를 사용해서 메모리에 값을 대입하는거죠 ?
마지막으로 스택에 메모리공간을 할당할때 push 를 사용하는데 왜 sub 를 사용하는지 정말 이해가 안갑니다. 이거에대해 자세히 설명해주세요 ㅠ
Forums:
...
1. sub esp,0x4 // 여기서 esp 에서 4를 빼는 이유를 모르겠습니다 ; 스택메모리를 할당한다는데 왜 esp 에서 4를 뺀다는건지 이해가안가요
스택은 역방향으로 자라기 때문에 stack pointer를 감소시키면 그만큼 스택에 데이터를 push한 것과 같은 효과를 나타냅니다. 3 바이트가 필요하기 때문에 IA32의 stack pointer 최소 정렬 단위인 4 바이트를 할당합니다.
2. 여기서 또 왜 값을 대입할때 esp 를 이용하지않고 ebp 를 사용해서 메모리에 값을 대입하는거죠 ?
call 과정에서 stack pointer의 값은 항상 변합니다. 따라서 처음 시작 할 때 저장해 둔 esp 값을 기준으로 계산하게 됩니다. 일일이 증가값 감안해서 esp로 계산할 수도 있겠지만 그렇게 하려면 컴파일러의 구현이 복잡해집니다.
3. 마지막으로 스택에 메모리공간을 할당할때 push 를 사용하는데 왜 sub 를 사용하는지 정말 이해가 안갑니다.
스택에 1024 바이트 할당 하겠다고 push를 256번 실행하겠습니까?
아래 링크 자료가 도움이 되실 것
아래 링크 자료가 도움이 되실 것 같습니다.
https://docs.google.com/viewer?url=http://www.dumpanalysis.org/PFD/Practical_Foundations_of_Debugging_Chapter6_2.pdf
특히 위 링크에서 4번 슬라이드를 보시면 이해가 쉬우실 것 같네요.
RET ;My life :P
알려주신 URL 이 중간에 짤린듯 합니다. 아마도
알려주신 URL 이 중간에 짤린듯 합니다.
아마도 전체 URL 은 아래와 같지 않을까 예상됩니다.
https://docs.google.com/viewer?url=http://www.dumpanalysis.org/PFD/Practical_Foundations_of_Debugging_Chapter5.pdf
전체 URL 을 적어도 짤려 보이는 거였군요. 다시
전체 URL 을 적어도 짤려 보이는 거였군요. 다시 적습니다.
5. Memory and Stacks
감사합니다 ^^
문서보고 이해했습니다 ㅎㅎㅎ.
지역변수를 위한 스택에서 esp는 스택의 top이고
지역변수를 위한 스택에서
esp는 스택의 top이고 ebp는 스택의 bottom입니다.
그렇다면..
ebp 값을 더낮게 줄이면 스택영역이 줄으는건가요 ?
댓글 달기