Господа, один мой товарищь, получил задание по программированию и оно на англ. Там всего 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. О какой системе идет речь я не знаю, но наверное под Винду. Вот это и все, если кто знает, чего здесь требуется, сообщите пожалуйста. Заранее всем спасибо.
Нужен пример кода на MASM, который покажет как использовать eax в системом вызове. Надо записать номер системного вызова в %eax (например 4 для записи [прим.: хрен знает куда]) и так далее. В конечном счете надо вызвать 0x80 прерывание, чтобы отобразить вывод на консоли. Вот так, кажется. И еще кажется, что не под винду.
да, кстати, вот статья, примера от туда вполне достаточно для выполнения задания. http://www.wasm.ru/article.php?article=asminunix
да и еще, может это конечно и не важно, но в задании не уточнили в каком синтаксе все это дело нужно написать. В той статье используется intel синтаксис.
Скажите, если речь идет о Виндовсе, то причем здесь int и что это за такой синтаксис, в котором запись чисел происходит через 0x(0x80)? Ведь для программирования под Вин вызов прерываний вроде как смысла практически не имеет(имхо), а 80 это вроде вообще чисто Юниховский системный сервис. Так? Тогда о чем вообще дядька говорит? Кто-нибудь может пояснить?
Да на раз. Не дружит с головой твой дядька. Все просто. Ряд нестыковок. 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. А так - зови своего дядьку (преподаватель, я так понимаю?) - сюда. Мы и его научим
На всякий случай предупреждаю - решение Д.З. на этом форуме карается довольно жестоко. Программу будешь писать себе сам. Я лишь скажу, что использование int 2e - это недокументированные функции Windows. Код, использующий int 2e, находится внутри ntdll.dll. Из твоего предельно невнятного описания, а именно "in %eax (4 for write)", понять что-то сложно! Надо вывести что-то на консоль? Или записать что-то в файл? В последнем случае тебе пригодится недокументированная функция Код (Text): .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, дали задание, перед которым испытываю дискомфорт и я.
Спасибо. Вообще-то задание это не мое и я так же растерян как и вы. Но за разъеснение спасибо. Пойду разбираться.