기능적으로 바이너리(예: 셸에서 실행될 수 있는 ELF 바이너리)는 특정 대상 ABI의 기계어 코드를 바이너리 형식으로 포함하는 파일이라는 점에서 라이브러리와 다소 유사합니다.
차이점은 다음과 같습니다.
- 실행 가능한 바이너리에는 잘 정의된
main()
서명(매개변수 및 반환 값)이 있는 잘 정의된 진입점(C의 경우)이 있는 반면, 동적 라이브러리에는 임의의 이름과 서명이 있는 진입점이 무제한 있을 수 있으며 각 진입점을 알아야 합니다. 이용을 원하는 발신자에게. - 실행 가능한 바이너리는 새로 생성된 자체 프로세스에서 실행되는 반면 동적 라이브러리 코드는 호출자의 프로세스(처음에는 스레드이기도 함)에서 실행됩니다.
그러나 구현 측면에서는 파일 형식이 얼마나 다른지 모르겠습니다.
그러나 이론적으로는 실행 가능한 바이너리를 가져와 변환하여 단일 함수로 내보내는 것이 가능해야 합니다 int main (int argc, char *argv[])
.
기능적으로 내가 볼 수 있는 유일한 잠재적 장애물은 실행 가능한 바이너리가 프로세스의 "보스"가 될 것으로 기대하는 반면, 라이브러리 기능은 분명히 그렇지 않다는 것입니다. "보스"가 일부 리소스에 대한 독점 제어를 기대하는 경우(예: 첫 번째 전역 변수 이동) 동적으로 할당된 공간 대신 하드 코딩된 메모리 주소에 배치되므로 충돌이 발생하고 예측할 수 없는 동작이 발생할 수 있습니다.
질문: 컴파일된 ELF 바이너리를 다른 프로세스에서 호출하고 실행할 수 있는 동적 라이브러리로 변환할 수 있는 도구가 있습니까?