libc를 사용하지 않고 입력 또는 출력물을 어떻게 가져 옵니까? 시스템 호출을 사용할 수는 있지만 도움이되는지는 알지 못했습니다.libc를 사용하지 않고 입력하기
답변
플랫폼 독립적 인 방법이 없습니다. 실제로, libc
을 갖는 요지는 대부분의 시스템이 제공하는 기능 집합과 공통 인터페이스를 갖는 것이지만 근본적으로 다른 방식으로 수행됩니다.
가장 좋은 방법은 현재 사용중인 시스템의 설명서를 참조하는 것입니다. OS의 인터럽트 집합을 검색 한 다음 asm
키워드를 사용하여 OS에 입력 또는 디스플레이 출력을 읽도록 지시하는 어셈블리 명령어를 작성할 수 있습니다. 파일 디스크립터에서 입출력을하기 위해 OS가 제공하는 라이브러리를 살펴본 다음 대신에 그 함수를 사용할 수 있습니다. 또는 프로세스 생성 라이브러리를 살펴본 다음 콘솔에서 데이터를 읽거나 쓰는 프로세스를 생성 할 수 있습니다. 여기서 두 번째 프로그램은 libc
을 사용합니다. 그러나 이들 중 어느 것도 휴대용이 될 수는 없습니다.
희망이 도움이됩니다.
나는 시스템 호출 ABI가 어떻게 작동하는지에 대한 아이디어를 얻기 위해 write(2)
을 gdb로 밟았다.
어쨌든, libc가 없습니다. 특별한 트릭이 없다면 cc (1) 컴파일러/링커 프론트 엔드는 여전히 libc와 연결되지만 아무 것도 사용하지 않을 것임을주의하십시오. C 런타임 시작 코드는 일부 libc 호출을 만들지 만이 프로그램은 실행되지 않습니다.
void mywrite(int fd, const void *b, int c) {
asm("movl $1, %eax");
asm("syscall");
}
int main(void) { const char *s = "Hello world.\n"; return mywrite(1, s, 13), 0; }
아니, LIBC를 사용하지 않고 리눅스 x64 – user1888502
아하, 그럼 당신은'asm()'명령문을 사용하거나 x86_64 ABI가 커널에 함정하기 위해 사용하는 명령에 대한 자신의'write.s' 래퍼를 입력 할 수 있습니다. – DigitalRoss
시스템 호출을 구현하거나 호출해야하는 asm 문은 어떻게 사용합니까? 입력을 받아서 출력을 보여 주려고? – user1888502
- 1. 'mysql_connect()'을 사용하지 않고 성능을 사용하지 않고
- 2. 레일을 사용하지 않고 모델을 사용하지 않고
- 3. 문자열 입력하기
- 4. Perl에서 텍스트를 입력하기 전에 기호를 사용하지 않으려면 정규식을 사용해야합니까?
- 5. 파일에 사용자 입력하기
- 6. 브라우저를 사용하지 않고 Flash를 사용하지 않고 글꼴을 포함시키는 방법은 무엇입니까?
- 7. IIS를 사용하지 않고 GZIP?
- 8. 탭 - TabHost를 사용하지 않고
- 9. 플로트를 사용하지 않고 정렬
- 10. 커서를 사용하지 않고 삽입
- 11. JPA 쿼리를 사용하지 않고
- 12. 타일을 사용하지 않고
- 13. 목록을 사용하지 않고 최소
- 14. 사용하지 않고 파일 닫기
- 15. jQuery를 사용하지 않고 stopPropagation
- 16. MFMessageComposeViewController를 사용하지 않고
- 17. CASE 문을 사용하지 않고
- 18. 파일을 사용하지 않고 익스플로잇하기
- 19. 사용하지 않고 명세서로 필터링
- 20. ? strtime을 사용하지 않고?
- 21. onSharedPreferenceChanged getDefaultSharedPreferences를 사용하지 않고
- 22. 블록을 사용하지 않고 dispatch_async
- 23. ipython을 사용하지 않고 응답을
- 24. "+"를 사용하지 않고 추가
- 25. 변환 쉼표를 사용하지 않고
- 26. will_paginate activerecord를 사용하지 않고
- 27. WSAIoctl을 사용하지 않고 AcceptEx
- 28. + 연산자를 사용하지 않고 추가
- 29. openfiledialog를 사용하지 않고
- 30. ; webrole을 사용하지 않고?
'libc'는 libc없이 I/O를 수행 할 수 있지만, 의미있는 대답을 얻으려면 어떤 시스템인지 알려줘야합니다. – FatalError
x64 시스템이 내가 사용하고있는 것임 – user1888502
'libc'에 대한 언급이 주어지면 이것이 유닉스 또는 리눅스 문제인 것처럼 보입니다. 그러나 예, 대상 플랫폼을 확인하는 것이 좋을 것입니다. – DigitalRoss