[asm] 스택의 크기를 사용가능한 메모리의 크기보다 1 더 크게 잡아도 문제가 없는것인가요?

gurumong의 이미지

MS-DOS에서 어셈블리어를 공부하고있습니다
공부를 한지 얼마 안되지 않는데요
스택의 크기를 잡을때에 대해서 궁금한점이 생겼습니다

초기에 SP는 스택의 크기값을 주소로 가지고
SP가 0이되면 스택이 가득찬것이고
스택의 꼭대기는 사용할수없는것으로 알고있습니다

그런데 사용가능한 자신의 메모리의 관점에서
스택의 크기를 사용가능한 메모리의 크기보다 1 더 크게 잡아도 문제가 없는것인가요?
이 경우에 자신과 상관없는 이웃하는(?) 메모리의 번지를 SP가 가르키게 되는데요

아니면 항상 SP가 자신의 메모리의 번지만을 가르킬수 있도록
스택의 크기를 최대 자신의 메모리의 크기만큼 잡는것이 관례인가요?

어셈블리어가 재미있는거 같습니다~

grassman의 이미지

MS-DOS에서는 conventional memory를 초과하여 SP를 설정할 수 없습니다.
(conventional memory는 최대 640KB인데 register는 16비트라서 최대 64KB까지만
지정할 수 있기 때문입니다)

만약 1 더 크게 잡는다는 것이 0xFFFF + 1 (= 0)을 의미하는 것이라면 그렇게 해서는 안됩니다.
push나 pop 명령은 스택 오버플로우나 언더플로우가 발생하는 것에 관계 없이 값을 쓰기
때문에 SS:[0]에 값을 집어 넣으려는 의도가 아니라면 SP를 0으로 설정해서는 안됩니다.

그리고 x86 real mode의 스택 포인터는 2바이트 단위로 증감하므로 최대 0xFFFE에서 시작합니다.

gurumong의 이미지

그러니까 패러그래프 경계상이면 어느곳이나 세그먼트가 위치할수 있잖아요
0x002f 까지 스택 세그먼트에서 사용하고 인접한 0x0030 에는 다른 세그먼트(code나 data 세그먼트)가 위치할때
스택의 꼭대기는 사용할수 없으니까 SP의 초기 값은 0x0030 이 되어도 상관없는것인가요?
아니면 SP이 가르키는 번지가 항상 자신의 영역만 가르키도록 최대 0x002f 를 가르키도록 하는것이 관례인지...
공부가 얼마되지 않아서 질문이 정상적인지도 모르겠고; 설명도 잘 못하겠네요 ㅜ.ㅜ

grassman의 이미지

앞에서도 언급했듯이 x86 real mode의 push나 pop 명령에서 중첩된 paragraph에 대해
underflow를 검출할 방법은 없습니다. 따라서 사용자가 문제없이 사용할 수 있다면
0x0030이 다른 세그먼트를 가리키고 있다고 하더라도 상관은 없습니다.

그런데 MS-DOS를 기준으로 한다면 SS는 항상 실행 이미지의 가장 마지막 주소에 위치하고
있으며 SP는 최대치로 잡혀 있습니다. 따라서 0xFFFE 같은 주소가 나오는 것입니다. (0으
로 하면 stack overflow를 검출할 방법이 없으니 그렇게 하는 것입니다)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.