Cygwin: разработка Ассемблера?

Во-первых я не уверен, должно ли это быть частью потока, я вчера запустил на блоке и стеке, но я думаю вопрос, который я задаю, здесь очень отличается.

Я, пытаясь понять, каков точно Cygwin через Википедию и Google, у меня нет большой удачи. Я только что начал программирование блока на Linux с помощью gcc газового ассемблера. Я использую машину на работе во время ланча, который только имеет Windows на ней. Я хотел практиковать некоторый ассемблер, программирующий здесь, таким образом, я думал, что Cygwin смог помогать.

По ошибке я полагал, что код, который я писал в Linux, мог просто быть скомпилирован и выполнен в использовании Windows Cygwin. Cygwin позволяет мне компилировать прекрасный код:

as someAssmProg.as -o someAssmProg.o
ld someAssmProg.o -o someAssmProg

Но если я пытаюсь выполнить код под Cygwin,

./someAssmProg

Я добираюсь, "необработанное win32 исключение произошло" сообщение

Теперь я предполагаю, что это вызвано тем, что код, который я пишу, предназначается для Linux. Я думал хотя, что Cygwin будет иметь дело с этим. Cygwin просто действительно предназначен, чтобы использоваться для разработки Приложений Windows в командной строке стиля Unix путь?

Снова я знаю, что это, вероятно, очевидно для большинства людей здесь, но я действительно смущен!

P.S. я попробовал AndLinux прежде за Windows, но это - вполне значительная установка.

5
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Cygwin является слоем во время выполнения, который обеспечивает библиотеки и программное обеспечение от мира Unix/Linux в Windows. Это не позволит Вашему ассемблерному коду работать, поскольку ОС является все еще Windows внизу, таким образом, все прерывания, и т.д. все еще Windows, не Linux, версии. Кроме того, если Вы действительно хотите выполнить ассемблер в Windows, необходимо сделать вещи существенно иначе, чем Вы делаете в Linux (или DOS, в этом отношении).

7
ответ дан 13 December 2019 в 19:36
поделиться

Можно полностью выполнить программы сборки в Cygwin. Я предполагаю, что Ваша загрузка перестала работать, потому что существует набор материала, который должен произойти между тем, когда Windows выполняет процесс и когда Вы добираетесь до main функция. Когда gcc дадут блок как вход, он свяжется в соответствующем шаблонном коде для генерации допустимого исполняемого файла.

Вот демонстрационная программа сборки. Сохраните его как hello.s:

.intel_syntax noprefix

.section .text

.globl _main
_main:
        enter 0, 0

        // welcome message
        push    OFFSET s_HelloWorld
        call    _printf
        pop     eax

        // add three numbers
        push    2
        push    4
        push    5
        call    _addThree
        add     esp, 3 * 4

        // print returned value
        push    eax
        push    OFFSET s_PercentD
        call    _printf
        add     esp, 2 * 4

        xor     eax, eax
        leave
        ret

// Add three numbers
_addThree:
       enter    0, 0
       mov      eax, DWORD PTR [ebp + 8]
       add      eax, DWORD PTR [ebp + 12]
       add      eax, DWORD PTR [ebp + 16]
       leave
       ret

.section .rdata

s_HelloWorld:
       .ascii  "Hello, world.\n\0"
s_PercentD:
       .asciz "%d\n"

затем выполните его с

$ gcc -mno-cygwin hello.s -o hello && ./hello
Hello, world.
11

Ссылка для инструкций по сборке Вашего процессора содержится в Руководстве Программиста Архитектуры AMD64. Соглашение о вызовах C документируется в эту страницу из интернет-Архива; возможно, можно ли найти подобный, который все еще имеет изображения?

Обратите внимание, что Cygwin только сделает 32-разрядный блок прямо сейчас; (непотребитель) мир составляет все 64 бита теперь, и в 64-разрядном режиме на современных процессорах у Вас есть намного больше регистров и различных соглашений о вызовах.

3
ответ дан 13 December 2019 в 19:36
поделиться

Лучший способ сделать это действительно состоит в том, чтобы установить VM (использующий VirtualBox или somesuch) с полной установкой Linux под ним. Это кажется, что это может быть слишком тяжело для соответствия требованиям, но это - единственное предложение, которое я имею в данный момент.

1
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: