Visit Our UNIX and Linux User Community


Symbol table of a C program


 
Thread Tools Search this Thread
Top Forums Programming Symbol table of a C program
# 1  
Old 11-05-2009
Symbol table of a C program

Hi,
is there any command to see symbol table info.
will it show where its allocating memory for varibales golbals & locals and code.(i mean the segments).

i read there is a section called read only data segment and this is where initialized data such as strings stores.

i have wriiten the following program and its giving segmentation for strings but not others.

any idea whats the proper reason.

Code:
char *p="test";
int g=10;
int main()
{
g=20;// no segmentation
printf("%d",g);
getchar();
        *p='T';// generates segmentation
printf("%s",p);
return 0;
}



thanks in advnace
Smilie
# 2  
Old 11-05-2009
Hi.

You can use: objdump or nm.

---------- Post updated at 08:25 AM ---------- Previous update was at 08:16 AM ----------

The problem of that code is that 'p' symbol is stored in a not writable data segment because it is defined as a constant.

If you compile that code, for example, with:
Code:
g++ -fwritable-strings test.cpp   -o test

'p' symbol is stored in a writable data segment and the program will be ok, but this option might be removed in a future release of G++.
# 3  
Old 11-05-2009
The line
Code:
*p='T';

has 2 problems:
  1. You're trying to assign a character value (which is a value between 0 and 255), not a pointer
  2. You're trying set the target of the pointer to another pointer, not redefine the original pointer

This line should work:
Code:
p="T";

Remember: single quotes = character, double quotes = pointer to NULL-terminated character array ("string")
# 4  
Old 11-05-2009
I think
Code:
*p = 'T'

it 's the same that:
Code:
p[0] = 'T'

so, it's ok.

The final string will be: "Test", the first character will be uppercase. The difference is the options compilation.
# 5  
Old 11-05-2009
Quote:
You can use: objdump or nm.

how to use the commands , i used

Code:
[User@telnet spark]$ objdump -t te.o
te.o: file format elf32-i386
SYMBOL TABLE:
00000000 l df *ABS* 00000000 te.c
00000000 l d .text 00000000
00000000 l d .data 00000000
00000000 l d .bss 00000000
00000000 l d .rodata 00000000
00000000 l d .comment 00000000
00000000 g O .data 00000004 p
00000000 g F .text 00000035 main
00000000 *UND* 00000000 printf

when i use objdump its giving the list of options that can be used with it.
i tried all but dint understand much.

i want the info in following format:

Code:
 
symbolname section address default val 
g                rwdata    ----      0

and so on

if any global variables are present it should give U ( undefined/ defined later)

Last edited by pludi; 11-05-2009 at 04:24 AM.. Reason: code tags added
# 6  
Old 11-05-2009
Try with:
Code:
objdump -s <exec>

Segments: data and rodata

You can see the difference of the compilation with and without -fwritable-strings option.

If you want to get the executable symbols table, you can use:

Code:
nm -C -f sysv <exec>


Last edited by pogdorica; 11-05-2009 at 04:27 AM..
# 7  
Old 11-05-2009
MrUser, your code is problematic. Consider the following 2 statements:
Code:
char p[] = "test";
char *p = "test";

In the first statement, a mutable (modifiable or non-constant) string p is declared as an array of character and initialized with the string "test". The size of array p is 5 bytes including a null terminator. The result of *p = 'T' is defined and works as expected.

In the second statement an immutable (AKA constant) string litteral is declared and the base address of the memory where the compiler stores the string litteral is assigned to the pointer variable p. In this case, the result of *p = 'T' is undefined as you found out.

When you want a mutable string, i.e. a string which can be modified, use initialization instead of assignment.

Previous Thread | Next Thread
Test Your Knowledge in Computers #639
Difficulty: Easy
NeXTSTEP was based on UNIX.
True or False?

10 More Discussions You Might Find Interesting

1. Programming

Search the symbol table of a child process

Hi, I am a newbie in Linux land, and I have a question about programming parent/child process interaction: How do I search the value of a symbol in the child process? Is it possible? I am doing a fork() and execve() to spawn any child possible, and I need something on the parent side to... (12 Replies)
Discussion started by: alphakili
12 Replies

2. Web Development

Getting Rid of Annoying Bootstrap Table Borders and Wayward Table Lines

Bootstrap is great; but we have had some issues with Bootstrapped <tables> (and legacy <fieldset> elements) showing annoying, wayward lines. I solved that problem today with this simple jQuery in the footer: <script> $(function(){ $('tr, td, fieldset,... (0 Replies)
Discussion started by: Neo
0 Replies

3. Shell Programming and Scripting

Build a table from a list by comparing existing table entries

I am new to this shell scripting.... I have a file which contains list of users. This files get updated when new user comes into the system. I want to create script which will give a table containing unique list of users. When I say unique, it means script should match table while parsing... (3 Replies)
Discussion started by: dchavan1901
3 Replies

4. UNIX for Dummies Questions & Answers

Creating a condensed table from a pre-existing table in putty

Hello, I'm working with putty on Windows 7 professional and I'd like to know if there's a way to gather specific lines from a pre-existing table and make a new table with that information. More specifically, I'd like the program to look at a specific column, say column N, and see if any of the... (5 Replies)
Discussion started by: Deedee393
5 Replies

5. Programming

C program to display a busy symbol while processing

Hi I was wondering how can a c program will be implemented which will display a symbol while calculating something. for example : program should display some charters like /\/\ while calculating. At least provide some pointers thanks (4 Replies)
Discussion started by: rakeshkumar
4 Replies

6. Solaris

/usr/lib/passwdutil.so.1: symbol __nsl_fgetspent_r: referenced symbol not found

deleteing post (0 Replies)
Discussion started by: dshakey
0 Replies

7. Programming

Reading ELF file Symbol table of C++ program

Folks, I have some program(Test.cpp) as follows, #include<iostream> class Abc { private: int _theVar; public : int printVar(); }; int Abc :: printVar() { _theVar=10; } main() { Abc _t; (2 Replies)
Discussion started by: vinod_chitrali
2 Replies

8. Linux

Reading ELF file Symbol table of C++ program

Folks, I have some program(Test.cpp) as follows, #include<iostream> class Abc { private: int _theVar; public : int printVar(); }; int Abc :: printVar() { _theVar=10; } main() { Abc _t; (0 Replies)
Discussion started by: vinod_chitrali
0 Replies

9. Programming

how to view symbol table in unix

hi , How to view the contents of a "c" program symbol table information in unix. (1 Reply)
Discussion started by: saravanan_nitt
1 Replies

10. Programming

no symbol table

Hi@all, I try to compile c code on hpux 11.11 pa-risc 2 with gcc (32bit). I compile with the option -g, so that I get the symbol table, but it is not available. Does someone knows something on this? thx (2 Replies)
Discussion started by: Dom_Cyrus
2 Replies

Featured Tech Videos