2

다음 프레젠테이션을 읽었습니다. http://wingolog.org/pub/qc-2012-js-slides.pdf 자바 최적화에서 사용되는 기술로 (4,10,19) 인라인 ASM 생성에 대해 설명합니다. 다음 논문에서생성 된 어셈블러 인라인 실행

: 30 페이지 및 31에서 https://sites.google.com/site/juliangamble/Home/Compilers%20Tutorial%202006-09-16.pdf?attredirects=0&d=1 그들은 연속적으로 연결되어 후속 OS 프로세스에서 실행되는 ASM을 생성하는 방식을 사용에 대해 이야기.

ASM을 생성하고 기존 프로세스 내에서 실행하려는 시나리오는 어떻습니까? (즉, 후속 링크가없고 별도의 단계로 실행). 가정하면으로 가정합니다 (예 : C). ASM을 생성하고, 메모리 영역 (데이터로 코드)에 바이트를 쓰고, 함수 헤더와 리턴을 추가합니다 (C 호출자와 호환 가능합니다 위의 Goloum 논문 3 페이지 참조) 그런 다음 데이터 포인터를 가져 와서 함수 포인터로 변환하고 코드 (코드를 코드로 - 코드에서 코드로 데이터)로 호출합니다.

내 질문은

입니다.

(a)이 인라인 코드 생성 및 실행의 용어는 무엇입니까?

(b) 이것에 대한 간단한 '안녕하세요 세상'C 예제가 있습니까?

+0

JIT (just-in-time) 컴파일이라고합니다. Racket과 Larceny와 같은 많은 Scheme 구현체가이를 사용합니다. –

+0

이것은이 질문과 매우 흡사합니다. http://stackoverflow.com/questions/3073653/can-function-pointers-be-used-to-run-data (예제가없는 경우) -이 코드는 자체 수정 코드라고합니다. 나는 내 경우의 분류에 동의하지 않는다. – hawkeye

답변

1

아주 좋은 예가 here입니다. 다시 그들은 자기 수정 코드의 용어를 사용합니다.

또 하나 here.이

  • 트램펄린은 JIT 컴파일이
  • 보안에 미치는 영향 (안전하지 않은 코딩/악성 코드)
  • 있다
    • Metamorphism은 :

      Here 그들은 그것을 네 가지 범주 (사용 사례를) 제공 LISP가 진정으로 자체 수정 가능한지에 관한 토론 here 결국 그렇지 않다고 결론 지었다.

    관련 문제