바이너리가 있습니다. mmap()을 사용하여 메모리에 씁니다. 그럼 내가 할당 된 메모리에서 바로 exec하려고하지만 지금은 아무런 결과가 없습니다. 누구든지 도와 줄 수 있습니까? 예를 들면 내가 우분투, 이진 (C 안녕하세요 세계)의 크기 FILE_SIZE, 다음의 기술자 fd와 오전 ) 감사합니다 :할당 된 메모리에서 mmaped 바이너리/코드를 바로 exec하는 방법
addr = mmap(NULL, file_size, PROT_READ | PROT_EXEC, MAP_PRIVATE, fd, pa_offset);
if (addr == MAP_FAILED)
handle_error("mmap");
그래서 내가 그것을
예를 묻는 것뿐만 아니라 질문에 코드를 표시해야합니다. 실행 권한이있는 페이지가 있습니까? 실행할 "일부 바이너리"코드는 무엇입니까? 당신이 그것을 실행하려고하면 어떻게됩니까? 아무것도 아냐, 세그 폴트? 더 많은 세부 사항을 추가하십시오. – DUman
이렇게해야 할 필요가 있습니까? 다른 프로세스에서 프로그램을 시작하는 일반적인 방법은 exec() 패밀리의 함수 중 하나를 사용하는 것입니다 ... – Rene
"플러그인"을 사용하는 프로그램을 작성하려는 경우 C 라이브러리를 사용했습니다 : 플러그인을 실행 파일이 아닌 공유 객체로 빌드 한 다음 ['dlopen' 및'dlsym'] (https : //linux.die)을 사용하십시오.net/man/3/dlopen)를로드하여 호출하십시오. 즉석에서 기계 코드를 생성하여 실행하는 경우 ("적시"컴파일러 또는 유사), 아마도 [W^X 정책] (https : //en.wikipedia)을 파울 것입니다. .org/wiki/W % 5EX); 코드를 메모리에 쓴 다음 [mprotect'] (https://linux.die.net/man/2/mprotect)를 사용하여 실행 가능하게 만들어야합니다. C 라이브러리는 도움이되지 않습니다. – zwol