fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. struct foo
  5. {
  6. int padding1;
  7. unsigned char padding3;
  8. void* ptr;
  9. int padding2;
  10. };
  11.  
  12. struct foo* start_address(void* ptr)
  13. {
  14. intptr_t offset = (unsigned int)&((struct foo*)0)->ptr;
  15. return (struct foo*)(ptr - offset);
  16. }
  17.  
  18. int main(void) {
  19. struct foo test;
  20. printf("%p == %p\n", &test, start_address(&test.ptr));
  21. return 0;
  22. }
  23.  
Success #stdin #stdout 0s 2160KB
stdin
Standard input is empty
stdout
0xbf86bff0 == 0xbf86bff0