返回首页   进站必读

13.1 .text


13.1 .text

.text段即为代码段,是存储指令的段,为防止在运行过程中指令被修改,该段是只读的
首先看下面的例子:

#include <stdio.h>
const int A = 10;
int a = 20;
static int b = 30;
int c;

int main(int argc, const char *argv[])
{
        static int a = 40;
        char b[] = "Hello world";
        register int c = 50;
            
            a = 10;
        printf("Hello world %d\n", c);

        return 0;
}

从readelf的输出可以看出.text段的地址:

    Section Headers:
      [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
      [14] .text             PROGBITS        08048390 000390 0001bc 00  AX  0   0 16
      [16] .rodata           PROGBITS        08048568 000568 00001c 00   A  0   0  4
      [24] .data             PROGBITS        0804a010 001010 000014 00  WA  0   0  4
      [25] .bss              NOBITS          0804a024 001024 00000c 00  WA  0   0  4

.text段在内存中的起始地址是0x08048390,我们用hexdump先看下这段。

    0000390 ed31 895e 83e1 f0e4 5450 6852 84c0 0804
    00003a0 d068 0484 5108 6856 8444 0804 a3e8 ffff
    00003b0 f4ff 9090 9090 9090 9090 9090 9090 9090
    00003c0 8955 53e5 ec83 8004 243d 04a0 0008 3f75
    00003d0 28a1 04a0 bb08 9f18 0804 eb81 9f14 0804
    00003e0 fbc1 8302 01eb d839 1e73 b68d 0000 0000
    00003f0 c083 a301 a028 0804 14ff 1485 049f a108
    0000400 a028 0804 d839 e872 05c6 a024 0804 8301
    0000410 04c4 5d5b 8dc3 2674 8d00 27bc 0000 0000
    0000420 8955 83e5 18ec 1ca1 049f 8508 74c0 b812
    0000430 0000 0000 c085 0974 04c7 1c24 049f ff08

这些就是编译好的机器指令。