Visual studio 2010 是否有一种可编写脚本的方法从函数中提取asm?(VS2010,gcc)
我希望能够比较VisualStudio和gcc为特定函数生成的asm。为了便于讨论,假设我们已经知道这个函数存在于两个二进制文件中 我想做的只是运行一个脚本,从两个二进制文件中提取所需的反汇编函数(asm)。我知道如何分别在VisualStudio和gdb中检查asm,但我有点困惑如何以任何一种可编写脚本的方式来完成这项工作Visual studio 2010 是否有一种可编写脚本的方法从函数中提取asm?(VS2010,gcc),visual-studio-2010,gcc,automation,disassembly,Visual Studio 2010,Gcc,Automation,Disassembly,我希望能够比较VisualStudio和gcc为特定函数生成的asm。为了便于讨论,假设我们已经知道这个函数存在于两个二进制文件中 我想做的只是运行一个脚本,从两个二进制文件中提取所需的反汇编函数(asm)。我知道如何分别在VisualStudio和gdb中检查asm,但我有点困惑如何以任何一种可编写脚本的方式来完成这项工作 任何想法或理论都会有所帮助。谢谢 这两个编译器都支持命令行选项,该选项使编译器将生成的汇编语言保留为编译结果,而不是对象文件。使用MSVC,使用/Fa[文件](并生成.ob
任何想法或理论都会有所帮助。谢谢 这两个编译器都支持命令行选项,该选项使编译器将生成的汇编语言保留为编译结果,而不是对象文件。使用
MSVC
,使用/Fa[文件]
(并生成.obj
,也使用VS2008进行测试)。使用gcc
,-S
命令行选项将保留程序集输出
虽然可以在Visual Studio IDE中使用该选项,但脚本化比较似乎会使用批处理文件或其他脚本命令行解释器来编译文件,使用sed
或其他任何方法提取适当的部分,然后进行所需的任何比较
gcc -S x.c (generates x.S)
cl /Fa x.c (generates x.asm and x.obj)
大多数编译器都可以生成程序集输出。不过,语法不同。gcc在所有asm指令中首先使用源操作数,而大多数其他编译器和汇编器则首先使用目标操作数。如果您想为所有编译器获得相同的语法,但丢失了一些关于变量名等的信息,则可以反汇编对象文件。 我可以推荐反汇编程序