Nano Hash - криптовалюты, майнинг, программирование

Кажется, вообще не удается заставить эту программу сборки выводить данные

Я только начал изучать ассемблер (‹1 неделя, так что, пожалуйста, простите меня, если это глупо), но я не могу понять, почему этот код не дает результата:

section .data
    message db "Hello World!",10
    
section .text
    global _start

_start:
    mov rax,1
    mov rdi,1
    mov rsi,message
    mov rdx,14
    syscall
    mov rax,60
    mov rdi,0
    syscall

Я следил за этим онлайн-руководством, вместе с несколькими другими, но я не могу понять, почему нет вывода. Он собирает и связывает без ошибок (ввод консоли: nasm -f elf64 hello.asm -o hello.o, за которым следует: ld hello.o -o hello. Когда запустился, это займет секунду, а затем появится новое приглашение).

Я использую окна, и это все, что я смог найти в Интернете, в чем может быть причина, но не смог найти решения. Я пробовал использовать -f win64, за которым следует link.exe hello.obj / entry: _start / subsystem: console. Я также поменял местами подсистему: консоль на подсистему: окна только в случай, безрезультатно. Я полностью потерялся, и я очень благодарен за любую помощь. Спасибо!

P.S. Если проблема заключается в использовании Windows, есть ли в Интернете хорошее руководство по nasm в Windows. (Я пробовал использовать masm и as, но продолжаю сталкиваться с проблемами, поэтому решил выбрать nasm)

22.08.2020

  • Это системные вызовы Linux. Винда совсем другая. Вы не можете следовать руководству по Linux, если не используете виртуальную машину или WSL (подсистему Windows для Linux). 23.08.2020
  • Что такое системные вызовы Windows, или знаете ли вы хороший учебник по Windows, которому я могу следовать. В любом случае, спасибо за помощь. 23.08.2020
  • Фактический syscall ABI в Windows недокументирован и предназначен только для использования библиотеками DLL Windows. См., Например, Создание программы, использующей только системные вызовы, а не DLL Windows. Что вы должны делать, так это вызывать функции WinAPI в библиотеках DLL, которые ядро ​​отображает в ваш процесс, хотите вы того или нет. Как я уже сказал, ищите руководство по Windows NASM, например Как написать hello world на ассемблере под Windows? Думаю, есть ответ x64 23.08.2020

Ответы:


1

Простое объяснение: вы не можете использовать syscall в Windows. Вам необходимо импортировать функции записи консоли из DLL Windows и call их.

22.08.2020
  • Гипотетически вы могли выполнять прямые системные вызовы в Windows, но точки входа постоянно меняются (даже между разными сборками с одним и тем же основным номером версии) 23.08.2020
  • Как импортировать функции из dll, а затем вызывать их? Я нашел учебник, в котором используется глобальный раздел _start extern. , Не могу найти, как это исправить. Это правильный способ сделать это, код неправильный, или я все еще делаю что-то не так? Спасибо! 23.08.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..