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

时间:2017-08-06 06:23:38

标签: assembly arm objdump

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。 它看起来像是指某些单词的地址,但在我的可执行对象文件中没有像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 }

1 个答案:

答案 0 :(得分:0)

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

00097568        .word   0x00097568

这就是.word的含义。您可以看到右侧的值(显示为.word的)与左侧的值(二进制编码)相同:0x00097568