This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Break at address on darwin


On Wed, Aug 3, 2011 at 2:05 AM, Jonas Maebe <jonas.maebe@elis.ugent.be> wrote:
>
> On 03 Aug 2011, at 10:59, Pedro Alves wrote:
>
>> On Tuesday 02 August 2011 22:51:22, Ben L. Titzer wrote:
>>>
>>> Num Type ? ? ? ? ? Disp Enb Address ? ?What
>>> 1 ? breakpoint ? ? keep y ? 0x00001114
>>> 2 ? breakpoint ? ? keep y ? 0x00001148
>>
>> Does the program really load at those addresses?

Yes I am 100% sure this program actually runs to completion and
produces what it should. As I mentioned, if I insert an int3 or
illegal instruction manually somewhere in its code, the program will
trap appropriately. However, I need to debug other programs with gdb,
e.g. by single-stepping through their execution.

>> They look suspiciously low.
>
> They're probably correct. Darwin/i386 generally does load programs starting
> at 0x1000.

Yes, 0x1000 is where the program loads its first text page, which is
mapped to file offset 0. 0x01114 happens to be the entrypoint
instruction. 0x01148 is the address of the first function it calls,
which you can see from the assembly listing.

Output from the otool -l command for this binary:

/tmp/add01:
Load command 0
      cmd LC_SEGMENT
  cmdsize 56
  segname __PAGEZERO
   vmaddr 0x00000000
   vmsize 0x00001000
  fileoff 0
 filesize 0
  maxprot 0x00000000
 initprot 0x00000000
   nsects 0
    flags 0x0
Load command 1
      cmd LC_SEGMENT
  cmdsize 56
  segname __TEXT
   vmaddr 0x00001000
   vmsize 0x00001000
  fileoff 0
 filesize 4096
  maxprot 0x00000007
 initprot 0x00000005
   nsects 0
    flags 0x0
Load command 2
      cmd LC_SEGMENT
  cmdsize 56
  segname __DATA
   vmaddr 0x00002000
   vmsize 0x00000000
  fileoff 4096
 filesize 0
  maxprot 0x00000003
 initprot 0x00000003
   nsects 0
    flags 0x0
Load command 3
        cmd LC_UNIXTHREAD
    cmdsize 80
     flavor i386_THREAD_STATE
      count i386_THREAD_STATE_COUNT
	    eax 0x00000000 ebx    0x00000000 ecx 0x00000000 edx 0x00000000
	    edi 0x00000000 esi    0x00000000 ebp 0x00000000 esp 0x00000000
	    ss  0x00000000 eflags 0x00000000 eip 0x00001114 cs  0x00000000
	    ds  0x00000000 es     0x00000000 fs  0x00000000 gs  0x00000000


-B


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]