2017-11-18 5 views
0

여기 CIL 명령의 목록을 볼 수 있습니다 :CIL을 사용하여 네트워크/http 요청을하는 방법은 무엇입니까?

https://en.wikipedia.org/wiki/List_of_CIL_instructions

나의 이해는 CIL이 CLR에서 실행된다는 점이다. 그러나이 지침 중 어떤 것이 http 요청을 만드는 데 사용될 수 있는지는 알 수 없습니다 (CLR에서 분명히 가능함).

아무 코드도 외부 정보를 얻지 못하는 것 같습니다.

무엇이 누락 되었습니까?

+3

추상화가 어떻게 작동하는지 이해해야합니다. 컴퓨터는 실제로 아무것도 할 수 없지만 숫자를 더하고, 빼고, 곱하고, 나눕니다. 웹 요청을하는 CLR이 아니라 기본 클래스 라이브러리의 수천 가지 지침이 있습니다. –

+0

Intel/AMD 프로세서에도 "HTTP 요청 작성"명령이 없습니다. 그래서 아무도 실제로 HTTP 요청을 할 수 없습니다. 이제까지. 죄송합니다. 우리는 심지어 그들이 CPU를 가지고 있는지 모르기 때문에 Blackberry를 사용해야합니다. –

+0

"어떻게 CIL이 외부 정보를 얻을 수 있습니까?"좋은 질문입니다. 아마도 이것은 더보기 좋게 수정 될 수 있습니다. – IllidanS4

답변

3

파일을 만드는 방법에 대한 지침도 없습니다. 일반 CIL을 사용하면 일부 작업을 수행 할 수 없다는 점에주의해야합니다. 소켓 열기, 디스크 쓰기, 화면 그리기 등은 하나의 CIL 명령어로 수행 할 수도없고 이러한 명령어로 완전히 분해 할 수도없는 작업입니다.

의 x86 어셈블리 코드는 PC 스피커를 사용하여 사운드를 재생 할 지침이 없다,하지만 분명히 (안 완전한 예)를 사용하여 수행 할 수 있습니다 : 여기

mov al, 0x36 
out 0x43, al 
mov ax, 11931 
out 0x40, al 
mov al, ah 
out 0x40, al 

out을 작성하는 데 사용할 수 있습니다 CPU 특정 포트 값. 이것은 "외부 세계"와 의사 소통하는 방법입니다. 이 경우 CPU는 가능한 한 코드를 실행하고 해석하며 포트 번호의 의미를 이해합니다. 직렬 포트와 통신하거나 단순히 어딘가에서 전압을 변경할 수도 있지만,이 시점에서 하드웨어를 만나기 때문에 더 이상 "지침"이 없으며 전기 만 제공됩니다.

CIL에는 opcode가 out이 아닙니다. 매우 안전하지 않고 확인할 수 없기 때문입니다. 대신 (이것은 아마도 사용자가 요구하는 것입니다.) 특정 메소드의 구현 위치를 지정하는 메소드에 대한 코드 구현 속성이 있습니다.

ImplAttr :: = ... | cil | 네이티브 | 런타임

이 속성들은 상호 배타적입니다. 메서드에 포함 된 코드 유형을 지정합니다.

cil은 본문이 cil 코드로 구성되도록 지정합니다. 방법이 추상으로 표기된 경우를 제외하고는 cil을 사용하는 경우 본문 본문을 제공해야한다.

네이티브은 메소드가 생성 된 의 특정 프로세서에 연결된 네이티브 코드를 사용하여 구현되었음을 지정합니다. 네이티브 메서드는 본문이 없어야하며 대신 이 본문을 선언하는 기본 메서드를 참조해야합니다. 일반적으로 CLI의 PInvoke 기능은 고유 메소드를 참조하는 데 사용됩니다.

런타임은 런타임의 메서드 구현이 자동으로 런타임에서 제공되며 주로 대리자 메서드에 사용되도록 지정합니다. (ECMA-335) 방법이 cil 표시

가 CIL의 옵 코드로 구성된 몸을 가져야한다, native 몸 어딘가에 위치한 기본 지침에 있음을 표시하며, runtime가에 방법을 실행하는 작업을 잎 런타임. 평소와 같이 call opcode를 사용하여 이러한 메서드를 호출합니다.

이러한 방법의 예 : 어떤 이유

.method assembly hidebysig static pinvokeimpl("kernel32.dll" autochar lasterr winapi bestfit:off) 
    bool DeleteFile(string path) cil managed preservesig 
{ 
} 

는 ILDASM은 ECMA-335에 따른 pinvokeimpl 직접 충돌하는 cil managed 표시. native unmanaged이어야하며, 왜 ildasm이 대신 이것을 표시하는지 잘 모르겠습니다.

외부 메소드 호출 메커니즘은 P/Invoke, QCall 및 FCall입니다. 그들에 관한 좋은 정보는 here입니다. CIL 코드가 시스템이나 런타임과 상호 작용할 수 있도록 정의 된 유일한 방법입니다.

5

무엇이 누락 되었습니까?

논리의 연쇄는 다음과 같이 간다 : 모든 유형의

  • 모든 CLR 방법은 CIL 명령어의 순서로 구현됩니다
  • CIL 지침은
  • 일부 작업에 필요한 특정 작업을 수행 할 수 있습니다 CIL에서 찾을 수없는 명령어의 조합.
  • 따라서 CLR 방법에서는 일부 작업을 수행 할 수 없습니다.

그런 다음 결론이 잘못되었음을 알리고 해당 논리 체계의 단계 중 하나가 틀림 없음을 정확하게 기록해 두십시오.

잘못된 것이 첫 번째 것입니다. CIL의 큰 덩어리로 메소드를 구현할 필요는 없으며,이 메소드는 원시 코드로 jit됩니다. 특히 extern 수정 자로 표시된 C# 메서드는 선언에서 언급 한 (아마도 관리되지 않는 코드 인) DLL로 컨트롤을 전송하여 구현됩니다. 따라서 CLR 관리 외부에서 수행하는 다른 언어로 작성된 코드는 CLR에서 실행되는 프로그램에서 호출 할 수 있습니다.

관련 문제