#include <stdio.h>
#include <stdint.h>
struct foo
{
int padding1;
unsigned char padding3;
void* ptr;
int padding2;
};
struct foo* start_address(void* ptr)
{
intptr_t offset = (unsigned int)&((struct foo*)0)->ptr;
return (struct foo*)(ptr - offset);
}
int main(void) {
struct foo test;
printf("%p == %p\n", &test
, start_address
(&test.
ptr)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnN0cnVjdCBmb28KewoJaW50IHBhZGRpbmcxOwoJdW5zaWduZWQgY2hhciBwYWRkaW5nMzsKCXZvaWQqIHB0cjsKCWludCBwYWRkaW5nMjsKfTsKCnN0cnVjdCBmb28qIHN0YXJ0X2FkZHJlc3Modm9pZCogcHRyKQp7CglpbnRwdHJfdCBvZmZzZXQgPSAodW5zaWduZWQgaW50KSYoKHN0cnVjdCBmb28qKTApLT5wdHI7CglyZXR1cm4gKHN0cnVjdCBmb28qKShwdHIgLSBvZmZzZXQpOwp9CgppbnQgbWFpbih2b2lkKSB7CglzdHJ1Y3QgZm9vIHRlc3Q7CglwcmludGYoIiVwID09ICVwXG4iLCAmdGVzdCwgc3RhcnRfYWRkcmVzcygmdGVzdC5wdHIpKTsKCXJldHVybiAwOwp9Cg==