是否有一种可编写脚本的方法从函数中提取asm? (VS2010,gcc)

时间:2011-07-15 07:50:32

标签: visual-studio-2010 gcc automation disassembly

我希望能够将visual studio和gcc生成的asm与特定函数进行比较。为了论证,我们已经知道这个函数存在于两个二进制文件中。

我想要做的只是运行一个脚本,从两个二进制文件中提取所需的函数disassembled(asm)。我知道如何分别在Visual Studio和gdb中检查asm,但我有点难以理解如何以任何可编写脚本的方式执行此操作。

任何想法或理论都会有所帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

两个编译器都支持命令行选项,这会导致它将生成的汇编语言保留为编译结果,而不是目标文件。使用MSVC,使用/Fa[file](并使用VS2008生成.obj过度测试。使用gcc-S命令行选项将离开程序集输出。

虽然可以在Visual Studio IDE中使用该选项,但似乎脚本比较将使用批处理文件或其他脚本命令行解释器来编译文件,使用sed或无论如何,然后做任何比较都需要。

gcc -S x.c       (generates x.S)
cl  /Fa  x.c     (generates x.asm and x.obj)

答案 1 :(得分:0)

大多数编译器都可以生成汇编输出。但语法不同。 gcc首先在所有asm指令上有源操作数,而大多数其他编译器和汇编器首先具有目标操作数。如果你想为所有编译器获得相同的语法,你可以反汇编目标文件,但是你丢失了一些关于变量名等的信息。 我可以推荐objconv反汇编程序。