有没有一种可编写脚本的方法从函数中提取asm? (VS2010,海湾合作委员会)

发布于 2024-11-24 05:08:00 字数 225 浏览 4 评论 0原文

我希望能够针对特定功能比较由 Visual Studio 和 gcc 生成的 asm。为了便于论证,我们可以说我们已经知道这个函数存在于两个二进制文件中。

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

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

I would like to be able to compare the asm generated by visual studio and gcc for a particular function. For the sake of argument, lets say that we already know this function exists in both binaries.

What i would like to do is simply run a script that will extract the desired function disassembled (asm) from both binaries. I know how to examine the asm in Visual Studio and gdb respectivly, but i'm a little stumped how to do this in any kind of scriptable manner.

Any ideas or theories would help. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海的爱人是光 2024-12-01 05:08:13

两种编译器都支持命令行选项,该选项使其将生成的汇编语言而不是目标文件作为编译结果。对于 MSVC,使用 /Fa[file](也生成 .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)

Both compilers support a command line option which causes it to leave the generated assembly language as the result of compilation, instead of an object file. With MSVC, use /Fa[file] (and generates the .obj too—tested with VS2008). With gcc, the -S command line option leaves assembly output.

While using the option can be done in the Visual Studio IDE, it seems like a scripted comparison would use a batch file, or other script command line interpreter to compile the files, extract the proper portion with sed or whatever, and then do whatever comparison is needed.

gcc -S x.c       (generates x.S)
cl  /Fa  x.c     (generates x.asm and x.obj)
海拔太高太耀眼 2024-12-01 05:08:13

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

Most compilers can generate assembly output. The syntax differs, though. gcc has the source operand first on all asm instructions, while most other compilers and assemblers have the destination operand first. You can disassemble the object file instead if you want to get the same syntax for all compilers, but you loose some information about variable names etc.
I can recommend the objconv disassembler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文