![]() |
发怒的洋葱 · 华为智选818焕新季· 3 天前 · |
![]() |
爱喝酒的手链 · 直播间布光| ...· 1 周前 · |
![]() |
腼腆的柳树 · 贝尔对战荒野:你的荒野求生第一季You ...· 8 月前 · |
![]() |
爱搭讪的猴子 · (1)独立适用剥夺政治权利或者判处有期徒刑· 11 月前 · |
![]() |
焦虑的面包 · "第10放映室"主创分道 ...· 1 年前 · |
如何查看C++程序的汇编代码?
有什么流行的工具可以做到这一点呢?
无论使用哪种调试器,都应该有一个程序集视图(Visual Studio、Borland IDE、gdb等)。如果您不使用调试器,并且只想查看程序中的程序集,则可以使用反汇编程序,或者运行该程序并使用调试器附加到该程序,然后从那里进行转储。有关选项的信息,请参见 disassemblers 参考。
正如其他人所提到的,您的平台的调试器是一个很好的起点。要了解所有调试器和反汇编程序的使用技巧,请查看 IDA Pro.
在Unix/Linux平台(包括Cygwin)上,您可以使用
objdump --disassemble <executable>
。
在GCC/G++中,用
-S
编译。它将输出一个包含汇编代码的
something.s
文件。
编辑:如果您希望输出采用英特尔语法(这是IMO语法,可读性更好,大多数汇编教程都使用它),请使用
-masm=intel
进行编译。
大多数编译器都有输出汇编清单的选项。例如,在VisualStudio中,您可以使用以下内容:
cl.exe /FAfile.asm file.c
不过,为了获得最佳可读性,大多数调试器都会提供将反汇编与原始源代码交错的视图,以便您可以逐行将代码与编译器的输出进行比较。
在Visual Studio中,您可以为C++项目生成汇编程序清单。
转到项目属性,然后转到C++/输出文件,并将汇编程序输出设置和ASM列表位置设置为一个文件名。
32位PE文件的 PE Explorer Disassembler 。另一些人则使用IDA。
对于gcc/g++
gcc -save-temps -fverbose-asm prog.c
这将生成prog.s,并对每个asm行中使用的变量进行一些注释:
movl $42, -24(%ebp) #, readme
movl -16(%ebp), %eax # pid, pid
movl %eax, 4(%esp) # pid,
movl $.LC0, (%esp) #,
call printf #
在Intel MacOSX10.8 (Mountain Lion)上,
-masm=intel
指令不起作用。但是,如果你安装了
Xcode
,它应该已经安装了名为‘otool’的工具:
otool code.o -tV
您必须将编译后的目标代码作为参数提供。
你也可以尝试这个网站: http://assembly.ynh.io/
在那里,您可以粘贴C或C++代码,然后按下蓝色按钮以查看程序集的等效版本。
这个网站目前正在为我工作(2017): https://godbolt.org/
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券