Кто-нибудь знает англ.? Помогите, плиз...

Тема в разделе "WASM.UNIX", создана пользователем Arvis, 24 авг 2004.

Статус темы:
Закрыта.
  1. Arvis

    Arvis New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2004
    Сообщения:
    26
    Адрес:
    Ukraine
    Господа, один мой товарищь, получил задание по программированию и оно на англ. Там всего 2-3 строки, но я не понимаю о чем там речь. Можете помочь?

    Вот так оно выглядет:

    Заголовок:

    Need an example code in MASM that can show how to put the system call in eax.



    И пояснение:

    Put the system call number in %eax (4 for write) and so on....

    Finally do "int 0x80" and it will write output to the console.



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

    Заранее всем спасибо.
     
  2. vaskovich

    vaskovich New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2004
    Сообщения:
    2
    Адрес:
    Samara
    Нужен пример кода на MASM, который покажет как использовать eax в системом вызове.

    Надо записать номер системного вызова в %eax (например 4 для записи [прим.: хрен знает куда]) и так далее. В конечном счете надо вызвать 0x80 прерывание, чтобы отобразить вывод на консоли.




    Вот так, кажется. И еще кажется, что не под винду.
     
  3. looser

    looser New Member

    Публикаций:
    0
    Регистрация:
    25 май 2004
    Сообщения:
    34
    Адрес:
    msk
    хмм...писать под linux/unix и использовать MASM :derisive:) Любопытный подход.
     
  4. Arvis

    Arvis New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2004
    Сообщения:
    26
    Адрес:
    Ukraine
    Да уж...

    А на коде это как должно выглядеть не скажете?
     
  5. looser

    looser New Member

    Публикаций:
    0
    Регистрация:
    25 май 2004
    Сообщения:
    34
    Адрес:
    msk
  6. looser

    looser New Member

    Публикаций:
    0
    Регистрация:
    25 май 2004
    Сообщения:
    34
    Адрес:
    msk
    да и еще, может это конечно и не важно, но в задании не уточнили в каком синтаксе все это дело нужно написать. В той статье используется intel синтаксис.
     
  7. Arvis

    Arvis New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2004
    Сообщения:
    26
    Адрес:
    Ukraine
    Спасибо, looser. Так все и расскажу.
     
  8. Arvis

    Arvis New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2004
    Сообщения:
    26
    Адрес:
    Ukraine
    Оказалось, что, таки для Виндовс. Все я запутался. Объясните, пожалуйста, кто-нибудь....
     
  9. Arvis

    Arvis New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2004
    Сообщения:
    26
    Адрес:
    Ukraine
    Скажите, если речь идет о Виндовсе, то причем здесь int и что это за такой синтаксис, в котором запись чисел происходит через 0x(0x80)?

    Ведь для программирования под Вин вызов прерываний вроде как смысла практически не имеет(имхо), а 80 это вроде вообще чисто Юниховский системный сервис. Так? Тогда о чем вообще дядька говорит? Кто-нибудь может пояснить?
     
  10. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Да на раз. Не дружит с головой твой дядька. Все просто. Ряд нестыковок.

    1) call number in %eax - это AT&T-синтаксис для *nix-систем

    2) example code in MASM - MASM - это Windows-ассемблер. Для *nix надо использовать NASM. Опечатка?

    3) "int 0x80" - это гейт для *nix. Под Windows гейт - это int 2Eh. Кстати, и для описания int 0x80 используется нотация AT&T.



    А так - зови своего дядьку (преподаватель, я так понимаю?) - сюда. Мы и его научим :)
     
  11. Arvis

    Arvis New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2004
    Сообщения:
    26
    Адрес:
    Ukraine
    Спасибо, а используя гейт для Вин, как будет выглядеть прога на МАСМЕ(для Вин)?
     
  12. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    На всякий случай предупреждаю - решение Д.З. на этом форуме карается довольно жестоко. Программу будешь писать себе сам.

    Я лишь скажу, что использование int 2e - это недокументированные функции Windows. Код, использующий int 2e, находится внутри ntdll.dll. Из твоего предельно невнятного описания, а именно "in %eax (4 for write)", понять что-то сложно! Надо вывести что-то на консоль? Или записать что-то в файл? В последнем случае тебе пригодится недокументированная функция


    Код (Text):
    1.  
    2. .text:77F83313                 public ZwWriteFile
    3. .text:77F83313 ZwWriteFile     proc near
    4. .text:77F83313
    5. .text:77F83313 arg_0           = dword ptr  4
    6. .text:77F83313
    7. .text:77F83313                 mov     eax, 0EDh       ; NtWriteFile
    8. .text:77F83318                 lea     edx, [esp+arg_0]
    9. .text:77F8331C                 int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
    10. .text:77F8331C                                         ; DS:SI -> counted CR-terminated command string
    11. .text:77F8331E                 retn    24h
    12. .text:77F8331E ZwWriteFile     endp
    13.  




    А если ты хочешь что-то вывести на консоль - то тут все еще хуже. Мне эту цепочку прослеживать лень. Начинается она с WriteConsole.

    Только мне слабо верится, что человеку, который не знает, чем отличается гейт Win и *nix, дали задание, перед которым испытываю дискомфорт и я.
     
  13. Arvis

    Arvis New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2004
    Сообщения:
    26
    Адрес:
    Ukraine
    Спасибо. Вообще-то задание это не мое и я так же растерян как и вы. Но за разъеснение спасибо. Пойду разбираться.
     
Статус темы:
Закрыта.