Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с системными вызовами 
V
    Опции темы
rigan
Дата 16.11.2010, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.11.2010

Репутация: нет
Всего: нет



Добрый вечер!
Решил поизучать ассемблер в целях саморазвития. Появились вопросы по работе с системными вызовами и структурами.
Например есть код на Си :
Код

int main(int argc, char *argv[])
{
struct stat status;
stat(argv[1], &status);
printf("%d\n", status.st_size);
return 0;
}

Подскажите как его можно реализовать с помощью системных вызовов? То есть, не через call stat, а именно  через int $0x80.



Это сообщение отредактировал(а) rigan - 16.11.2010, 20:47
PM MAIL   Вверх
airyashov
Дата 17.11.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: нет
Всего: 6



у gss есть ключ которым можно посмотреть asm листинг


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
rigan
Дата 17.11.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.11.2010

Репутация: нет
Всего: нет



В этом листинге,  через сall вызываются обвертки, а параметры передаются через стек. С этим я уже разобрался...
Мне хочется разобраться, как это работает через прерывание $int $0x80. Я не понимаю где и как распологать структуры...
Как вообще работать со структурами из  системных заголовочных файлов? Может мне кто-нибудь объяснить?
PM MAIL   Вверх
500mhz
Дата 18.11.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14




mov     edx,lun     ;3 параметр, длинна сообщения которое выводим
mov     ecx,hw      ;2 параметр, собственно адрес в памяти где лежит сообшение
mov     ebx,1       ;1 параметр, дескриптор куда пишем (в нашем случае stdout)
mov     eax,4       ;номер функции syscall write
int     0x80        ;дергаем прерывание


--------------------

PM MAIL ICQ   Вверх
rigan
Дата 18.11.2010, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.11.2010

Репутация: нет
Всего: нет



500mhz, спасибо. С этим  Разобрался.
А как быть со структурами? Например структура utmp. Как c ней работать? Может инклюдить заголовочные файлы надо?
PM MAIL   Вверх
500mhz
Дата 18.11.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



rigan
инклуды от С/С++ не помогут ) если только как образец. Придется тебе ее переписать с учетом синтаксиса асма который используеш.
И потом обычно при работе с структурами в одной из регистровых пар передаеться ее адрес.


--------------------

PM MAIL ICQ   Вверх
ВладимирИванович
Дата 27.3.2017, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.3.2017

Репутация: нет
Всего: нет



Здравствуйте. Так как моя проблема соответствует теме и чтобы не плодить однотипных тем, решил написать в этой теме.
Есть файл, содержащий текст. Большой файл, под гигабайт.
В этом файле строки разной длины, а обработать надо строку полностью - поэтому я на fasm-е под win написал утилитку по такому (упрощённому) алгоритму:

1. открыть файл
2. запрос памяти        ;    CreateFileMapping
3. чтение файла в память    ;    MapViewOfFile
4. запрос памяти        ;    GetProcessHeap
;  в памяти существующий файл и "плацдарм" для нового файла
5. перенос необходимого с существующего файла в "плацдарм"
6. создать новый файл
7. сохранить "плацдарм" в созданный файл

Под wine отрабатывает так, как мне нужно. Но я пользуюсь линуксом и хочется переписать под линукс. И заморока тут на четвёртом пункте. Как бы это реализовать?
PM MAIL   Вверх
ВладимирИванович
Дата 1.4.2017, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.3.2017

Репутация: нет
Всего: нет



Здравствуйте. Немного продвинулся. Теперь у меня ступор на таком куске кода:
Код

; создание и открытие файла
    mov    eax,SYS_open
    mov    ebx,nam_file
    mov    ecx,O_CREAT+O_TRUNC+O_RDWR
    mov    edx,S_IRUSR+S_IWUSR+S_IRGRP+S_IROTH
    int    80h
; запрос памяти
    xchg    edi,eax        ; EDI хендл файла
    mov    eax,192        ; вызов MMAP
    xor    ebx,ebx        ; начальный адрес
    mov    ecx,[size_file]    ; требуемый размер
    mov    edx,PROT_READ+PROT_WRITE    ; флаги
    mov    esi,MAP_SHARED    ; флаги
    mov    ebp,0        ; смещение
    int    80h
; копирование старого файла в новый
    mov    esi,[map_file] ; адрес с содержимым 1
    mov    edi,eax        ; адрес в выделенной памяти
    mov    ecx,[size_file] ; размер
    repnz    movsb        ; перенос



Последняя команда прерывает работу, не позволяя записывать в память, хотя флаги разрешают, почему так?

PM MAIL   Вверх
Google
  Дата 23.5.2019, 13:46 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Linux/Unix"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Linux/Unix | Следующая тема »


 




[ Время генерации скрипта: 0.1619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.