loadquery 서브루틴

용도

로드 또는 실행 서브루틴의 오류 정보를 반환하고 현재 프로세스에 대해 로드된 객체 파일 목록도 제공합니다.

구문

int loadquery( Flags Buffer,  BufferLength)
int Flags;
void *Buffer;
unsigned int BufferLength;

설명

로드 쿼리 서브루틴은 호출 프로세스가 실행한 마지막 로드 또는 실행 서브루틴에서 보고된 오류에 대한 자세한 정보를 가져옵니다. 로드 쿼리 서브루틴은 현재 프로세스에 대해 로드된 모든 객체 파일의 객체 파일 이름 목록 또는 프로세스 실행 시 사용된 라이브러리 경로를 가져오는 데에도 사용할 수 있습니다.

매개변수

항목 설명
버퍼 정보를 저장할 버퍼를 가리킵니다.
BufferLength 버퍼 매개변수에서 사용할 수 있는 바이트 수를 지정합니다.
플래그 로드 쿼리 서브루틴의 동작을 다음과 같이 지정합니다:
L_GETINFO
현재 프로세스에 대해 로드된 모든 객체 파일 목록을 반환하고 이 목록을 Buffer 매개변수에 저장합니다. 오브젝트 파일 정보는 sys/ldr.h 파일에 정의된 대로 일련의 LD_INFO 구조에 포함되어 있습니다. 각 구조에는 가상 메모리의 모듈 위치와 메모리에 모듈을 로드하는 데 사용된 경로 이름이 포함됩니다. LD_INFO 구조의 파일 설명자 필드는 이 함수에 의해 채워지지 않습니다.
L_GETMESSAGE
이전에 호출된 로드 또는 실행 함수의 실패를 설명하는 자세한 오류 정보를 반환하고 오류 메시지 정보를 버퍼에 저장합니다 이 함수가 성공적으로 반환되면 버퍼의 시작 부분에는 문자 포인터 배열이 포함됩니다. 각 문자 포인터는 로더 오류 메시지가 포함된 버퍼의 문자열을 가리킵니다. 문자 배열은 널 문자 포인터로 끝납니다. 각 오류 메시지 문자열은 ASCII 메시지 번호와 0자 이상의 오류 관련 메시지 데이터로 구성됩니다. 유효한 메시지 번호는 sys/ldr.h 파일에 나열되어 있습니다.

다음과 같이 표준 시스템 명령 /usr/sbin/execerror 사용하여 L_GETMESSAGE 함수가 반환하는 오류 메시지의 형식을 지정하고 표준 오류에 기록할 수 있습니다:

char *buffer[1024];
buffer[0] = "execerror";
buffer[1] = "name of program that failed to load";
loadquery(L_GETMESSAGES, &buffer[2],\
  sizeof buffer-2*sizeof(char*));
execvp("/usr/sbin/execerror",buffer);

이 샘플 코드는 표준 오류에 메시지가 기록된 후 애플리케이션이 종료되도록 합니다.

L_GETLIBPATH
프로세스 실행 시 사용된 라이브러리 경로를 반환합니다. 라이브러리 경로는 널로 끝나는 문자열입니다.
L_GETXINFO
현재 프로세스에 대해 로드된 모든 객체 파일 목록을 반환하고 이 목록을 Buffer 매개변수에 저장합니다. 오브젝트 파일 정보는 sys/ldr.h 파일에 정의된 대로 일련의 LD_XINFO 구조에 포함되어 있습니다. 각 구조에는 가상 메모리의 모듈 위치와 메모리에 모듈을 로드하는 데 사용된 경로 이름이 포함됩니다. LD_XINFO 구조의 파일 설명자 필드는 이 함수에 의해 채워지지 않습니다.

리턴 값

로드 쿼리가 성공적으로 완료되면 요청된 정보를 Buffer BufferLength 매개변수로 지정된 호출자의 버퍼에 반환합니다.

오류 코드

로드 쿼리 하위 루틴은 반환 코드가 -1 반환되고 오류 조건이 감지되면 errno 전역 변수가 다음 중 하나로 설정됩니다:

항목 설명
ENOMEM Buffer BufferLength 매개 변수에 지정된 호출자의 버퍼가 너무 작아서 요청된 정보를 반환할 수 없음을 나타냅니다. 이 경우 버퍼의 정보가 정의되지 않습니다.
EINVAL Flags 매개변수에 지정된 함수가 유효하지 않음을 나타냅니다.
기본값 버퍼 매개변수에 지정된 주소가 유효하지 않음을 나타냅니다.