#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <uuid/uuid.h>
#include <mach-o/dyld_priv.h>
#include "test_support.h"
extern void* __dso_handle;
extern int foo1();
extern int foo2();
extern int foo3();
int myfunc()
{
return 3;
}
int myfunc2()
{
return 3;
}
static int mystaticfoo()
{
return 3;
}
int mydata = 5;
int myarray[10];
int main(int argc, const char* argv[], const char* envp[], const char* apple[]) {
int mylocal;
const void* addresses[12];
addresses[0] = &myfunc;
addresses[1] = &myfunc2;
addresses[2] = &mystaticfoo;
addresses[3] = &__dso_handle;
addresses[4] = &mydata;
addresses[5] = &myarray;
addresses[6] = &mylocal; addresses[7] = &foo1;
addresses[8] = &foo2;
addresses[9] = &foo3;
addresses[10] = &fopen;
addresses[11] = &fclose;
struct dyld_image_uuid_offset infos[12];
_dyld_images_for_addresses(12, addresses, infos);
for (int i=0; i < 12; ++i) {
uuid_string_t str;
uuid_unparse_upper(infos[i].uuid, str);
LOG("0x%09llX 0x%08llX %s", (long long)infos[i].image, infos[i].offsetInImage, str);
}
if ( infos[0].image != infos[1].image )
FAIL("0 vs 1");
else if ( infos[0].image != infos[2].image )
FAIL("0 vs 2");
else if ( infos[0].image != infos[3].image )
FAIL("0 vs 3");
else if ( infos[0].image != infos[4].image )
FAIL("0 vs 4");
else if ( infos[0].image != infos[5].image )
FAIL("0 vs 5");
else if ( infos[6].image != NULL )
FAIL("6 vs null ");
else if ( infos[7].image != infos[8].image )
FAIL("7 vs 8");
else if ( infos[7].image != infos[9].image )
FAIL("7 vs 9");
else if ( infos[0].image == infos[7].image )
FAIL("0 vs 7");
else if ( infos[10].image != infos[11].image )
FAIL("10 vs 11");
else if ( uuid_compare(infos[0].uuid, infos[1].uuid) != 0 )
FAIL("uuid 0 vs 1");
else if ( uuid_compare(infos[0].uuid, infos[2].uuid) != 0 )
FAIL("uuid 0 vs 2");
else if ( uuid_compare(infos[0].uuid, infos[3].uuid) != 0 )
FAIL("uuid 0 vs 3");
else if ( uuid_compare(infos[0].uuid, infos[4].uuid) != 0 )
FAIL("uuid 0 vs 4");
else if ( uuid_compare(infos[0].uuid, infos[5].uuid) != 0 )
FAIL("uuid 0 vs 5");
else if ( uuid_is_null(infos[6].uuid) == 0 )
FAIL("uuid 6 vs null");
else if ( uuid_compare(infos[7].uuid, infos[8].uuid) != 0 )
FAIL("uuid 7 vs 8");
else if ( uuid_compare(infos[7].uuid, infos[9].uuid) != 0 )
FAIL("uuid 7 vs 9");
else if ( uuid_compare(infos[0].uuid, infos[7].uuid) == 0 )
FAIL("uuid 0 vs 7");
else if ( uuid_compare(infos[10].uuid, infos[11].uuid) != 0 )
FAIL("uuid 10 vs 11");
else
PASS("Success");
}