In the documentation for the Linux syscall
ptrace, I saw the following text:
Linux does not have separate text and data address space, so
To what extent is this really the case? Are
.data really stored as one? Does that mean that I can go about defining things like I would in
That's not what they're saying. They're in separate regions of one flat virtual address-space.
On a Harvard machine, address
0x1000 as a data address would access different bytes than address
0x1000 as a code address, because they're addresses in different address spaces. Having multiple address-spaces is like street addresses, where 123 Church St. is a different house (memory cell) than 123 Turing St.
But Linux's memory model doesn't work that way; all page addresses unique integers because there's only one virtual memory address-space per process.
So you can draw a memory map where the
.data sections are different parts of the same space. They get mapped with different permissions (read+exec vs. read+write), assuming you didn't use any special linker options, but an
unsigned char * can read bytes from either of them.