标签: elf

GCC/ELF - 从哪里来我的符号?

有一个可执行文件动态链接到多个共享对象.如何确定某些符号(导入可执行文件)属于哪一个?

如果有多种可能性,我可以将ld模拟并看到它被拍摄的位置吗?

linux gcc solaris elf ld

4
推荐指数
2
解决办法
1373
查看次数

如何.bss部分初始化为零

我们知道.bss包含未初始化的变量.如果在c代码中,程序员在使用它们之前初始化变量.然后.bss在执行C代码之前不必为零.

我对吗?

谢谢

c gcc elf

4
推荐指数
2
解决办法
6008
查看次数

字节码如Java字节码和文件以及ELF等机器代码可执行文件有什么区别?

字节码二进制可执行文件(如Java类文件,Parrot字节码文件或CLR文件)和机器代码可执行文件(如ELF,Mach-O和PE)之间有何区别.

这两者之间有什么明显的区别?

比如ELF结构中的.text区域等于类文件的哪个部分?

或者它们都有标题,但ELF和PE标题包含Architecture,但Class文件不包含

Java类文件 Java类文件

精灵档案 ELF档案

PE文件 PE文件

executable bytecode elf machine-code .class-file

4
推荐指数
2
解决办法
1万
查看次数

如何从ELF文件中提取函数原型?

我一直在搜索很多,但还没有找到一种方法来提取函数原型,至少从ELF可执行文件中获取参数类型和返回类型.使用GNU BinUtils或任何其他方法.

我尝试在readelf,nm和objdump中使用不同的选项,它们列出了符号和函数名称,但是如何知道函数的参数类型和返回类型?

我有一种直觉,应该有办法做到这一点,任何人都能对此有所了解吗?

主持人:Windows 7

目标:用于PowerPC架构的elf

powerpc elf extraction function-prototypes

4
推荐指数
1
解决办法
4450
查看次数

x86 ELF反汇编程序,反汇编为Intel语法

是否有一个在Linux上运行的反汇编程序,它能够将x86 ELF可执行文件分解为Intel语法中的汇编代码(即操作目标寄存器,源寄存器等)?优选地,输出反汇编器将非常接近NASM语法.objdump -d工作得相当好,但输出AT&T语法,我有时会发现很难遵循,ndiasm只能根据我的知识拆分直接二进制.

linux x86 elf disassembly

4
推荐指数
1
解决办法
7095
查看次数

在objdump的输出中,2**2和2**0的"Algn"是什么意思?

这在下面的文件中意味着什么?2**22**0

$ objdump -h main.o

main.o:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000000b  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000040  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000040  2**2
                  ALLOC
  3 .note.GNU-stack 00000000  00000000  00000000  00000040  2**0
                  CONTENTS, READONLY, CODE
Run Code Online (Sandbox Code Playgroud)

c elf objdump

4
推荐指数
1
解决办法
1002
查看次数

了解节标题ELF

static inline Elf32_Shdr *elf_sheader(Elf32_Ehdr *hdr) {
    return (Elf32_Shdr *)((int)hdr + hdr->e_shoff);
}

static inline Elf32_Shdr *elf_section(Elf32_Ehdr *hdr, int idx) {
    return &elf_sheader(hdr)[idx];
}
Run Code Online (Sandbox Code Playgroud)

好的,这里的第一个函数通过使用返回指向elf节头的指针,hdr_shoff因为这是第一节头的偏移量.现在,第二个函数用于通过使用数组索引来访问更多节标题(如果有的话).

static inline char *elf_str_table(Elf32_Ehdr *hdr) {
    if(hdr->e_shstrndx == SHN_UNDEF) return NULL;
    return (char *)hdr + elf_section(hdr, hdr->e_shstrndx)->sh_offset;
}

static inline char *elf_lookup_string(Elf32_Ehdr *hdr, int offset) {
    char *strtab = elf_str_table(hdr);
    if(strtab == NULL) return NULL;
    return strtab + offset;
}
Run Code Online (Sandbox Code Playgroud)

我遇到上述两个用于访问节名称的函数的问题.e->shstrndx是字符串表的索引.所以在elf_str_table我们首先检查它SHN_UNDEF.但是return我不明白那hdr->e_shstrndx是字符串表的索引,如何将该索引添加到elf_section标头的起始地址,给出另一个elf节标题(因为我们正在使用它访问sh_offset).我的困惑是它e->shstrndx …

c elf

4
推荐指数
1
解决办法
2896
查看次数

ELF,Build-ID,是否有一个实用程序来重新计算它?

我在ELF二进制文件中看到了这个有用的功能 - Build ID."它......(通常)是ELF图像中所有代码部分的SHA1哈希值." 可以用GNU实用程序读取它:

$ readelf -n /bin/bash
...
Displaying notes found at file offset 0x00000274 with length 0x00000024:
  Owner                 Data size   Description
  GNU                  0x00000014   NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 54967822da027467f21e65a1eac7576dec7dd821
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种简单的方法可以自己重新计算Build ID?检查它是否没有损坏等

linux linker elf

4
推荐指数
1
解决办法
4191
查看次数

无法在gdb中找到.bss部分中定义的变量名称

我正在尝试一个简单的汇编代码:

.section .data
output:
    .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"
.section .bss
    .lcomm buffer, 12
.section .text
.code32
.globl _start
_start:
    movl $0, %eax
    cpuid
    movl $output, %edi
Run Code Online (Sandbox Code Playgroud)

在.bss部分我定义了一个名为"buffer"的变量

当我尝试在gdb中获取其地址/值时,它只是打印:

(gdb) p $buffer
$1 = void

使用objdump,我发现该名称不在ELF文件中,那么如何在运行as和ld时保留这些名称信息?谢谢!

assembly gdb gnu-assembler elf debug-symbols

4
推荐指数
1
解决办法
1564
查看次数

-fPIC仅用于共享库吗?

我知道-fPIC共享库是必需的,并且知道为什么。

但是,我不清楚这个问题:

不应-fPIC在构建可执行文件或静态库时使用它?

c c++ gcc compilation elf

4
推荐指数
1
解决办法
559
查看次数