If there is nothing to link (i.e.. I'm not using any libraries. I know it wont be of any use.) will the linker change the object code output of assembler? If so what does it change?
It always links some initialization code. You can try this, write an empty program and link it, and then use objdump -d to disassemble it.
I heard that LINKER also does the operation of some memory mapping. I don't understand how. The program is not running, its just in the manufacturing stage. How could linker map to memory? How would it look like? What all are the functions of LINKER?
Each system has a memory layout that executable programs must follow to work. It specifies where the different parts of the program go (at least code, initialized data, data initialized to zero). The linker must produce the executable according to these rules, which vary between systems, e.g. Windows and Linux. On embedded systems it gets even more interesting, there the program is typically in read-only memory (Flash) and the data is in RAM, and there are fixed address ranges for the different kinds of memory depending on the type of microcontroller.
When people refer to "relocation" , "address binding". I don't really get what they mean. What is it & what is its purpose?
Binding in general means giving a value to a name, in this case an address to the symbol for a function or global variable.
As for relocation, you typically link together more than one object file, and each object file specifies its addresses as offsets relative to its beginning. When you put them together each gets its own address range, and the linker computes the address for a symbol by mapping the offset into the address range. This is called relocation.
Some debuggers show info like : call stack: 0xfffef32 , 0xf3234fe etc.. Its at the run time right? or is the the memory addresses of so called "memory mapping" of linker?
That 0xfffef32 would be a typical address on the stack, as the stack usually is put at the top of the memory and grows downwards. The stack is used for return addresses, local variables and actual function parameters. These are local and stored at addresses relative to the stack pointer, so they aren't typically handled by the linker, rather the compiler already knows the offsets to use and puts them in the assembly code.
when people refer to something like symbols or symbol table. Do they mean identifiers(variable names, constant names, function names)?
The symbol table is a table which maps symbols to values (numbers, offsets, addresses). There are some symbols for your identifiers, but also more for other uses. Your identifiers may be modified more or less to become symbols, mostly to prevent name clashes (e.g. the prepending of "_").
The linker has an option --print-map to print the symbol table. You can use -Wl,--print-map if you use gcc for linking.
If you like this kind of low-level technical stuff you should take a look at embedded programming, i.e. programming microcontrollers which are used in various electric devices. For desktop systems like Windows you don't normally need to look at this kind of details.