| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для Linux/Unix > Работа с системными вызовами |
| Автор: rigan 16.11.2010, 20:40 | ||
| Добрый вечер! Решил поизучать ассемблер в целях саморазвития. Появились вопросы по работе с системными вызовами и структурами. Например есть код на Си :
Подскажите как его можно реализовать с помощью системных вызовов? То есть, не через call stat, а именно через int $0x80. |
| Автор: airyashov 17.11.2010, 14:05 |
| у gss есть ключ которым можно посмотреть asm листинг |
| Автор: rigan 17.11.2010, 16:48 |
| В этом листинге, через сall вызываются обвертки, а параметры передаются через стек. С этим я уже разобрался... Мне хочется разобраться, как это работает через прерывание $int $0x80. Я не понимаю где и как распологать структуры... Как вообще работать со структурами из системных заголовочных файлов? Может мне кто-нибудь объяснить? |
| Автор: 500mhz 18.11.2010, 13:27 |
mov edx,lun ;3 параметр, длинна сообщения которое выводим mov ecx,hw ;2 параметр, собственно адрес в памяти где лежит сообшение mov ebx,1 ;1 параметр, дескриптор куда пишем (в нашем случае stdout) mov eax,4 ;номер функции syscall write int 0x80 ;дергаем прерывание |
| Автор: rigan 18.11.2010, 19:04 |
| 500mhz, спасибо. С этим Разобрался. А как быть со структурами? Например структура utmp. Как c ней работать? Может инклюдить заголовочные файлы надо? |
| Автор: 500mhz 18.11.2010, 21:10 |
| rigan инклуды от С/С++ не помогут ) если только как образец. Придется тебе ее переписать с учетом синтаксиса асма который используеш. И потом обычно при работе с структурами в одной из регистровых пар передаеться ее адрес. |
| Автор: ВладимирИванович 27.3.2017, 07:51 |
| Здравствуйте. Так как моя проблема соответствует теме и чтобы не плодить однотипных тем, решил написать в этой теме. Есть файл, содержащий текст. Большой файл, под гигабайт. В этом файле строки разной длины, а обработать надо строку полностью - поэтому я на fasm-е под win написал утилитку по такому (упрощённому) алгоритму: 1. открыть файл 2. запрос памяти ; CreateFileMapping 3. чтение файла в память ; MapViewOfFile 4. запрос памяти ; GetProcessHeap ; в памяти существующий файл и "плацдарм" для нового файла 5. перенос необходимого с существующего файла в "плацдарм" 6. создать новый файл 7. сохранить "плацдарм" в созданный файл Под wine отрабатывает так, как мне нужно. Но я пользуюсь линуксом и хочется переписать под линукс. И заморока тут на четвёртом пункте. Как бы это реализовать? |
| Автор: ВладимирИванович 1.4.2017, 08:28 | ||
Здравствуйте. Немного продвинулся. Теперь у меня ступор на таком куске кода:
Последняя команда прерывает работу, не позволяя записывать в память, хотя флаги разрешают, почему так? |
| Автор: Seenkao 5.9.2022, 07:59 |
| Если у кого возникнут вопросы подобного рода. https://www.youtube.com/watch?v=Wk4o7OjXmEw&list=PLKRkz7NEae7EF5wybV2NlNvJ-IcL9lzef - под видео так же выложены разные ссылки. https://disk.yandex.ru/d/oBK-BHew7hKFkQ - позже выложу на гитхаб. https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md |