2014-01-29 81 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