标签: objdump

objdump如何设法使用-S选项显示源代码?

二进制文件中是否有对源文件的引用?我尝试在二进制文件上运行字符串,但找不到对列出的源文件的任何引用...

c linux gcc objdump disassembly

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

如何找出程序或其他库使用共享对象的哪些功能?

如何找出程序或其他库使用共享对象的哪些功能?在这种特定情况下,我想看看/lib/libgcc1_s.so.1中的哪些函数被其他动态库使用.由于它们是动态链接的,因此objdump -d不会解析函数调用地址.有没有办法在调试器中运行程序或静态重新链接?谢谢,

卢卡

编辑:

nm和readelf不会这样做,我不需要查看共享对象中存在哪些符号,但实际上在链接到它的其他对象中使用了哪些符号.

c linux shared-libraries elf objdump

23
推荐指数
3
解决办法
2万
查看次数

缓冲区溢出攻击

我正在尝试执行一个非常简单的缓冲区溢出攻击.我几乎是新手.所以,如果这个问题很愚蠢,请原谅:-)

代码:

#include<stdio.h>
#include<stdlib.h>

int i, n;

void confused(int i) 
{
 printf("**Who called me? Why am I here?? *** %x\n ", i);
}

void shell_call(char *c) 
{
 printf(" ***Now calling \"%s\" shell command *** \n", c);
 system(c);
}

void victim_func()
{
 int a[4];
 printf("Enter n:  ");  scanf("%d",&n);
 printf("~~~~~~~~~~~~~ values and address of n locations ~~~~~~~~~~");
 for (i = 0;i <n ;i++) 
  printf ("\n a[%d] = %x, address = %x", i, a[i], &a[i]);
 printf("\nEnter %d HEX Values \n", n);

 // Buffer …
Run Code Online (Sandbox Code Playgroud)

c buffer-overflow objdump

19
推荐指数
1
解决办法
5814
查看次数

ldd和objdump有什么区别?

我正在运行这两个命令,我得到不同的输出:

$ ldd `which ls`
    linux-gate.so.1 =>  (0x00db3000)
    libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0x00ba2000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x007bf000)
    libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0x004ce000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00398000)
    /lib/ld-linux.so.2 (0x00dea000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00a83000)
    libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0x00d3d000)
Run Code Online (Sandbox Code Playgroud)

然后

objdump -x `which ls` | grep NEEDED
  NEEDED               libselinux.so.1
  NEEDED               librt.so.1
  NEEDED               libacl.so.1
  NEEDED               libc.so.6
Run Code Online (Sandbox Code Playgroud)

那是怎么回事?我以为他们都给了库依赖?我关心的原因是我怀疑ldd是正确的,但我正在使用ARM上的linux,那里没有我能说的ldd ......

linux objdump ldd

18
推荐指数
1
解决办法
6131
查看次数

如何在linux中使用objdump和bash函数在共享对象文件中找到函数?

我在linux中有一个文件夹,它包含几个共享对象文件(*.so).如何在linux中使用objdump和bash函数在共享对象文件中找到函数?

例如,以下示例func1在mylib.so中找到我的函数:

objdump -d mylib.so | grep func1
Run Code Online (Sandbox Code Playgroud)

但我想找到func1包含共享对象文件的文件夹.我不知道bash语言以及如何组合linux终端命令.

c linux bash shared-libraries objdump

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

如何使用only-debug来反转objcopy的条带?

在现代linux中,几乎所有对象都被剥离并分成两部分(两个文件).第一个是可执行的,第二个是调试符号,从原始ELF中删除.这样的文件是用

objcopy --only-keep-debug original.elf binary.dbg
mv original.elf binary
objcopy --strip-debug binary
Run Code Online (Sandbox Code Playgroud)

我该如何合并binarybinary.dbg成ELF文件,调试信息?我想重新创建未经剥离的原始二进制文件.它可以不是与原始字节相同的字节到字节,但必须在其中包含调试符号.

PS是的,我知道gnu.debuglink部分,但它不适用于某些调试器(etnus)和反汇编程序(objdump无法恢复符号信息)

strip objdump binutils objcopy

16
推荐指数
1
解决办法
4435
查看次数

可以objdump C++模板函数的非破坏名称吗?

我有一个C++对象文件,其中包含一些C++模板函数的实例.有问题的目标文件为模板参数的几种不同组合实例化相同的功能.我正在尝试调试一个问题,并希望查看模板函数的特定实例化的反汇编(也就是说,我知道我想要检查的函数的模板参数).我通常会这样做objdump来反汇编目标文件,但它(至少在默认情况下)不能解析C++函数名称.有没有办法做到这一点?目标文件是使用gcc 4.6.1创建的.

c++ gcc name-mangling objdump

16
推荐指数
2
解决办法
8951
查看次数

为什么gcc输出机器代码有nop指令

每次我做一个objdump -d我总是看到asm代码与批量的nop指令(指令什么都不做)

例如,采取相同的程序:

#include <stdio.h>
#include <math.h>

int main()
{
    printf("Hello World!\n");
    printf("cos:  %f\n", cos(1));
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

示例的objdump在入口点的末尾有2个nops

0000000000400450 <_start>:
400450: 31 ed                   xor    %ebp,%ebp
400452: 49 89 d1                mov    %rdx,%r9
400455: 5e                      pop    %rsi
400456: 48 89 e2                mov    %rsp,%rdx
400459: 48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
40045d: 50                      push   %rax
40045e: 54                      push   %rsp
40045f: 49 c7 c0 00 06 40 00    mov    $0x400600,%r8
400466: 48 c7 c1 70 05 40 00    mov    $0x400570,%rcx
40046d: 48 c7 …
Run Code Online (Sandbox Code Playgroud)

c objdump nop

15
推荐指数
2
解决办法
1114
查看次数

如何使用/安装GNU binutils(objdump)

我需要在我的应用程序中使用objdump和readelf命令在Windows上运行.我知道我可以安装cygwin以便使用它们.我之所以不想使用cygwin是因为我想让它的文章部署.另外我不知道如何安装cygwin.因此,我认为我需要的是GNU Utilities For Win32,因为链接声明这些库是无服务器的."可执行文件仅依赖于Microsoft C-runtime(msvcrt.dll),而不依赖于Cygwin工具提供的仿真层"

无论如何,一旦我去那个链接,我不知道如何安装它.具体来说,我想使用>这个工具<

如果有人可以指出我将如何在我的应用程序中使用objdump和readelf(binutils in cygwin),我将不胜感激.

windows cygwin gnu objdump binutils

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

如何处理“DWARF 错误:.debug_info 部分大于其文件大小!”?

寻找在我的二进制文件(准确地说.so)中查看特定函数的生成汇编程序的方法,就像我在Compiler Explorer上看到类似的那样,我发现了How to disassemble one single function using objdump? 并根据那里的答案(以及我的进一步搜索)我最终使用了以下命令:

objdump --wide --no-address --no-show-raw-insn [--demangle] --disassemble="<symbol>" -- "<binary>"
Run Code Online (Sandbox Code Playgroud)

<symbol>我发现使用的地方:

objdump --syms [--demangle] -- "<binary>" | grep <function>
Run Code Online (Sandbox Code Playgroud)

其中,the 又<function>是我感兴趣的 C++ 函数名称。当然,the<symbol>是一个损坏的名称。(为了完整起见,我得到了两个结果 - 一个是预期的结果,另一个是带.cold后缀的结果,由“主结果”使用。)


结果已经很扎实了。然而,浏览objdump选项后我看到了有希望的选项:

  • -C/ --demangle,
  • -l/ --line-numbers,
  • -S/ --source

但是,我无法让他们工作......

INITIAL:第一个 ( -C/ --demangle) 导致根本不打印任何反汇编代码。如果没有它,在该Disassembly of section .text:行之后我会有一行带有符号的行,后跟反汇编。使用此选项时,不会显示符号和反汇编,而是Disassembly of section .fini: …

elf debug-symbols objdump disassembly dwarf

13
推荐指数
1
解决办法
7851
查看次数