标签: objcopy

如何从 elf 文件格式创建可执行十六进制

我对此非常陌生,我有 elf 文件input.out,需要从中创建十六进制可执行文件。我正在使用 objcopy 创建 intel 十六进制格式的可执行文件,如下所示

objcopy -O ihex input.out out.hex
Run Code Online (Sandbox Code Playgroud)

通过这个 out.hex 包含来自所有部分(.interp、.note.ABI-tag 等)的数据,但我不确定可执行文件是否需要所有这些数据。.text 部分足以创建可执行的十六进制,所以我可以按如下方式使用,还是需要更多部分

objcopy -j.text -O ihex input.out out.hex
Run Code Online (Sandbox Code Playgroud)

另外,如果有任何好的参考来详细了解这一点,我无法通过 Goggling 找到太多内容。可能我不知道要搜索什么。

linux gcc elf icc objcopy

7
推荐指数
1
解决办法
3万
查看次数

Objcopy elf 到 bin 文件

我有 STM32F404 板,我正在尝试刷新它。我正在关注本教程

在项目Makefile 中

$(PROJ_NAME).elf: $(SRCS)
    $(CC) $(CFLAGS) $^ -o $@ 
    $(OBJCOPY) -O ihex $(PROJ_NAME).elf $(PROJ_NAME).hex
    $(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin

burn: proj
    $(STLINK)/st-flash write $(PROJ_NAME).bin 0x8000000
Run Code Online (Sandbox Code Playgroud)

bin 文件是使用生成的OBJCOPY,然后使用 Make 目标进行刷写burn

我的问题:

问题 1OBJCOPY=arm-none-eabi-objcopy在这种情况下有什么作用。我打开了那个人,但我并没有完全理解,谁能简单解释一下?

问题 2:闪烁 bin 文件给出了预期的结果(LED 闪烁)但是闪烁 elf 文件时 LED 没有闪烁,$(STLINK)/st-flash write $(PROJ_NAME).elf 0x8000000为什么?

elf stm32 bin objcopy

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

怎么理解这个?

这是来自这个问题.

 gcc -c test.s
 objcopy -O binary test.o test.bin
Run Code Online (Sandbox Code Playgroud)

test.o和之间有什么区别test.bin

.text
    call start
    str:
        .string "test\n"
    start:
    movl    $4, %eax
    movl    $1, %ebx
    pop     %ecx
    movl    $5, %edx
    int     $0x80
    ret
Run Code Online (Sandbox Code Playgroud)

上面做了什么?

assembly objcopy

6
推荐指数
2
解决办法
836
查看次数

GCC:如何告诉GCC将'main'函数放在.text段的开头?

我刚刚开始学习一些ARM编程,但我遇到了一个有点恼人的问题.我用来编译源代码的工具链是Sourcery CodeBench Lite 2013.05-23(可以在这里找到:https://sourcery.mentor.com/GNUToolchain/release2449 )

我需要的是告诉GCC或LD或OBJCOPY将'main'函数的编译字节码放在.text段的开头.

有没有办法实现这个目标?(也许通过链接器脚本?)

谢谢

gcc program-entry-point ld linker-scripts objcopy

6
推荐指数
2
解决办法
5469
查看次数

带有 objcopy 的巨大二进制文件

当我在 ARM9 处理器的基本 C 程序中定义全局变量时遇到问题。我正在使用 EABI GNU 编译器,从 12KB 精灵生成的二进制文件是 4GB!我认为问题出在我的分散文件上,但我无法理解它。

我有 256KB 的 ROM(基址 0xFFFF0000)和 32KB 的 RAM(基址 0x01000000)

SECTIONS {
  . = 0xFFFF0000;
  .text : {
    * (vectors);
    * (.text);
  }
  .rodata : { *(.rodata) }
  . = 0x01000000;
  sbss = .;
  .data : { *(.data) }
  .bss  : { *(.bss) }
  ebss = .;
  bssSize = ebss - sbss;
}
Run Code Online (Sandbox Code Playgroud)

我的程序如下:

int a=10;
int main() {
  int b=5;
  b = (a>b)? a : b;  
  return b;
}; …
Run Code Online (Sandbox Code Playgroud)

c linker gcc arm objcopy

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

在ELF文件中编辑变量值?

我需要在已编译的ELF文件中更改几个变量。为了清楚地说明这一点,我将使用一个简单的C结构作为示例。

单个源文件被编译并从MyFile.c链接(@ 0x1000)到MyFile.elf:

typedef struct {
    uint32_t SerialNumber;      /* Increments for every time it's programmed */
    uint32_t PartNumber;        /* Always the same */
    char     ProdDateTime[32];  /* "YYYY-MM-DD HH:MM:SS" date/time when programmed */
    uint32_t CalcCrc32;         /* Checksum of the above data */
} MyData_T;

const MyData_T MyData = {
    /* SerialNumber      */ 0x11111111,
    /* PartNumber        */ 0x12345678,
    /* ProdDateTime[32]  */ "2013-11-10 12:49:30",
    /* CalcCrc32         */ 0xC0CAC01A
                        };
Run Code Online (Sandbox Code Playgroud)

现在,我需要一个“控制台工具”(无需编译):

  1. 将新的序列号写入0x1000
  2. 将新字符串写入0x1008
  3. 在0x1028更新校验和。

我还没有找到可以完成第一个(1)任务的工具(objcopy等?)。似乎这应该是一个相当普遍的情况?我现在已经编写了自己的工具,但是希望使用开源工具或类似工具。

任何建议/想法/评论/批评都非常感激:D谢谢!!

c c++ elf objcopy

5
推荐指数
1
解决办法
1998
查看次数

使用GNU objcopy从Elf创建可执行二进制文件

我想通过以下方式复制可执行的ELF文件:

$ objcopy -O binary myfile.elf myfile.bin
Run Code Online (Sandbox Code Playgroud)

不幸:

$ chmod +x myfile.bin
$ ./myfile.bin
Run Code Online (Sandbox Code Playgroud)

结果:无法执行二进制文件

有没有办法保留文件的可执行性?

linux executable gnu file objcopy

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

如何在Mac OS X的可执行文件中嵌入二进制文件的内容?

我的命令行程序的生成过程生成一个二进制文件(超过500KB),当前必须由argv的路径引用该文件。我想将此文件嵌入可执行文件中。

在Linux上,似乎可以用来objcopy从二进制文件制作目标文件:

objcopy --input binary --output elf32-i386 --binary-architecture i386 myfile.dat myfile.o
Run Code Online (Sandbox Code Playgroud)

但是,OS X开发人员工具链不包含objcopy命令。如果不安装binutils,有什么可能?

我从Xcode构建项目,并使用自定义构建规则生成文件。

macos xcode objcopy

5
推荐指数
2
解决办法
1034
查看次数

使用autoconf从二进制文件生成对象(.o)的自定义命令

我们有一个项目(c ++),它需要在共享库中包含一个二进制文件.这是通过引用资源文件中的二进制文件在Windows上完成的.在Linux上可以通过使用objcopy把如图所示实现

问题是如何使用autoconf/automake自动化?存在Makefile.am和configure.ac文件.这是一项手动任务吗?

(也许这个问题需要在unix堆栈交换站点上?)

c++ linux automake autoconf objcopy

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

objcopy 对静态库的不可预见的后果

背景

我有一组三个几乎相同的静态库(用 编译-fPIC),我无法重新编译它们。所有库都导出相同的符号,因此我将它们捆绑在一起的唯一方法是通过 为每个静态库修改带有前缀的符号objcopy,即:

for i in pineapple coconut banana
do
    objcopy --prefix-symbols=${i}_ lib${i}.a
done
Run Code Online (Sandbox Code Playgroud)

现在,我拥有三个具有独特符号的库,并且可以继续编写标头来处理每个库的三个近乎重复的标头/API 文件。


问题

像这样重命名库的导出符号安全吗?它是否有任何可能导致运行时稳定性问题的“陷阱”或不可预见的后果?库本身内对符号的所有引用是否都会自动更正,或者某些库代码(除了调用之类的代码之外dlsym())是否可能会尝试引用旧符号和段错误?

c linker gcc static-libraries objcopy

3
推荐指数
1
解决办法
996
查看次数