01-30-2003
It's awfully hard to help much on this since I don't have access to your system and this stuff varies a lot among kernels. But I'll try...
First, let's say that your pagesize is 4096 and your program needs 50 pages. So it is 50 * 4096 = 204800 bytes long. That does not mean that the first address is zero and the last is 204800. You can't make something like that work with any cpu. Typically the pages are arranged into segments and the segments are contiguous. But the segments will be scattered throughout the virtual address space. Think about malloc() and the underlying brk()/sbrk() calls. They need to be able to make the data segment grow. The stack must be able to change size dynamically. Maybe your program will map in a shared library...now everything has to grow. Also remember that it is illegal to deference a null pointer. Put something at zero and rerefencing a null pointer becomes legal. And taking the address of whatever you put there would give you NULL. The c standard prohibits that taking the address of an object would result in a NULL. And memory is organized into pages. If you can't use the first byte, you can't you the first page.
So you need to know what address you need. It can be anywhere. You might try putting "int xyzzy=777" before the main in your little to-be-traced program. Then run the nm program on it. Since xyzzy is external in scope it should probably be in the symbol table. Get the address for it and plug that into your tracer program. Then see if you can get the value 777. I tend to think that will work.
By the way, I have never used ptrace() on any system, so I am not exactly a ptrace() expert. I am not going to be able to help write a debugger or anything.
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
I'm trying to unmount a file system, but umount says the device is busy. A fuser -c /myfs tells me that nothing on this fs is in use. Any idea?
Oh, and btw, why isn't my signature beeing displayed? Show user's signature is enabled and I have entered one :/ (10 Replies)
Discussion started by: sTorm
10 Replies
2. HP-UX
Anyone have any idea why I cannot umount a directory even though fuser shows no process attached to it?
fuser -cu /data/oracle/GMPSHRDM/export
/data/oracle/GMPSHRDM/export:
umount /data/oracle/GMPSHRDM/export
umount: cannot unmount /data/oracle/GMPSHRDM/export : Device busy
umount:... (2 Replies)
Discussion started by: keelba
2 Replies
3. UNIX for Dummies Questions & Answers
Hi,
I'm trying to do a sharity mount to mount a terastation network drive.
I'm getting a Device or resource busy message after my mount command. Please see output below...
# /usr/local/sharity3/bin/sharity mount smb://labbackup01/bakup_data /mnt/labbackup01
Device or resource busy.... (2 Replies)
Discussion started by: orahi001
2 Replies
4. UNIX Desktop Questions & Answers
Ciao a tutti!!!
il mio problema è questo: sto cercando di inviare dei comandi AT da PC a cellulare utilizzando il bluetooth e cygwin e vorrei visualizzare le risposte nella shell bash. Per farlo apro due terminali utilizzando le seguente istruzioni:
xterm &
Sul primo scrivo
cat /dev/ttyS2
... (0 Replies)
Discussion started by: blianna
0 Replies
5. UNIX and Linux Applications
Ciao a tutti!!!
il mio problema è questo: sto cercando di inviare dei comandi AT da PC a cellulare utilizzando il bluetooth e cygwin e vorrei visualizzare le risposte nella shell bash. Per farlo apro due terminali utilizzando le seguente istruzioni:
xterm &
Sul primo scrivo
cat /dev/ttyS2
... (1 Reply)
Discussion started by: blianna
1 Replies
6. UNIX Desktop Questions & Answers
Hello!!!
My problem is: i'm trying to send At commands from Pc to mobile phone using bluetooth and cygwin and i would like to read the device's answers on the shell bash. And so, i open two terminals in this way:
xterm &
In the first i write:
cat /dev/ttyS2
because the device is... (9 Replies)
Discussion started by: blianna
9 Replies
7. Solaris
Hi,
I've seen similar posts on this board about ejecting CDROMs but I've tried the solutions people suggested but still cannot eject the CD. It's stuck in a production box so I can't reboot it...
bash-3.00# eject -f cdrom
/vol/dev/dsk/c0t0d0/sol_10_106_sparc/s0: Device busy
bash-3.00#... (14 Replies)
Discussion started by: jimmy54321
14 Replies
8. Hardware
hello to everybody
I have Ubuntu Lucid 10.04 installed on my Desktop and I have a PCI serial card in my computer and it has only one serial port.
Actually I want to use this serial port for the serial communication and for that I executed this command :
$ setserial -g /dev/ttyS
and I... (0 Replies)
Discussion started by: piyush011
0 Replies
9. HP-UX
Hi,
Unable to make tape backup, please help.
/opt/ignite/bin/make_tape_recovery -a /dev/rmt/?mn -I -v -m tar -x inc_entire=vg00
* Creating local directories for configuration files and archive.
======= 04/25/16 16:28:08 IST Started /opt/ignite/bin/make_tape_recovery.
(Mon... (4 Replies)
Discussion started by: anuragr
4 Replies
10. UNIX for Beginners Questions & Answers
mount -f nfs 1234:/export/ert /der/fr/ert
mount : /der/fr/ert: device busy
normally I will then do an
fuser filesystem
and kill the pids, which I did.
now if I do an fuser /der/fr/ert
I get the mount point and no pid
> fuser /der/fr/ert
/der/fr/ert:
but it... (1 Reply)
Discussion started by: goya
1 Replies
END(3) Linux Programmer's Manual END(3)
NAME
etext, edata, end - end of program segments
SYNOPSIS
extern etext;
extern edata;
extern end;
DESCRIPTION
The addresses of these symbols indicate the end of various program segments:
etext This is the first address past the end of the text segment (the program code).
edata This is the first address past the end of the initialized data segment.
end This is the first address past the end of the uninitialized data segment (also known as the BSS segment).
CONFORMING TO
Although these symbols have long been provided on most UNIX systems, they are not standardized; use with caution.
NOTES
The program must explicitly declare these symbols; they are not defined in any header file.
On some systems the names of these symbols are preceded by underscores, thus: _etext, _edata, and _end. These symbols are also defined for
programs compiled on Linux.
At the start of program execution, the program break will be somewhere near &end (perhaps at the start of the following page). However,
the break will change as memory is allocated via brk(2) or malloc(3). Use sbrk(2) with an argument of zero to find the current value of
the program break.
EXAMPLE
When run, the program below produces output such as the following:
$ ./a.out
First address past:
program text (etext) 0x8048568
initialized data (edata) 0x804a01c
uninitialized data (end) 0x804a024
Program source
#include <stdio.h>
#include <stdlib.h>
extern char etext, edata, end; /* The symbols must have some type,
or "gcc -Wall" complains */
int
main(int argc, char *argv[])
{
printf("First address past:
");
printf(" program text (etext) %10p
", &etext);
printf(" initialized data (edata) %10p
", &edata);
printf(" uninitialized data (end) %10p
", &end);
exit(EXIT_SUCCESS);
}
SEE ALSO
objdump(1), readelf(1), sbrk(2), elf(5)
COLOPHON
This page is part of release 3.44 of the Linux man-pages project. A description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
GNU
2008-07-17 END(3)