我有一个C++目标文件,其中包含一些C++模板函数的实例化。有问题的目标文件为模板参数的几个不同组合实例化了相同的函数。我正在尝试调试问题,并想查看模板函数的特定实例化的反汇编(即,我知道要检查的函数的模板参数)。我通常会使用objdump来反汇编目标文件,但它(至少在默认情况下)无法对C++函数名称进行反分解。有没有办法做到这一点?目标文件是使用gcc4.6.1创建的。 最佳答案 objdump-C-C标志启用去重:printf'templateTadd(Tx,Ty){returnx+y;}voidh(){add(1,2);add
[深呼吸。]我们有一个使用WxMotif2.6.3弹出窗口的应用程序(GUI库过去不是——现在也不是——我的选择)。它在32位ix86系统上运行良好。我的任务是将它转换为64位应用程序。它总是出现段错误。我在RHEL6上,所以我使用gcc4.4.7编译。在咬牙切齿之后,问题似乎很明显:在wxFrame::DoCreate中,m_mainWidget被设置(正确);在wxFrame::GetMainWidget中,它作为空指针返回。空指针导致崩溃。使用gdb,设置m_mainWidget的指令是mov%rax,0x1e0(%rdx)#$rdx=0x68b2f0而获取m_mainWidge
我想在WindowsXP中对一个可执行文件运行objdump,并想观察细节。但是,我找不到将结果输出到文本文件的选项——因为控制台中的输出显示被切断了(我也试过使用选项-o或/out来指定ooutfilename,但似乎不存在) 最佳答案 难道shell的正常输出重定向对你不起作用吗?示例:objdump-dfile.o>file.txt 关于c++-如何将objdump结果发送到文件?,我们在StackOverflow上找到一个类似的问题: https://
我们如何使用objdump输出到二进制文件?这绝对不是正确的做法:objdump-s-j.text/path/firmware.ko>/content.bin因为它只呈现文本格式。我只需要提取文本段的字节并设置为二进制形式。 最佳答案 我们必须使用-I显式指定文件格式。objcopy-I#filetypeformat#-j#ELFsegmentcontentstocopy#-O#datatypetooutput,binary,etc##inputfile##outputfile#例如。objcopy-Ielf32-little-j.
我试图了解程序的可执行程序集在加载/运行时到底在哪里结束。我发现有两个资源在谈论这个,但它们有点难以阅读:UnderstandingELFusingreadelfandobjdumpLinuxarticle(代码格式困惑)MichaelGuyver,SomeAssemblyRequired*:Relocations,Relocations(很多我并不完全精通的汇编)所以,这是一个简短的例子;我感兴趣的是tail程序的可执行部分在哪里结束。基本上,objdump告诉我这个:$objdump-dj.text/usr/bin/tail|head-10/usr/bin/tail:filefor
我需要知道二进制文件中是否有调试符号。它是一个生产系统,因此没有像file或objdump或gdb这样的命令。可以在需要时提供更多信息。操作系统:Debian 最佳答案 可能您正在寻找像objdump这样的工具假设我们有这样一个小程序#includeintmain(){printf("Hello");return0;}现在可以正常编译gccexample.c-oexample现在让我们使用objdump工具检查是否存在调试符号objdump-hexample|grepdebug我们当然找不到任何东西现在让我们通过使用调试选项进行编译
我有一个目标文件,正在尝试反汇编它。当我使用时:objdump-dexample.o我得到一个文件格式为elf64-x86-64的程序集。我正在尝试将其反汇编为ARM,我该怎么做? 最佳答案 如果你想反汇编ARM代码,你最好有一个ARM工具链,这是我得到的:http://bb.osmocom.org/trac/wiki/toolchain有了这个之后,你就可以使用arm-elf-objdump而不是objdump。我使用的命令是arm-elf-objdump-D-bbinary-marmbinaryfile.dat如果查看联机帮助页
我正在运行这两个命令,但得到了不同的输出:$ldd`whichls`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.s
我需要了解我正在从事的项目的ELF文件布局,并且我注意到这些工具的存在。为什么所有Linux发行版都包含readelf和objdump?这些工具是否相互补充?我什么时候更喜欢使用其中一个而不是另一个? 最佳答案 来自binutils/readelf.c:/*Thedifferencebetweenreadelfandobjdump:BothprogramsarecapabaleofdisplayingthecontentsofELFformatfiles,sowhydoesthebinutilsprojecthavetwofiled
无论如何,这可以做到吗?我使用了objdump,但这不会产生我所知道的任何汇编程序都可以接受的汇编输出。我希望能够更改可执行文件中的指令,然后再对其进行测试。 最佳答案 我认为没有任何可靠的方法可以做到这一点。机器码格式非常复杂,比汇编文件更复杂。实际上不可能获取已编译的二进制文件(例如,ELF格式)并生成将编译为相同(或足够相似)二进制文件的源汇编程序。要了解这些差异,请将GCC直接编译到汇编器的输出(gcc-S)与objdump在可执行文件上的输出(objdump-D)进行比较。我能想到两个主要的并发症。首先,由于指针偏移等原因