Articles of objdump

什么时候会使用.fini_array部分?

我正在遵循http://tinyhack.com/2014/03/12/implementing-a-web-server-in-a-single-printf-call/写一个只有printf()调用的Web服务器。 我正在遵循这篇文章的指导。 Howerver,我发现我的程序的可执行文件在objdump的帮助下不包含.fini_array部分。 注意到.fini_array是由Linux Standard Base Core Specification定义的。 我读过它,我很好奇.fini_array部分和.fini部分之间的关​​系,他们怎么可以一起工作? 似乎.fini_array是没有必要的。 所以当它被使用,我应该如何继续我的工作?

objdump和udis86在拆卸/ proc / kcore时产生不同的输出

我需要在Linux中反汇编/proc/kcore文件,我需要获得一些特殊指令的虚拟地址,以便稍后放置kprobes 。 根据这个文件 /proc/kcore是一个物理内存的映像,但在这个问题上有人回答说,它是内核的虚拟内存(正是我所期待的)。 当我使用objdump工具进行反汇编时,它的地址从f7c0b000开始,但是udis86从0x0开始(和完全不同的指令)。 当我尝试grep一些特定的指令,让我们说mov 0xf7c1d60c,%edx ,我得到: objdump的 f7c0b022 mov 0xf7c1d60c,%edx udis86 290ec02a mov 0xf7c1d60c,%edx 它看起来像udis86和objdump之间的偏移总是0xbffff000 。 为什么这么奇怪的抵消 我怎样才能获得特定指令的虚拟地址? 我读过的地方是,这个内核被静态映射到虚拟地址0xc0000000 + 0x100000。 如果/proc/kcore是真正的物理映像,只有将objdump返回的地址加上0x100000才是正确的,我会得到虚拟地址?

objdump将文本段的内容提取为二进制格式

我们如何使用objdump输出到二进制文件? 这绝对不是正确的做法: objdump -s -j .text /path/firmware.ko> /content.bin 因为它只是呈现文本格式。 我只需要提取文本段的字节并以二进制forms设置。

nm,objdump&pfunct给出了矛盾的答案来检查一个函数是否内联

我有一个共享的obj文件说a.so,并在那我想看看是否一个特定的function(如fname)是内联或不。 我尝试了以下4种方法并得到不同的答案: 1) nm a.so | grep fname – >这没有给出任何o / p意味着该函数内联。 请让我知道如果这是足够的检查,看看是否一个函数内联。 2) objdump -d a.so | grep fname – >这没有给出任何o / p意味着该函数内联。 如果我在这里得出结论,请纠正我。 3) objdump -W a.so – >为函数fname,这给了我以下o / p最后一行说:“声明为内联但被忽略” DW_AT_name : (indirect string, offset: 0x10411): fname DW_AT_decl_file : 246 DW_AT_decl_line : 40 DW_AT_prototyped : 1 DW_AT_inline : 2 (declared as inline […]

arm-linux-gnueabi编译器选项

我正在使用arm-linux-gnueabi-gcc来为Linux中的ARM处理器编译C程序。 不过,我不确定它编译的默认ARM模式是什么。 例如,对于C代码: test.c的 unsigned int main() { return 0x1ffff; } arm-linux-gnueabi-gcc -o test test.c 现在,当我看着用objdump反汇编main()函数时,我可以看到: arm-linux-gnueabi-objdump -d test <main>: push {r7} add r7, sp, #0 movw r3, #65535 ; 0xffff movt r3, #1 mov r0, r3 mov sp, r7 pop {r7} bx lr 看来这是ARM的Thumb模式的反汇编(由于推送指令)。 我如何显示反汇编如下: .sect ".text" .global _fn _fn: MOVW A1,#65535 MOVT A1,#1 […]

我如何分解原始的MIPS代码?

类似于如何反汇编原始x86代码? ,但是对于MIPS架构:如何用objdump反汇编原始MIPS代码? 我想检查vmlinux映像中的说明,但要做到这一点,我现在必须: : > xc mipsel-linux-gnu-gcc -c -o xo xc mipsel-linux-gnu-objcopy –add-section raw=vmlinux xo mipsel-linux-gnu-objcopy –remove-section .comment xo mipsel-linux-gnu-objdump -D xo | less 有没有更简单的方法来做到这一点? 我已经尝试了下面的无济于事: mipsel-linux-gnu-objdump -b elf32-tradlittlemips -mmips -Mgpr-names=O32,cp0-names=mips1,cp0-names=mips1,hwr-names=mips1,reg-names=mips1 -D vmlinux | less 它只是吐出来: mipsel-linux-gnu-objdump: vmlinux: File format not recognized 如果有帮助,下面是一些命令的输出: $ file xo xo: ELF 32-bit LSB relocatable, MIPS, MIPS-I version 1 […]

可以gnu utils在Mac上,如gobjdumpparsing器Linux ELF二进制?

所以基本上我有一些在Linux 32位编译的ELF二进制文件。 我想在我的Mac 64位上进行分析。 我正在尝试使用由gobjdump和greadelf等自制程序安装的gnu utils。 但是,当我尝试使用gobjdumpparsing精灵二进制文件时,出现此错误: gobjdump: hello: File format is ambiguous gobjdump: Matching formats: elf32-i386-nacl elf32-i386-sol2 elf32-i386-vxworks elf32-i386 所以我的问题是: 是否有可能使用其GNU使用情况分析MAC上的32位Linux编译的ELF二进制文件? 如果可能,怎么做?

将源与C ++程序的程序集相关联

分析零售版本中的核心转储通常需要关联任何特定模块和源代码的objdump 。 正常情况下,如果function相当复杂,将程序集转储与源代码关联起来会变得很痛苦。 今天我试着创build一个特定模块的assembly listing (带有编译选项-S ),期望我能看到一个具有汇编或相关性的交错源。 不幸的是,上市不够友好,所以我想知道 给定一个核心转储,我可以从中确定崩溃位置 objdump的失败模块通过重新编译程序集列表 带-S选项的模块。 是否可以与来源进行一对一的对应? 作为一个例子,我看到汇编列表 .LBE7923: .loc 2 4863 0 movq %rdi, %r14 movl %esi, %r12d movl 696(%rsp), %r15d movq 704(%rsp), %rbp .LBB7924: .loc 2 4880 0 testq %rdx, %rdx je .L2680 .LVL2123: testl %ecx, %ecx jle .L2680 movslq %ecx,%rax .loc 2 4882 0 testl %r15d, %r15d […]

objdump和parsing本地函数调用的链接?

如果我在(linux amd64).o文件中运行objdump -d,函数调用将显示出来,而不会执行链接时间parsing。 例: 90: 66 89 44 24 1c mov %ax,0x1c(%rsp) 95: 44 89 74 24 10 mov %r14d,0x10(%rsp) 9a: e8 00 00 00 00 callq 9f <foo+0x9f> 9f: 83 f8 ff cmp $0xffffffffffffffff,%eax a2: 74 5e je 102 <foo+0x102> 函数中的一个分支显示正确,但是callq只是连接器的存根(连接器有四个字节的零用来放置正确的地址)。 有没有一种方法,而不是真正的链接,以获得一个函数名称解决的程序集清单? 我不关心最终将使用的地址,只是函数的名称。 该信息必须在.o文件中,因为链接器必须使用它来完成它的工作。 我问,因为有问题的代码进入的共享库大约是140Mb,运行objdump -d需要很长时间才能获得所有函数调用parsing为实际名称的asm转储。

objdump默认哪个部分反汇编

我目前正在构build一个可执行的裸机,其中包含一些包含代码的特殊部分。 但是,当我做objdump -d .init.text我只获得.text和.init.text部分的代码。 objdump的联机帮助页仅表示在使用-d选项时,它“仅反汇编那些预期包含指令的部分”。 这些部分是什么,以及objdump如何告诉哪些部分解码? 我知道我也可以使用-D选项来获得所有部分的完整解码,但这通常比我需要的要多得多。