스택이 운영체제가 프로세스에 할당해준 메모리 공간으로 알고있습니다. 만약 그렇다면 운영체제가 없다면 push나 pop같은 어셈블리 명령어는 사용할수없나요? 늦은 저녁에 죄송하네요..
load,save 같은 어셈코드는 명령어니까 운영체제 없이도 가능하죠.
(32bit x86 CPU 기준으로 말씀드립니다.)
CPU가 보기에 push는 그냥 단순히 "SS:ESP가 가리키는 주소에 해당 값을 집어넣고 ESP를 감소시켜라"라는 연산입니다. (pop은 반대.) 그렇기 때문에 SS:ESP가 제대로 된 주소를 가리키고 있다면 운영체제 유무와 무관하게 정상적으로 실행할 수 있습니다.
운영체제가 해주는 일은 SS:ESP가 제대로 된 영역을 가리키고 있도록 스택을 만들어주고 필요에 따라 스택 크기를 늘려주는 일입니다.
거꾸로, ESP는 일반 프로세스가 맘대로 바꿀 수 있기 때문에 엉뚱한 주소를 집어넣는다면 아무리 운영체제가 있어도 CPU가 에러를 발생시키게 됩니다. (일반적인 운영체제라면 이 때 segfault 혹은 비슷한 에러를 발생시키고 프로세스를 종료시키겠죠.)
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
load,save 같은 어셈코드는 명령어니까 운영체제
load,save 같은 어셈코드는 명령어니까 운영체제 없이도 가능하죠.
...
(32bit x86 CPU 기준으로 말씀드립니다.)
CPU가 보기에 push는 그냥 단순히 "SS:ESP가 가리키는 주소에 해당 값을 집어넣고 ESP를 감소시켜라"라는 연산입니다. (pop은 반대.) 그렇기 때문에 SS:ESP가 제대로 된 주소를 가리키고 있다면 운영체제 유무와 무관하게 정상적으로 실행할 수 있습니다.
운영체제가 해주는 일은 SS:ESP가 제대로 된 영역을 가리키고 있도록 스택을 만들어주고 필요에 따라 스택 크기를 늘려주는 일입니다.
거꾸로, ESP는 일반 프로세스가 맘대로 바꿀 수 있기 때문에 엉뚱한 주소를 집어넣는다면 아무리 운영체제가 있어도 CPU가 에러를 발생시키게 됩니다. (일반적인 운영체제라면 이 때 segfault 혹은 비슷한 에러를 발생시키고 프로세스를 종료시키겠죠.)
댓글 달기