我正在阅读一本关于链接器和加载器的旧书,它有目标代码的图像。
但是我不知道用什么工具来显示这些文件的内容。
如果有人能指出该工具,我将不胜感激。
这是目标文件的 C 代码和相应的显示。
源文件m.c
:
extern void a(char *);
int main(int argc, char **argv)
{
static char string[] = "Hello, world!\n";
a(string);
}
Run Code Online (Sandbox Code Playgroud)
源文件a.c
:
#include <unistd.h>
#include <string.h>
void a(char *s)
{
write(1, s, strlen(s));
}
Run Code Online (Sandbox Code Playgroud)
对象代码m.o
:
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000010 00000000 00000000 00000020 2**3
1 .data 00000010 00000010 00000010 00000030 2**3
Disassembly of section .text: 00000000 <_main>:
0: 55 pushl %ebp
1: 89 …
Run Code Online (Sandbox Code Playgroud) 我有一个 ELF 二进制文件,它只包含程序头表中的两个 LOAD 段,一个用于代码,一个用于数据。readelf -a
告诉我没有节标题。
如果我尝试使用 ARM cross binutils 在我的 amd64 机器上反汇编 ARM 二进制文件,它不会给我正确的输出。然而,据我了解,二进制文件的架构不应该与这个问题相关,因为这个问题与 ELF 相关。
$ file ./binary
./binary: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, stripped
$ arm-linux-gnueabi-objdump -d ./binary
./binary: file format elf32-littlearm
$ arm-linux-gnueabi-objdump -x ./binary
./binary: file format elf32-littlearm
./binary
architecture: arm, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x0004c8d8
Program Header:
LOAD off 0x00000000 vaddr 0x00010000 paddr 0x00010000 align 2**16
filesz 0x0003d27e memsz 0x0003d27e flags r-x
LOAD off …
Run Code Online (Sandbox Code Playgroud)