#include <stdio.h>
#include <string.h>
#include <dlfcn.h>
#include <mach-o/dyld.h>
#include "test_support.h"
extern struct mach_header __dso_handle;
int patatino(void) {
return 666;
}
int main(int argc, const char* argv[], const char* envp[], const char* apple[]) {
NSSymbol sym = NSLookupSymbolInImage(&__dso_handle, "_main", NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
if ( sym == NULL ) {
FAIL("can't find main");
}
void* mainAddr = NSAddressOfSymbol(sym);
if ( mainAddr != &main ) {
FAIL("address returned %p is not &main=%p", mainAddr, &main);
}
NSSymbol sym2 = NSLookupSymbolInImage(&__dso_handle, "_patatino", NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
if ( sym2 == NULL ) {
FAIL("cant' find patatino");
}
void* funcAddr = NSAddressOfSymbol(sym2);
if ( funcAddr == NULL ) {
FAIL("address returned for patatino is NULL");
}
int (*func_ptr)(void) = funcAddr;
int result = (*func_ptr)();
if ( result != 666 ) {
FAIL("can't call the function correctly");
}
if ( NSAddressOfSymbol(NULL) != NULL ) {
FAIL("NULL not handle");
}
PASS("Success");
}