标签: binutils

如何从libopcodes获取指令信息?

我写它使用的工具libbfd,并libopcodes在X86-32和x86-64 Linux来进行拆卸.问题是,虽然我能够获得libopcodes进行反汇编,但我无法获得任何指令信息.出于演示的目的,我做了一个最小的例子来重现我的问题.该程序应该从入口点拆分到第一个RET/ RETQ.

代码有点被全局修改,为简洁起见省略了错误检查等,但应该清楚地说明问题.

#include <bfd.h>
#include <dis-asm.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <libiberty.h>

/*
 * Holds state for BFD and libopcodes.
 */
bfd *        abfd  = NULL;
disassemble_info dinfo = {0};

/*
 * Temporary hack to signal when disassembling should stop.
 */
static bool stop_disassembling = FALSE;

/*
 * Gets path to currently running executable.
 */
bool get_target_path(char * target_path, …
Run Code Online (Sandbox Code Playgroud)

c linux disassembly binutils

12
推荐指数
1
解决办法
4951
查看次数

如何在Ubuntu上查看Binutils的哪个版本?

我搜索过,但没找到一个选项告诉我我的Ubuntu上有什么版本的binutils.或者至少我不知道如何解释它.

gcc -v - 什么都不说binutils

ld -v - 告诉我GNU ld (GNU Binutils for Ubuntu) 2.24.这是否意味着我有binutils 2.24?

ubuntu binutils

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

使用flto的要求

如果我想编译我的项目-flto是否足以建立gcc --enable-gold或者我还需要构建黄金并用它替换ld?我还需要其他标志吗?即我这样做

gcc -flto one.c two.c
Run Code Online (Sandbox Code Playgroud)

gcc ld binutils lto gold-linker

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

无法编译:部分文本中无法识别的重定位 0x2a

编译“make”时收到错误消息

$ make
g++ -fopenmp  -o lang.test main.o -I../../../include/Lheader -I../../../include -L../../../lib/ -llmi -lblas -lboost_regex -lpthread -lleveldb
/usr/bin/ld: ../../../lib//liblmi.a(LMInterface.o): unrecognized relocation (0x2a) in section `.text'
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我找不到上述问题的任何解决方案。

GCC 版本和 ld 版本是这样的:

$ gcc --version
gcc (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR …
Run Code Online (Sandbox Code Playgroud)

gcc ld binutils

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

如何在mac os x 10.6上安装gnu ld?

我在我的macbook pro(使用mac os x 10.6)上编译非常出色的Contiki OS时遇到了很多麻烦.Contiki实际上使用了许多GNU特有的功能和GCC,AR,LD等选项.所以我通过macports安装了这些实用程序,但看起来"port install binutils"不安装GNU ld,是吗?

所以,问题是,如何在我的Mac上获得GNU ld?是否有一种简单的替代方式(即wget, configure, make, make install方式)?

macos ld binutils

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

ar/nm和gcc-ar/gcc-nm有什么区别?

ar,nmranlib由binutils的包中提供的.gcc-ar,gcc-nmgcc-ranlib由GCC包提供.我听说的gcc-ar,gcc-nm以及gcc-ranlib是"有效的包装"周围ar,nmranlib二进制文件分别.

是什么之间的差异的技术gcc-ar,gcc-nm以及gcc-ranlibar,nmranlib?GCC必须在其构建中提供这些二进制文件.

userland包的构建系统何时应该使用一个而不是另一个?如果用于构建userland包的工具链是基于GCC的,那么您使用哪一个(例如,arvs gcc-ar,nmvs gcc-nm)是否重要?

gcc binutils linux-toolchain

10
推荐指数
1
解决办法
3636
查看次数

将代码/符号修补为动态链接的ELF二进制文件

假设我有一个动态链接的ELF二进制文件,我想覆盖/重定向某些库调用.我知道我可以这样做LD_PRELOAD,但我想要一个在二进制文件中永久存在的解决方案,独立于环境,并且适用于setuid/setgid二进制文件,其中没有一个LD_PRELOAD可以实现.

我想做的是从其他目标文件添加代码(如果需要,可能在新的部分中),并将这些目标文件中的符号添加到二进制符号表中,以便使用新添加的代码版本代替共享库代码.我相信这应该是可能的,而不需要在现有代码中实际执行任何重定位; 即使它们在同一个文件中,它们也应该能够在运行时以通常的PLT方式解析(因为我只关心函数而不是数据).

请不要给我答案"你不想这样做!" 或者"那不便携!" 我正在研究的是一种将二进制文件与稍微ABI不兼容的备用共享库实现连接起来的方法.有问题的平台是i386-linux(即32位),如果重要的话.除非我弄错了什么是可能的,否则我可以编写一些工具来解析ELF文件并执行我的黑客攻击,但我怀疑有一种奇特的方法可以使用GNU链接器和其他工具来完成此操作而无需编写新代码.

c linux elf dynamic-linking binutils

9
推荐指数
1
解决办法
6149
查看次数

如何确定默认情况下gcc传递给ld的命令行选项?

考虑一下hello world C程序:

你好.:

#include "stdio.h"

int main()
{
        printf("Hello, World!\n");
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话:

$ gcc -c hello.c -o hello.o
Run Code Online (Sandbox Code Playgroud)

它将生成一个ELF可重定位文件hello.o

如果我然后打电话:

$ gcc hello.o -o hello            [1]
Run Code Online (Sandbox Code Playgroud)

它将hello.o与ld链接并生成一个ELF可执行文件hello

但是,如果我直接调用ld [2]而不是[1]:

$ ld hello.o -o hello             [2]
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

/usr/bin/ld.bfd.real: warning: cannot find entry symbol _start
test.c:(.text+0xa): undefined reference to `puts'
Run Code Online (Sandbox Code Playgroud)

gcc必须将其他选项传递给ld(例如链接C库).

反正有没有确定命令行gcc在命令中传递给ld的确切内容[1]

c linux gcc binutils

9
推荐指数
1
解决办法
5194
查看次数

如何在Mac OS X主机上为MIPS目标构建GCC 4.8.x.

我正在尝试在运行(10.9)x86_64的Mac OS X主机上为MIPS目标平台构建GCC/binutils.据我所知,我已经下载了最新版本的binutils和GCC,我也通过自制软件安装了GCC 4.8.2.

但是,到目前为止,我还没有成功在OS X主机上为MIPS arch构建GCC/binutils.

我尝试将CC环境变量设置为指向通过自制程序安装的gcc版本,但这似乎无法解决问题.

是否有人为此程序创建了分步指南?

gcc binutils osx-mavericks

9
推荐指数
1
解决办法
2604
查看次数

由于pex-unix文件,binutils构建失败

我想交叉编译GCC.我使用MSYS2作为shell,并使用mingw-w64作为编译器.

我已经下载了binutils-2.25并配置了:

../binutils/./configure --target=sh3eb-elf --prefix=C:/tempinstall/ --disable-nls
Run Code Online (Sandbox Code Playgroud)

我尝试binutilslibiberty/pex-unix文件上构建时出错:

在函数'pex_wait'中:错误:'F_GETFD'未声明(在此函数中首次使用)错误:'FD_CLOEXEC'未声明(在此函数中首次使用)错误:'F_SETFD'未声明(首次在此函数中使用)错误:'F_DUPFD'未申报(首次使用此功能)

在函数'restore_fd'中:错误:'FD_CLOEXEC'未声明(在此函数中首次使用)错误:'F_SETFD'未声明(在此函数中首次使用)

在函数'pex_unix_fdopenw'中:错误:'F_SETFD'未声明(在此函数中首次使用)错误:'FD_CLOEXEC'未声明(首次在此函数中使用)

几个月前我已经构建了相同的编译器而没有任何问题.但我已经改变了OS(Windows 7到W10)和编译器(MinGW-GCC 4.8到Mingw64-GCC 4.9)

我按照本教程

binutils msys2

9
推荐指数
1
解决办法
1246
查看次数