2014-10-17 3 views
-1

저는 리눅스, 어셈블리 프로그래밍 (GAS) 및 영어에 대한 초보자입니다. 미안, 내가 뭔가 잘못 쓰는 경우. 나는 Google 번역이 나쁘지 않은 모두를 쓸 수있을만큼 도움이되기를 바랍니다.쓰기 시스템 콜을 쓸 때 리눅스는 무엇을합니까?

어떤 라이브러리 (예 : printf())에서 함수를 호출하지 않고도 .data 섹션에 저장된 숫자 세트를 텍스트 파일에 쓰는 방법을 알고 싶습니다.이 작업은 어셈블러에서만 수행 할 수 있습니다. 나는 기성품 해결책을 원하지 않는다. 필자의 글쓰기 후 리눅스 커널이 무엇을하는지 알고 싶다. 어떻게 작동합니까? 어떻게 설계 되었습니까?

STDOUT에 숫자 목록을 인쇄하려고하는데 단말기에 홀수 기호가 표시됩니다. 필자는 쓰기 시스템 호출을 올바르게 사용하는 방법을 이해하지 못하기 때문에이 문제가 발생했다고 생각했습니다.

이것은 내가이 코드는 .ascii "Hello world\0"을 위해 잘 작동하지만 숫자의 목록은 지금

.section .data  
list:        .long 12, 31, 42 

.section .text  
.globl _start 
_start: 
movl $4, %eax 
movl $1, %ebx 
movl $list, %ecx 
movl $12, %edx 
int $0x80 
movl $1, %eax 
movl $0, %ebx 
int $0x80 

에 대한 얻었다 것입니다.

+0

이것은 엄청나게 광범위한 주제이며 당신이 가지고 있지 않은 것으로 의심되는 것을 이해하기 위해서는 많은 배경 지식이 필요합니다.우리는 당신이 지금까지 끼워 넣었던 노력과 당신이 붙어있는 곳을 보여 주면서 그것을 한 입 크기의 덩어리로 나누고 싶을 것입니다. – tangrs

+0

http://www.tldp.org/HOWTO/Assembly-HOWTO/ 읽기 관련성이 있습니다. –

+0

조나단 바틀렛 (Jonathan Bartlett)의 "프로그래밍 프로그래밍"을 읽었습니다. 어느 것이 더 낫습니까? – user2422443

답변

4

우선 :

심지어 라이브러리 함수 (예 : libc.so)는 내부적으로 시스템 호출을 사용합니다.

더 많거나 적은 시스템 호출은 CALL 명령어의 특수한 변형입니다. 이 명령어는 일부 코드를 호출하지만 (CALL처럼) CPU를 권한 모드 (이 모드에서는 CPU가 사용자 모드에서 액세스 할 수없는 주소에 액세스 할 수 있음) 및 호출 할 함수가있는 주소 (특권 모드에서만 액세스 할 수있는 특수 레지스터로 정의 됨) 고정되어 있습니다.

호출되는 함수는 EAX 레지스터를 평가하고 (x86 용 32 비트 Linux라고 가정) 원하는 작업을 수행합니다 (EAX가 4이면 "쓰기"가 수행됨).

시스템 호출을 넘어서는 코드는 매우 크고 복잡합니다. 결국 시스템 호출은 예를 들어 디스크 드라이브 나 그래픽 카드에 속하는 I/O 포트와 메모리 영역에 데이터를 쓰게됩니다.

문자를 화면에 쓰려면 예를 들어 이전 커널의 매핑 된 주소 0xC00B8000에 해당하는 매핑되지 않은 주소 0xB8000에있는 그래픽 메모리에 데이터가 기록됩니다.

"mov"명령은 이러한 주소에 일부 데이터를 쓰면 화면이 텍스트 모드 일 때 문자가 화면에 표시됩니다.

그러나이 주소 (0xC00B8000)는 CPU가 권한 모드 일 때만 액세스 할 수 있습니다. 그렇지 않으면 예외 (이것은 소프트웨어에 의해서가 아니라 하드웨어에 의해 야기되는 어떤 종류의 "호출"입니다)가 발생합니다; 이 경우에 호출 된 루틴은 "버스 오류"와 같은 내용을 인쇄하고 프로그램을 중지합니다.

은 "쓰기"시스템 호출 화면 또는 파일에 ASCII 문자를 기입한다 : 편집 된 질문에 대해

--- 편집 ---

.

숫자를 쓰려면 숫자를 ASCII 문자 시퀀스로 변환해야합니다.

+0

와우! 그것은 복잡합니다. 고맙습니다! 나는 나의 질문을 편집하고 더 구체적으로 만들었다. 당신은 그것을보고 나를 생각의 방향으로 보여줄 수 있습니까? 올바르게하기 위해서 내가 이해해야하는 것은 무엇입니까? – user2422443

+0

알았습니다! 그게 내가 필요한거야! 고마워요! – user2422443

관련 문제