software | Windows |
In computing, a code segment, also known as a text segment or simply as text, is a phrase used to refer to a portion of memory or of an object file that contains executable instructions. source : http://en.wikipedia.org/wiki/Code_segment Note that code may always modify all segment registers except CS (the code segment). This is because the current privilege level (CPL) of the processor is stored in the lower 2 bits of the CS register. The only way to raise the processor privilege level (and reload CS) is through the lcall (far call) and int (interrupt) instructions. Similarly, the only way to lower the privilege level (and reload CS) is through lret (far return) and iret (interrupt return). source : http://en.wikipedia.org/wiki/X86_memory_segmentation
software | GNU/Linux |
(gdb) info registers rax 0xfffffffffffffdfc -516 rbx 0x5dc 1500 rcx 0xffffffffffffffff -1 rdx 0x5dc 1500 rsi 0x1 1 rdi 0x7fff6f396d50 140735059422544 rbp 0xb4a160 0xb4a160 rsp 0x7fff6f396d00 0x7fff6f396d00 r8 0x0 0 r9 0xffffffff 4294967295 r10 0x8 8 r11 0x246 582 r12 0x7fff6f396d50 140735059422544 r13 0x7fff6f396d60 140735059422560 r14 0x0 0 r15 0x1 1 rip 0x7fc4561ec0c8 0x7fc4561ec0c8 eflags 0x246 [ PF ZF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0 (gdb)cs 0x33 51
Register operands are always prefixes with `%'. The 80386 registers consist of the 6 section registers `%cs' (code section), `%ds' (data section), `%ss' (stack section), `%es', `%fs', and `%gs'. source : http://www.cs.utah.edu/dept/old/texinfo/as/as.html#SEC152
| Related Discussion |
CS Register Setting by VnutZ :: NR10 :: Show The article correctly mentions the importance of setting up segment registers, yet like most neglects to set up CS (which is 0×0000). This is one nasty latent bug that shows itself as soon as you try doing indirect jumps. So if you want to use something like threaded code in your first stage bootloader set CS by "jmp 0×07c0:foo" first. You’re right – it would have been "good practice" to set the CS register. However, the CS register is already correctly set by the BIOS. If it were not set … a computer would never boot up! CS (code segment) and IP (instruction pointer) are both set to point directly at 0000:7C00 which is where the BIOS loads the bootsector into. source: http://www.omninerd.com/comments/10807
| Variation |
The way to execute user processes in kernel mode in AMD64 is almost the same as it is in IA-32. To execute user processes in kernel mode, the only thing KML does is launch user processes with the CS segment register, which points to the kernel code segment instead of user code segment. In AMD64 CPUs, the privilege level of running programs is determined by the privilege level of their code segment. This is almost the same as in IA-32 CPUs; the only difference is the segmentation memory system is degenerated in AMD64. Although segment registers still are used in 64 -bit mode of AMD64, the only segment that the segment registers can use is the 16 EB flat segment. Thus, the role of the segment descriptors is simply to specify privilege levels. Therefore, only four segments—kernel code segment, kernel data segment, user code segment—exist in 64-bit mode. source and link(s) : http://www.linuxjournal.com/article/8023?page=0,1 http://www.thefreedictionary.com/degenerated
