Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
X86 为什么xxd和objdump之间的内存地址或偏移量存在差异?_X86_Reverse Engineering_Elf_Objdump_Xxd - Fatal编程技术网

X86 为什么xxd和objdump之间的内存地址或偏移量存在差异?

X86 为什么xxd和objdump之间的内存地址或偏移量存在差异?,x86,reverse-engineering,elf,objdump,xxd,X86,Reverse Engineering,Elf,Objdump,Xxd,我有以下测试装配程序: .section .rodata a: .byte 17 .section .text .globl _start _start: mov $1, %eax mov a(%rip), %ebx int $0x80 我已经编译成一个名为文件的可执行文件。当我使用objdump反汇编时,我得到以下预期输出: $ objdump --disassemble --section=.text file file: file format elf

我有以下测试装配程序:

.section .rodata
a: .byte 17

.section .text
.globl _start
_start:
    mov $1, %eax
    mov a(%rip), %ebx
    int $0x80
我已经编译成一个名为
文件
的可执行文件。当我使用
objdump
反汇编时,我得到以下预期输出:

$ objdump --disassemble --section=.text file

file:     file format elf64-x86-64

Disassembly of section .text:

0000000000400078 <_start>:
  400078:   b8 01 00 00 00          mov    $0x1,%eax
  40007d:   8b 1d 02 00 00 00       mov    0x2(%rip),%ebx        # 400085 <a>
  400083:   cd 80                   int    $0x80
这其中的差异是什么原因?似乎
xxd
只是将所有值从0偏移,但是如果您可以称之为
objdump
使用的“偏移量”是什么呢?如何协调
400078
xxd
中的位置?或者我需要使用另一个程序吗

为什么xxd和objdump之间的内存地址或偏移量存在差异

因为它们显示的是基本上不相关的数据视图

  • xxd
    显示任意文件的原始位,不解释其含义

  • objdump
    (带有您使用的标志)显示将可执行文件加载到内存中时内存内容的外观

    objdump
    通过检查和理解
    ELF
    文件头、程序头和节头的含义,得出该视图


您可以使用
readelf--segments
readelf--sections
检查这些标题。

xxd是文件的十六进制转储,它们是文件偏移量。它对ELF元数据一无所知,对内存地址一无所知。这只是任意二进制数据的简单十六进制转储。使用objdump-h显示ELF文件的头。这将告诉您与文本部分对应的文件中的偏移量。切勿使用
objdump
?我在
readelf
的手册页中没有看到反汇编选项。你的意思是永远不要为某个特定的目的使用它,或者它的一些选项?就像从不使用
objdump-h
?@PeterCordes你是对的。我缓和了回答。
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
00000010: 0200 3e00 0100 0000 b000 4000 0000 0000  ..>.......@.....
00000020: 4000 0000 0000 0000 e001 0000 0000 0000  @...............
...
00000340: 2700 0000 0000 0000 0000 0000 0000 0000  '...............
00000350: 0100 0000 0000 0000 0000 0000 0000 0000  ................