2011-09-24 6 views
1

Linux의 IA32 어셈블러 프로그램에서 sys_read 시스템 호출을 사용하는 데 문제가 있습니다. 버퍼를 정의하는 올바른 방법은 무엇입니까?IA32 sys_read 호출을위한 버퍼를 정의하는 방법

이것은 내가 지금까지 가지고있는 관련 부분 : SYS_read 및 STDIN가 처음에 정의되어

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

. 버퍼를 설정하는 올바른 위치는 어디입니까? (붙여 넣은 코드의 BUFFADDR).

IA32 어셈블러에 대한 I/O 라이브러리가 있습니까? 또는 Stdin에서 값을 읽는 가장 쉬운 방법입니까? 이러한 작업을 수행하는 작업 예제를 찾을 수 없으므로 다른 사람이 도울 수 있기를 바랍니다.

답변

1

"BUFFADDR"은 읽는 데이터를 저장할 수있는 메모리 영역의 주소입니다 (따라서 2 바이트). 기본적으로 메모리를 확보 할 수있는 위치는 현재 스택 또는 힙입니다. 작은 버퍼의 경우 스택에서 할당 할 수 있습니다 (일부 공간을 예약하기 위해 스택 포인터를 범프하는 것). 힙에 대해서는 'brk'시스템 호출을 참조하십시오.

여기 스택 프레임에 대한 몇 가지 세부 사항을의 (하지만, 아직 필요가 없습니다 통과 인수에 대한 물건 포함) : http://www.cs.mun.ca/~rod/winter2004/cs3724/notes/frame.html

것은 당신이 어셈블러를하지 않으려는 정의에 의해 다음 꽤 많은 IO 라이브러리합니다. 당신이 찾고있는 입출력 라이브러리는 C 라이브러리입니다.

관련 문제