[질문] 어셈블 할 때 쓰레귀 값이 패딩되는 현상

sungsaint의 이미지

지금 NASM을 이용하여 어셈블러를 공부하고 있는 학생입니다.
요즘 어셈블을 하다가 큰 문제에 도달했는데요, code segment 부분에 계속 쓰레기값이 들어가서 프로그램이 정상적으로 동작하지 않습니다.
예를 들자면

어셈블 코드로는
...
INDEX_CHECK:
CMP SI, 4
JE START_REAL
RET

SECTION .data
PRINT_NUMBER
...

이렇습니다. 그런데 이 상태에서 어셈블을 하면

000195 CMP SI, 0X4
000195 PADDD MM0, [SI] <-- --------- JE START_REAL 에 관한 명령어가 들어가 있어야 하는 부분이나 엉뚱한 명령이 튀어나옴,
00019A TEST [BX+DI-0X1], CH---------|
00019D RET
00019E ADD [BX+SI}, AL
0001A0 PUSH ES

이렇게 어셈블 되고 뒤에 DATA SECTION의 값이 저장되어 있습니다. 더욱이 황당한 것은 00016A의 명령은 예전에 제가 입력했다가 삭제한 명령어인데 다시 저렇게 좀비상태가 되어서 저를 괴롭힌다는 것입니다. 00019E, 0001A0 명령어 역시 그렇습니다,

맨 처음 예측으로 제 컴퓨터에 문제가 있나 해서 재부팅을 하고 해도 똑같은 현상 발생, 프로그램(NASM)이 엉겼나 해서 다시 설치 하였지만 역시 그대로, 혹시나 다른 컴퓨터에서 해봤는데 역시나 똑같은 현상을 반복하고 있습니다. 혹시 NASM 중에 MASM 처럼 CODE ENDS 라는 CODE가 끝나는 부분을 명시하는 그런 기능이 있는지 여쭈어 봅니다. 아니면 다른 방법으로라도 저렁 쓰레기값이 패딩 되는 현상을 막는 방법이 없는지 가르쳐 주시면 감사하겠습니다.

PS. 혹시나 CMP SI, 0X4 부분이 바이트가 엉켜서 다른 구문을 사용해서 어셈블을 해봤는데 역시 마찬가지 결과를 가져왔습니다.

grassman의 이미지

IA-32 Assembly에서 조건부 분기는 -128 ~ +127 바이트 옵셋 내에서만 분기할 수 있습니다.
TASM이나 MASM에서는 이걸 반대 조건문으로 치환해서 long jump로 변환하는 기능이 있습니다만..
NASM은 이걸 자동 변환하지 않는다고 문서에 나와 있더군요. 아무래도 어셈블이 완료되지 않은
상황으로 보입니다.

그리고.. NASM 문서를 보니 외부 링커를 사용할 경우 ..start: 가 시작점으로 인식된다고 나와
있습니다. END offset 구문은 사용하지 않는 듯 합니다.

sungsaint의 이미지

지금 하는 것이 간단한 프로그램이 이어서 다시 새로짜고 있는데 시간 나면 분석 좀 해봐야 할 것 같습니다.

---------------------------------------------------
그런거 없다.

---------------------------------------------------
그런거 없다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.