[nasm] [osx] - неправильное смещение данных для вывода после компиляции - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день друзья, написал простое приложение на асме, всё отлично компилирует, но работает неправильно, хотел узнать ваше мнение. Итак, код:
%define SYSCALL_EXIT  0x2000001
%define SYSCALL_READ  0x2000003
%define SYSCALL_WRITE 0x2000004
%define SYSCALL_OPEN  0x2000001
%define SYSCALL_CLOSE 0x2000001
 
%define STDIN  0x0
%define STDOUT 0x1
%define STDERR 0x2
 
; arguments: rdi, rsi, rdx, rcx, r8d, r9d; remaining arguments are on the stack.
; syscall number: rax
; return value: rax
 
section .data
    text1 db "What is your name? "
    text1len equ $ - text1
 
    text2 db "Hello, "
    text2len equ $ - text2
 
section .bss
    name resb 16
 
section .text
    global start
 
start:
 
    call _printText1
    call _getName
    call _printText2
    call _printName
 
    mov rax, SYSCALL_EXIT
    mov rdi, 0
    syscall
 
_getName:
    mov rax, SYSCALL_READ
    mov rdi, STDIN
    mov rsi, name
    mov rdx, 16
    syscall
    ret
 
_printText1:
    mov rax, SYSCALL_WRITE
    mov rdi, STDOUT
    mov rsi, text1
    mov rdx, text1len
    syscall
    ret
 
_printText2:
    mov rax, SYSCALL_WRITE
    mov rdi, STDOUT
    mov rsi, text2
    mov rdx, text2len
    syscall
    ret
 
_printName:
    mov rax, SYSCALL_WRITE
    mov rdi, STDOUT
    mov rsi, name
    mov rdx, 16
    syscall
    ret
Ничего сложного, - выводится "What is your name? ", - вводится текст к клавиатуры - выводится "Hello, " - выводится введенный с клавиатуры текст из пункта 2 - работа завершается с кодом 0 Компилирую
nasm -f macho64 -o name.o name.asm && ld -o name name.o
Версия nasm:
mac:~ jabbson$ nasm -v
NASM version 2.13.02 compiled on Nov 30 2017
Запускаю
mac:asm-codes jabbson$ ./name
What is your name? jabbson
jabbson
mac:asm-codes jabbson$
Знатоки, внимание вопрос. Где вывод "Hello, "? Из замеченного при дебаге смещение данных: шагаю до места где кладем смещение в RSI и смотрю, что там на самом деле ака ничего, смотрю где на самом деле текст 2013, поэтому ничего и не выводится. У кого будут какие идеи? Спасибо за внимание.

Решение задачи: «[nasm] [osx] - неправильное смещение данных для вывода после компиляции»

textual
Листинг программы
section .text
;    global _start
 
..start:

Объяснение кода листинга программы

  1. ..start - это метка, которая указывает на точку входа в программу.
  2. _start - это глобальная переменная, которая указывает на точку входа в программу.
  3. section .text - это директива сегментации, которая определяет сегмент для текста программы.
  4. В данном коде нет переменных, поэтому этот пункт можно пропустить.
  5. В данном коде нет функций, поэтому этот пункт можно пропустить.
  6. В данном коде нет циклов, поэтому этот пункт можно пропустить.
  7. В данном коде нет условных операторов, поэтому этот пункт можно пропустить.
  8. В данном коде нет операций с памятью, поэтому этот пункт можно пропустить.
  9. В данном коде нет операций с регистрами, поэтому этот пункт можно пропустить.
  10. В данном коде нет операций с числами, поэтому этот пункт можно пропустить.
  11. В данном коде нет операций с строками, поэтому этот пункт можно пропустить.
  12. В данном коде нет операций ввода-вывода, поэтому этот пункт можно пропустить.
  13. В данном коде нет операций с файлами, поэтому этот пункт можно пропустить.
  14. В данном коде нет операций с двоичными данными, поэтому этот пункт можно пропустить.
  15. В данном коде нет операций с символами, поэтому этот пункт можно пропустить.
  16. В данном коде нет операций с датой и временем, поэтому этот пункт можно пропустить.
  17. В данном коде нет операций с указателями, поэтому этот пункт можно пропустить.
  18. В данном коде нет операций с массивами, поэтому этот пункт можно пропустить.
  19. В данном коде нет операций с процедурами, поэтому этот пункт можно пропустить.
  20. В данном коде нет операций с библиотеками, поэтому этот пункт можно пропустить.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы