x86 어셈블리 언어로 문자열을 인쇄 할 때 이상한 문자가 있습니까?

아카 쉬

내 코드에는 edx 레지스터에 문자열 길이를 수동으로 넣는 대신 문자열 길이를 계산하는 프로그램과 함께 콘솔에 인쇄 할 문자열이 있어야합니다. 하지만 문자열이 인쇄 된 직후에 이상한 문자가 인쇄됩니다.


global          _start

section         .text

_start:

  mov           edi, message
  call          _strlen
  mov           edx, eax

  mov           eax, 4
  mov           ebx, 1
  mov           ecx, message
  int 80h

  mov           eax, 1
  mov           ebx, 5
  int 80h

 section         .data
message: db     "My name is Stanley Hudson", 0Ah
_strlen:

  push          ebx
  push          ecx

  mov           ebx, edi
  xor           al, al
  mov           ecx, 0xffffffff

  repne         scasb               ; REPeat while Not Equal [edi] != al

  sub           edi, ebx            ; length = offset of (edi – ebx)
  mov           eax, edi

  pop           ebx
  pop           ecx
  ret

다음은 출력입니다.

네이트 엘 드리지

strlen 문자열을 종료하는 0 바이트를 검색하지만 문자열에 1 바이트가 없으므로 0 바이트를 찾고 너무 큰 값을 반환 할 때까지 진행됩니다.

당신은 쓰고 싶어

message: db     "My name is Stanley Hudson", 0Ah, 0
                                               ; ^^^

또 다른 버그는 문자열 뒤에 돌아 가지 않았기 때문에 _strlen함수가 .data섹션에 분명히 있다는 것 section .text입니다. x86-32에는 NX 비트가 없으므로 .data섹션이 실행 가능하고 모든 것이 여전히 작동하지만 의도 한 바는 아닙니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

비트 연산자 (x86 어셈블리) : 나머지 이진 데이터는 이동할 때 어디로 이동합니까?

분류에서Dev

배열로 문자열을 인쇄 할 때 이상한 문자?

분류에서Dev

이 x86 어셈블리 코드는 어떻게 문자열을 생성합니까?

분류에서Dev

x86 어셈블리 언어에서 null로 끝나는 문자열과 null로 끝나지 않는 문자열의 차이점은 무엇입니까?

분류에서Dev

문자열 해싱을 최적화 할 때 이상한 어셈블리 출력

분류에서Dev

x86 어셈블리에서 루프의 숫자 뒤에 새 줄을 어떻게 인쇄합니까?

분류에서Dev

nasm 어셈블리 : 문자열이 두 번 인쇄됩니다.

분류에서Dev

어셈블리 x86 16 비트에서 문자열 분할

분류에서Dev

x86 어셈블리에서 문자열 증가

분류에서Dev

어셈블리 x86 : LEA 및 MOVSB가 내 소스 문자열을 변경합니까?

분류에서Dev

이 어셈블리 x86 라인은 무엇을합니까?

분류에서Dev

어셈블리 프로그램 (x86)을 실행하려고 할 때 Dosbox에서 중지되는 이유는 무엇입니까?

분류에서Dev

x86 어셈블리 초보자 : 프로그램이 올바르게 반복되지 않습니까?

분류에서Dev

어셈블리 언어는 함수 호출로 문자를 두 번 인쇄하지만 직접 실행될 때는 인쇄하지 않습니다.

분류에서Dev

x86 어셈블리 : db 구문 이해

분류에서Dev

어셈블리 x86에서 문자가 대문자인지 여부 확인

분류에서Dev

간단한 8086 어셈블리 문자열 배열 및 인쇄

분류에서Dev

문자열 인쇄 (어셈블리)

분류에서Dev

추측 게임을하는 동안 사용자가 Enter 키를 눌렀을 때 어떻게 문자열을 인쇄 할 수 있습니까?

분류에서Dev

x86 어셈블리 언어 : 16 진수 레지스터 값을 10 진수 출력으로 인쇄하려면 어떻게해야합니까?

분류에서Dev

데이터 바인딩을 사용할 때 어떻게 문자열을 포맷 할 수 있습니까?

분류에서Dev

캐릭터가 어셈블리의 문자인지 어떻게 확인할 수 있습니까?

분류에서Dev

RISC-V 어셈블리에서 호출 될 때 printf의 문자열 길이를 어떻게 수정할 수 있습니까?

분류에서Dev

masm을 사용하여 80x86 어셈블리 언어로 두 문자열을 연결하는 데 도움이 필요합니다.

분류에서Dev

viewController가 다른 tableViewController로 이동할 때 문자열 값을 어떻게 유지할 수 있습니까?

분류에서Dev

xchg는 어셈블리 x86의 문자열과 어떻게 작동합니까?

분류에서Dev

이 어셈블리 x86 코드를 이해할 수 없습니다.

분류에서Dev

문자열 배열을 다시 할당 할 수 없지만 문자열 포인터가 C 언어로 될 수있는 이유는 무엇입니까?

분류에서Dev

줄 바꿈 Mips 어셈블리 언어없이 문자열을 인쇄하는 방법

Related 관련 기사

  1. 1

    비트 연산자 (x86 어셈블리) : 나머지 이진 데이터는 이동할 때 어디로 이동합니까?

  2. 2

    배열로 문자열을 인쇄 할 때 이상한 문자?

  3. 3

    이 x86 어셈블리 코드는 어떻게 문자열을 생성합니까?

  4. 4

    x86 어셈블리 언어에서 null로 끝나는 문자열과 null로 끝나지 않는 문자열의 차이점은 무엇입니까?

  5. 5

    문자열 해싱을 최적화 할 때 이상한 어셈블리 출력

  6. 6

    x86 어셈블리에서 루프의 숫자 뒤에 새 줄을 어떻게 인쇄합니까?

  7. 7

    nasm 어셈블리 : 문자열이 두 번 인쇄됩니다.

  8. 8

    어셈블리 x86 16 비트에서 문자열 분할

  9. 9

    x86 어셈블리에서 문자열 증가

  10. 10

    어셈블리 x86 : LEA 및 MOVSB가 내 소스 문자열을 변경합니까?

  11. 11

    이 어셈블리 x86 라인은 무엇을합니까?

  12. 12

    어셈블리 프로그램 (x86)을 실행하려고 할 때 Dosbox에서 중지되는 이유는 무엇입니까?

  13. 13

    x86 어셈블리 초보자 : 프로그램이 올바르게 반복되지 않습니까?

  14. 14

    어셈블리 언어는 함수 호출로 문자를 두 번 인쇄하지만 직접 실행될 때는 인쇄하지 않습니다.

  15. 15

    x86 어셈블리 : db 구문 이해

  16. 16

    어셈블리 x86에서 문자가 대문자인지 여부 확인

  17. 17

    간단한 8086 어셈블리 문자열 배열 및 인쇄

  18. 18

    문자열 인쇄 (어셈블리)

  19. 19

    추측 게임을하는 동안 사용자가 Enter 키를 눌렀을 때 어떻게 문자열을 인쇄 할 수 있습니까?

  20. 20

    x86 어셈블리 언어 : 16 진수 레지스터 값을 10 진수 출력으로 인쇄하려면 어떻게해야합니까?

  21. 21

    데이터 바인딩을 사용할 때 어떻게 문자열을 포맷 할 수 있습니까?

  22. 22

    캐릭터가 어셈블리의 문자인지 어떻게 확인할 수 있습니까?

  23. 23

    RISC-V 어셈블리에서 호출 될 때 printf의 문자열 길이를 어떻게 수정할 수 있습니까?

  24. 24

    masm을 사용하여 80x86 어셈블리 언어로 두 문자열을 연결하는 데 도움이 필요합니다.

  25. 25

    viewController가 다른 tableViewController로 이동할 때 문자열 값을 어떻게 유지할 수 있습니까?

  26. 26

    xchg는 어셈블리 x86의 문자열과 어떻게 작동합니까?

  27. 27

    이 어셈블리 x86 코드를 이해할 수 없습니다.

  28. 28

    문자열 배열을 다시 할당 할 수 없지만 문자열 포인터가 C 언어로 될 수있는 이유는 무엇입니까?

  29. 29

    줄 바꿈 Mips 어셈블리 언어없이 문자열을 인쇄하는 방법

뜨겁다태그

보관