代码之家  ›  专栏  ›  技术社区  ›  doosolLee

word的地址在我的可执行对象文件的objdump中是什么意思?

  •  2
  • doosolLee  · 技术社区  · 7 年前
    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 选项创建可执行对象文件时。

    这是我的程序。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 回复  |  直到 7 年前
        1
  •  0
  •   jfMR    7 年前

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

    00097568        .word   0x00097568
    

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