main-no-syms.c   [plain text]



// BUILD:  $CC main-no-syms.c            -o $BUILD_DIR/dladdr-stripped.exe
// BUILD:  strip $BUILD_DIR/dladdr-stripped.exe

// RUN:  ./dladdr-stripped.exe


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>
#include <mach-o/dyld_priv.h>



///
/// verify dladdr() returns NULL for a symbol name in a fully stripped 
/// main executable (and not _mh_execute_header+nnn).
///

int main()
{
    printf("[BEGIN] dladdr-stripped\n");

    Dl_info info;
    if ( dladdr(&main, &info) == 0 ) {
        printf("[FAIL] dladdr(&main, xx) failed\n");
        return 0;
    }

    if ( info.dli_sname != NULL ){
        printf("[FAIL] dladdr() returned: \"%s\" instead of NULL\n", info.dli_sname);
        return 0;
    }

    printf("[PASS] dladdr-stripped\n");
    return 0;
}