关于堆栈清理和单独的过程

时间:2011-06-19 04:12:29

标签: c++ process stack

我需要在obj文件中使用一个函数,我没有源代码。该功能运行良好并完成其工作,但它破坏了堆栈(运行时esp没有正确保存..在visual studio c ++ 2010中出错),我不知道组装是否足以找到问题并对其进行修补。 (从我读过它与没有相同数量的弹出和推送有关。)我尝试在一个单独的线程中执行该函数,但由于它与我的主程序共享相同的内存,它也崩溃了。该函数可以工作并完成它需要做的所有事情,期望它破坏堆栈并使应用程序崩溃。有什么方法可以将它与我的主应用程序隔离开来吗?我读过有关CreateProcess的内容,但据我所知,它执行了一个我不想做的单独的.EXE文件。我想执行一个函数,好像它是一个外部程序,所以它不会崩溃我的主程序,即使它破坏了堆栈。无论如何要在C / C ++中做这样的事情?或者也许有人有另一个想法来解决问题?此外,我不关心它是否“脏”或不符合标准,因为我正在编写此程序供个人使用。由于函数完成了它需要做的事情,即使它破坏了调用堆栈,我也真的试图保留它。

非常感谢

1 个答案:

答案 0 :(得分:2)

这闻起来非常像一个呼叫惯例不匹配。是否记录了如何调用函数?你有一个包含该函数函数原型的头文件吗?尝试使用其他调用约定调用它 - 如果您将其称为cdecl,请尝试将其称为stdcall,反之亦然。

另见What can go wrong when you mismatch the calling convention?