· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

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

Посл.отвђт Сообщенiе


Дата: Авг 24, 2004 13:08:20

Господа, один мой товарищь, получил задание по программированию и оно на англ. Там всего 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.

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


Дата: Авг 24, 2004 13:16:12

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


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


Дата: Авг 24, 2004 13:36:59

хмм...писать под linux/unix и использовать MASM ;-)) Любопытный подход.


Дата: Авг 24, 2004 13:39:18

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


Дата: Авг 24, 2004 13:41:49

да, кстати, вот статья, примера от туда вполне достаточно для выполнения задания.
http://www.wasm.ru/article.php?article=asminunix


Дата: Авг 24, 2004 13:44:01

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


Дата: Авг 24, 2004 13:47:55

Спасибо, looser. Так все и расскажу.


Дата: Авг 25, 2004 15:29:05

Оказалось, что, таки для Виндовс. Все я запутался. Объясните, пожалуйста, кто-нибудь....


Дата: Авг 25, 2004 19:29:58

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


Дата: Авг 25, 2004 19:47:50

Да на раз. Не дружит с головой твой дядька. Все просто. Ряд нестыковок.
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.

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


Дата: Авг 25, 2004 19:54:26

Спасибо, а используя гейт для Вин, как будет выглядеть прога на МАСМЕ(для Вин)?


Дата: Авг 25, 2004 20:16:43

На всякий случай предупреждаю - решение Д.З. на этом форуме карается довольно жестоко. Программу будешь писать себе сам.
Я лишь скажу, что использование int 2e - это недокументированные функции Windows. Код, использующий int 2e, находится внутри ntdll.dll. Из твоего предельно невнятного описания, а именно "in %eax (4 for write)", понять что-то сложно! Надо вывести что-то на консоль? Или записать что-то в файл? В последнем случае тебе пригодится недокументированная функция
.text:77F83313                 public ZwWriteFile
.text:77F83313 ZwWriteFile     proc near
.text:77F83313
.text:77F83313 arg_0           = dword ptr  4
.text:77F83313
.text:77F83313                 mov     eax, 0EDh       ; NtWriteFile
.text:77F83318                 lea     edx, [esp+arg_0]
.text:77F8331C                 int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
.text:77F8331C                                         ; DS:SI -> counted CR-terminated command string
.text:77F8331E                 retn    24h
.text:77F8331E ZwWriteFile     endp


А если ты хочешь что-то вывести на консоль - то тут все еще хуже. Мне эту цепочку прослеживать лень. Начинается она с WriteConsole.
Только мне слабо верится, что человеку, который не знает, чем отличается гейт Win и *nix, дали задание, перед которым испытываю дискомфорт и я.


Дата: Авг 25, 2004 20:20:54

Спасибо. Вообще-то задание это не мое и я так же растерян как и вы. Но за разъеснение спасибо. Пойду разбираться.