2014-01-29 42 views
0

我想通过操作C++的汇编指令来“测试”C++中的函数。 做这种事情的最佳方式是什么?操作组装指令

我想一种方法是让它编译或一个可执行文件,然后由另一个程序,然后试图操纵它启动.exe。 如果被测功能有一个点仍在运行但等待某些东西(即用户输入),那么模拟器(启动被测功能的程序)甚至不需要设置某种类型的断点进去。

如何启动程序并操作其组装说明?

更清楚: 是它实际上可以编写一个简单的模拟器(设定断点或用于第一步骤没有休息点),然后访问运行功能被测的存储器操纵其组装说明? 这将是一个非常小的简单版本的大gdb。

+1

我们是在谈论脱机操作(如保罗以下建议)或运行时(JIT ),这有时被称为动态二进制优化/翻译? – Leeor

+0

@Leeor我想在程序运行时更改程序。这就是为什么我写了一个断点。对于我的问题的完美解决方案是设置时间和位置以更改一位/几位以查看待测功能的行为方式。 – Daniel

+0

如果你想手动执行,你可以使用gdb。如果您需要将其自动化,您可以在仿真器或模拟器下运行它,并触发该断点(或任何其他事件)。 – Leeor

回答

2
  • 写(和测试)C++程序Foo.cpp中

  • 编译到asembly源(g++ -Wall -S foo.cpp - 输出将foo.s)

  • REPEAT

    • 修改foo.s

    • assemble foo .S(gcc foo.s

    • 测试生成的可执行文件(./a.outgdb ./a.out

  • 炒熟

+0

Thx对于这个想法,但我宁愿在运行时操作程序(请参阅我的评论) – Daniel