Как определить буфер для вызова sys_read IA32 - PullRequest
1 голос
/ 24 сентября 2011

У меня проблемы с использованием системного вызова sys_read из программы IA32 Assembler в Linux.Как правильно определить буфер?

Это важная часть того, что у меня есть:

    movl $(SYS_read), %eax
    movl $(STDIN), %ebx   
    movl BUFFADDR, %ecx  
    movl 2, %edx
    int $0x80   
    movl $eax, $ebp // number of read bytes

, где SYS_read и STDIN определены в начале.Где правильное место для установки буфера?(BUFFADDR в вставленном коде).

Существуют ли какие-либо библиотеки ввода-вывода для IA32 Assembler?Или это самый простой способ прочитать значение из Stdin?Я не смог найти рабочий пример выполнения такой операции, надеюсь, кто-то может помочь.

1 Ответ

1 голос
/ 24 сентября 2011

«BUFFADDR» - это просто адрес некоторой области памяти, которая достаточно велика, чтобы вместить считываемые данные (таким образом, два байта в вашем случае). Есть в основном два места, откуда вы можете получить память: текущий стек или куча. Для небольшого буфера вы, вероятно, можете выделить его из стека (просто увеличьте указатель стека, чтобы зарезервировать некоторое пространство), для кучи см. Системный вызов 'brk'.

Вот некоторые подробности о фреймах стека (включая информацию о передаче аргументов, которая вам пока не нужна): http://www.cs.mun.ca/~rod/winter2004/cs3724/notes/frame.html

Если вам нужны библиотеки ввода-вывода, то по определению вам не нужен ассемблер. Библиотека IO, которую вы ищете, это библиотека C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...