.word 的地址在我的可执行目标文件的 objdump 中意味着什么?

what does .word's address mean in objdump of my executable object file?

793 00010cfc <main>:
    794    10cfc:       e92d4800        push    {fp, lr}
    795    10d00:       e28db004        add     fp, sp, #4
    796    10d04:       e24dd008        sub     sp, sp, #8
    797    10d08:       e3a03000        mov     r3, #0
    798    10d0c:       e50b3008        str     r3, [fp, #-8]
    799    10d10:       e51b3008        ldr     r3, [fp, #-8]
    800    10d14:       e2833001        add     r3, r3, #1
    801    10d18:       e50b3008        str     r3, [fp, #-8]
    802    10d1c:       e59f3040        ldr     r3, [pc, #64]   ; 10d64 
    <main+0x68>
    803    10d20:       e5933000        ldr     r3, [r3]
    804    10d24:       e51b2008        ldr     r2, [fp, #-8]
    805    10d28:       e0823003        add     r3, r2, r3
    806    10d2c:       e50b3008        str     r3, [fp, #-8]
    807    10d30:       e59f3030        ldr     r3, [pc, #48]   ; 10d68 
    <main+0x6c>
    808    10d34:       e3a02014        mov     r2, #20
    809    10d38:       e5832000        str     r2, [r3]
    810    10d3c:       e59f3028        ldr     r3, [pc, #40]   ; 10d6c 
    <main+0x70>
    811    10d40:       e3a0201e        mov     r2, #30
    812    10d44:       e5832000        str     r2, [r3]
    813    10d48:       e59f0020        ldr     r0, [pc, #32]   ; 10d70 
    <main+0x74>
    814    10d4c:       e51b1008        ldr     r1, [fp, #-8]
    815    10d50:       eb001917        bl      171b4 <_IO_printf>
    816    10d54:       e3a03000        mov     r3, #0
    817    10d58:       e1a00003        mov     r0, r3
    818    10d5c:       e24bd004        sub     sp, fp, #4
    819    10d60:       e8bd8800        pop     {fp, pc}
    820    10d64:       00097568        .word   0x00097568
    821    10d68:       000991b0        .word   0x000991b0
    822    10d6c:       000983f4        .word   0x000983f4
    823    10d70:       00070944        .word   0x00070944

我想重点关注 802 和 820 行。 当我objdump -d ./program,有.word。 看起来that指的是一些单词的地址,但是在我的可执行目标文件中没有像0x00097568这样的地址。 当我使用 gdb 时,它会执行如下操作

0x00010d64 <+104>:   andeq   r7, r9, r8, ror #10

所以,我猜 0x00097568 是来自那个操作,但是 0x00097568 是什么意思?

请注意,我在制作可执行目标文件时提供了-static选项。

这是我的 program.c 代码

 1 #include <stdio.h>
 2 int val1=10;
 3 int val2;
 4 static val3;
 5
 6 int main() {
 7   int a=0;
 8   a=a+1;
 9   a=a+val1;
10
11   val2=20;
12   val3=30;
13
14   printf("a : %d\n",a);
15   return 0;
16
17 }

objdump 无法将您正在反汇编的二进制内容的那部分识别为一条指令,它只是将其显示为 32 位数据块:

00097568        .word   0x00097568

这就是.word的意思。可以看到右边的值(显示为.word的)和左边的值(二进制编码)是一样的:0x00097568