GDB library to insert and delete watchpoints

Aravinda aravindakidambi@gmail.com
Fri Dec 4 16:21:00 GMT 2009


Hi,

Thank you for all of your replies and suggestions.

Yah, Im assuming a simple case for now of only debugging a single
thread/process. Also, its actually a little different since Im not
trying to have a separate debugging thread to do this job. I have a
single threaded application that I want to be safe from buffer
overruns all the time, that doesnt have more than 4 levels of nested
loops, so 4 debug register should do just good for this. And Im trying
to do it automatically by instrumenting GCC to add a call (before
array accesses) to a custom library function that inserts a
watchpoint. I wanted to write a C library that manages mirror
registers and occasionally makes a system call/invokes a driver to put
the value in the debug register.

I have never used ptrace before and need to lookup on it, but the code
that I saw was for a parent process modifying the contents of debug
registers for the child. So im assuming I can either call ptrace from
the same process to modify the contents or have to write a driver to
manipulate debug registers.

Thanks,
Aravinda

On Fri, Dec 4, 2009 at 3:51 AM, Stan Shebs <stan@codesourcery.com> wrote:
>
> Aravinda wrote:
>>
>> Hi,
>>
>> Im working on a project that currently requires inserting and deleting
>> watchpoints to monitor buffer overruns. I was looking at the
>> gdb-internals documentation which talks about a gdb library that can
>> be used to do exactly this. But I couldnt find more info on this. Im
>> looking for a ready to use library to be used with a kernel module
>> that allows for modifying the debug registers. kindly point me to any
>> sources if it can be done.
>>
>
> It just so happens that CodeSourcery recently did this for a customer that was using a debugging stub that ran as one of several threads in the application.  It does need its own driver to modify the debug registers, and the stub calls it once it has done the bit-twiddling on mirrors of the registers.  While it works well enough to have one thread set the debug registers of a different thread in a Linux app, there is some fancy dancing to make this work in nonstop - with all the threads running at once, you can get nasty races all over the place.  Unfortunately, this is all CodeSourcery proprietary code and intermingled with the customer's app to boot, so I can't send you a copy.
>
> Stan
>



More information about the Gdb mailing list