> Date: Fri, 2 Mar 2001 08:04:52 -0500 (EST)
> From: Peter Dufault <[EMAIL PROTECTED]>

> > Any strings "/B/u" in your program?  That would be stored as 0x752f422f.
> > 
> > If you're using assembly with using %ebp for stack frame (yay!), then make
> > certain %esp isn't getting corrupted.

(I meant _without_ %ebp, but I didn't want to repost.)

> Very good, I read those high bits off-by-one and stupidly didn't recognize
> the ascii:
> 
> > (gdb) x/s $esp-8 
> > 0x826b400 <dtablecount+6528>:    "/wd0/B/usr-src/lib/libc_r/uthread/uthread_dup2.c"
> > (gdb) 
> 
> I guess it is the "thread_fd_lock_debug/_thread_fd_unlock_debug"
> calls with __FILE__ that push this on the stack.  I'll build a
> debuggable libc_r and see I see.

Hmmmm.  That "/B/u" portion is toward the beginning of the string, not the
end as one would expect from an overrun.

It looks like the string is getting written to -4(%esp,1), where %esp is
the initial stack pointer.  Note that the return address is at 0(%esp,1).

What is the first variable that you declare in the function?

        /* Note use of "&trashme" instead of "trashme" */
        void foo (void) {
                char *trashme;
                strcpy((char*)&trashme, "/wd0/B/usr-src/libc/libc_r...");
        }

If you compile using -fomit-frame-pointer, I _think_ that "trashme" would
be at -4(%esp,1).  (Otherwise, %ebp would be saved at that address.)

It looks like you might be passing the address of a 32-bit variable to a
string function when you should be passing the contents.  Anyone have any
other ideas off the top of their head?


Eddy

---------------------------------------------------------------------------

Brotsman & Dreger, Inc.
EverQuick Internet / EternalCommerce Division

E-Mail: [EMAIL PROTECTED]
Phone: (316) 794-8922

---------------------------------------------------------------------------


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to