LINUX.ORG.RU

SysCall для получения следующего файла.


0

0

Подскажите номер сискола для получения имени следующего файла. Помниться в досе была такая функция а есть что нибудь сдесь для этого. Желательно номер, поскольку работаю на асме (NASM). Имеется список сисколов до 190 но я чё-то не нашел там такого а надо эту операцию выполнить на асме.

Заранее спасибо!!!

★★★★★

РЕ

[murr@win2k murr]$ grep getdents /usr/src/linux/arch/i386/kernel/entry.S
.long SYMBOL_NAME(sys_getdents)
.long SYMBOL_NAME(sys_getdents64) /* 220 */
[murr@win2k murr]$

Murr ★★
()
Ответ на: комментарий от Murr

Извиняюсь а можно назвать какие регистры используются для вызова (т.е. какие аргументы) и куда и какие выводятся результаты. По указанному ману есть только сишный образец.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

иди вот сюда - http://www.linuxassembly.org/asmutils.html качай оттуда исходники asmutils. там есть папка inc где прописаны макросы на сисколлы. можно писать sys_write 1, edx, 10 вместо ручного заполнения регистров и вызова int80 в src можно посмотреть примеры всяких мелких программ

grustnoe ★★
()
Ответ на: комментарий от grustnoe

Я не очень понял а это для кокого асма похоже на фасм, это так. И так вопрос невзначай есть ли конвертор кода из фасма в насм , а то был случай наимел гимороя с переводом с AT&T на Intel.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

спасибо будем изучать примеры но тем неменее может, так на всякий пожарный всё же подкинет пример того как это делается. Буду очень очень очень признателен. И ещё раз спасибо!!!

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

Это же стандартная fastcall функция.
Посмотри соглашения о передачи в другие функции с тремя параметрами.

Murr ★★
()
Ответ на: комментарий от Murr

Насчет fastcall я малость соврал, но смысл в том, что параметры в ядро передаются через регистры, стек при вызове syscall функций совпадает с описанным в комментариях к kernel/arch/i386/entry.S - оттуда и пляши.

Murr ★★
()
Ответ на: комментарий от Murr

Я понял какие регистры а что в них надо положить, и что и куда положиться после выполнения прерывания.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

RE:

У как всё запущено...

Делаем man:
_syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count);

int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);

Итого: eax=__NR_getdents ebx=fd, ecx=dirp, count=edx, ответ как обычно вернется в eax (0, если всё ок, -errno, если всё плохо).

Успехов.

Murr ★★
()
Ответ на: RE: от Murr

Ну допустем не запущено. Я не понял мне нужна была функция возвращяющая имя следующего файла на диске, а сдесь вроде как ничего не возвращается.

cyclon ★★★★★
() автор топика
Ответ на: RE: от Murr

а для чего?

cyclon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.