문제

어떻게 가상 기계를 생성하는 기본 컴퓨터 코드에 비행하고 그것을 실행?

할 수 있다고 가정하면 그림에 무엇이 있어 기계를 op-코드를 원하신을 방출하는,당신에 대해 어떻게 실제로 그것은?

그것은 뭔가를 해키으로 매핑을 기억하는 지침을 바이너리 코드,먹거리로 char*포인터 및 캐스팅으로 그것의 기능과 실행?

또는 당신을 생성 일시적 공유 라이브러리(.dll 또는.그렇게 또는 무엇이든)로 로드하는 메모리를 사용하여 표준과 같은 기능 LoadLibrary ?

도움이 되었습니까?

해결책

할 수 있습니다 그냥 확인 프로그램 카운터 점을 실행할 코드.데이터 수 있는 데이터 또는 코드입니다.에 86 프로그램 카운터는 EIP 등록합니다.IP 의 일부 EIP 의미시 포인터.JMP 명령이라는 점프하세요점프 후 EIP 포함됩니다 이 주소입니다.

그것은 뭔가를 해키으로 매핑을 기억하는 지침을 바이너리 코드,먹거리로 char*포인터 및 캐스팅으로 그것의 기능과 실행?

그렇습니다.이것은 하나의 방법으로 하고 있습니다.결과 코드는 것으로 캐스팅 포인터 기능 C

다른 팁

그것은 뭔가를 해키으로 매핑을 기억하는 지침을 바이너리 코드,먹거리로 char*포인터 및 캐스팅으로 그것의 기능과 실행?

그렇다면,당신은 그것을 하 C 또는 C++에서(또는 이와 유사한),정확히 무엇을 할 것이라고.

그것은 나타나 해키지만,실제로 이슈의 언어를 디자인합니다.을 기억하고,실제의 알고리즘을 사용하고 싶은 매우 간단하다:결정하는 지침을 사용하려면,드로 버퍼 메모리에,그리고 점프를 시작 부분의 버퍼입니다.

당신이 정말로 이렇게 하려고 하지만,당신이 얻을 럭셔리 호텔의 경우 호출할 때는 반환하는 C 프로그램입니다.나는 생각하면 나는 원하는 코드를 생성하려면 나를 찾 라이브러리를 돌보는 측면이 나를 위해.Nanojit 의 최근 뉴스에서;당신이 볼 수있는.

Yup.당신은 단지 구축 char*고 실행합니다.그러나,당신은 참고해야 몇 가지 정보.Char*야에서 실행 섹션의 메모리하고 있어야 합 적절한 정렬.

이외에 nanojit 당신은 또한 확인할 수 있습니다 LLVM 또 다른 도서관이 가능한 컴파일하는 다양한 프로그램의 표현에 내려 함수 포인터이다.그것은 인터페이스는 깨끗하고 생성된 코드 경향이 효율적입니다.

내가 알기로는 컴파일 모두에서 메모리를 가지고 있기 때문에 실행하는 몇 가지 추론하는 코드를 최적화하려면(즉:인라인을 통해 시간)그러나 당신이 볼 수있에 공동 소스 Common Language 인프라 2.0 터 릴리스입니다.전체 코드 베이스가 동일한다.그물을 제외한 지터 및 GC.

뿐만 아니라 회전자 2.0 있습니다 또한 살펴보 핫스팟 가상 기계 에 OpenJDK.

에 대해 생성 DLL:필요한 추가 I/O 한 것,연결 플러스,플러스 복잡성의 생성을 DLL 형식으로 만들 것이 훨씬 더 복잡하고 그들을 죽이는 성능또한,결국 당신은 여전히 함수를 호출의 포인터로드 코드,그래서...또한,JIT 컴파일 일어날 수 있는 하나의 방법에서 시간,그리고 당신이 원하는 경우에는 당신이 많이 생성하는 작은 DLLs.

"에 대해 실행"섹션을 요구 사항을 호출,mprotect()에 POSIX 시스템을 해결할 수 있는 권한(거의 비슷한 API on Win32).당신이해야 할는 큰 세그먼트 메모리는 대신에 한 번 방문하는 것이 너무 느려지 않습니다.

일반 86 당신이 통지하지 않을 것이 문제에 86PAE 또는 64 비트 AMD64/Intel64 비트 컴퓨터에 당신을 얻을 세그멘테이션.

그것은 뭔가를 해키으로 매핑 니모닉 지침을 바이너리 코드,먹거리로 char* 포인터 및 캐스팅으로 기능 실행?

Yes,작동되는지 확인합니다.

이를 위해서는 윈도우 설정해야 합니다 PAGE_EXECUTE_READWRITE 를 할당된 block:

void (*MyFunc)() = (void (*)()) VirtualAlloc(NULL, sizeofblock,  MEM_COMMIT, PAGE_EXECUTE_READWRITE);

//Now fill up the block with executable code and issue-

MyFunc();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top