왜그런지 인터넷을 찾아보아도 답이 없길래 직접 확인해보았다.
사건의 발단은 Kernel/string.h 에 strnstr 이 선언되어 있다.
extern int strcasecmp(const char *s1, const char *s2);
extern int strncasecmp(const char *s1, const char *s2, size_t n);
extern char *strnstr(char *s, const char *find, size_t slen);
extern char *strchr(const char *s, int c);
extern char *STRDUP(const char *, int);
extern int strprefix(const char *s1, const char *s2);
그런데 로딩시도를 하면 자꾸 아래 같은 에러가 발생한다.
(kernel) kxld[com.dplab.driver.xxxxio]: The following symbols are unresolved for this kext:
(kernel) kxld[com.dplab.driver.xxxxio]: _strnstr
그래서 System.kext/Plugins 에 존재하는 라이브러리 심볼을 덤프 해봤다.
(nm 명령어는 display name list 명령어로 심볼정보를 출력해줌)
nm /System/Library/Extensions/System.kext/PlugIns/Libkern.kext/Libkern | grep str
U __ZN12OSSymbolPool18reconstructSymbolsEv
U __ZNK11OSMetaClass18instanceDestructedEv
U __ZNK11OSMetaClass19instanceConstructedEv
U _copyinstr
U _copyoutstr
U _lck_mtx_destroy
U _lck_rw_destroy
U _lck_spin_destroy
U _strcasecmp
U _strcat
U _strchr
U _strcmp
U _strcpy
U _strlcat
U _strlcpy
U _strlen
U _strncasecmp
U _strncat
U _strncmp
U _strncpy
U _strnlen
U _strprefix
U _strtol
U _strtoq
U _strtoul
U _strtouq
음.. Libkern 에 _strnstr 이 진짜 없다. ....
어디있는지 다 찾아보니..
nm /System/Library/Extensions/System.kext/PlugIns/Private.kext/Private | grep strnstr
U _strnstr
Private.kext 에 있다.
그래서 Private.kext 를 링크해보니..
Diagnostics for /tmp/xxxxxio.kext:
Dependency Resolution Failures:
Only Apple kexts may link against com.apple.kpi.private.
쓰지 말란다. ....
머 이런...
암튼 다른 분들은 삽질하지 마시길..
댓글 없음:
댓글 쓰기