Mailing Lists: Apple Mailing Lists
Image of Mac OS face in stamp
Linker is driving me nuts, relocating the start address
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Linker is driving me nuts, relocating the start address



I have the problem, that for testing purposes I want to place an Objective-C message at a certain place in memory.

Now my plan is, that I link my foundation console project with -seg1addr 0x35203000 and I have another method in front of the method, that contains a lot of dummy code, that I want to shrink or expand to hit the proper address.

+ (int) bogus1:(int) x
{
    x = x * x;
    x = x * x;
    // and hundreds more...
    //    x = x * x;
    return( x);
}

- (id) key
{
   return( _key);
}



It's not working as I hoped it would be, although the -seg1addr in itself works.

The reason being, that the first __text start address changes unpredictably.
Here is an example of a link with _more_ bogus1 code:

Load command 1
      cmd LC_SEGMENT
  cmdsize 396
  segname __TEXT
   vmaddr 0x35203000
   vmsize 0x00002000
  fileoff 0
 filesize 8192
  maxprot 0x00000007
 initprot 0x00000005
   nsects 5
    flags 0x0
Section
  sectname __text
   segname __TEXT
      addr 0x35204544
      size 0x000009cd
    offset 5444
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x80000400
 reserved1 0
 reserved2 0

and here with less bogus1 code, as you can see the __text address counterintuitively moved down! I would have expected it to stay the same really.

Load command 1
      cmd LC_SEGMENT
  cmdsize 396
  segname __TEXT
   vmaddr 0x35203000
   vmsize 0x00002000
  fileoff 0
 filesize 8192
  maxprot 0x00000007
 initprot 0x00000005
   nsects 5
    flags 0x0
Section
  sectname __text
   segname __TEXT
      addr 0x35204684
      size 0x0000089b
    offset 5764
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x80000400
 reserved1 0
 reserved2 0

Most of the space between 0x35204684 and 0x35203000 is filled with beautiful nils. So apparently the linker somehow tail aligns the code ?

I then added a method bogus2 behind the -key method, but I still can't nail the exact address. I can come close to one byte offset with nops though.

I need a clue...

Ciao
    Nat!

P.S. If you think this is crazy, see this :) (http://www.mulle-kybernetik.com/weblog/2009/12/my_best_bug_ever.html), the reason I am trying this at all.
------------------------------------------------------
When vanity and rivalry disappear, all the lines go
out of your stomach and you slow down and coast
slowly to a stop in the middle. -- DLR

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2011 Apple Inc. All rights reserved.