О очистке стека и отдельном процессе - PullRequest
0 голосов
/ 19 июня 2011

Мне нужно использовать функцию в файле obj, для которого у меня нет исходного кода.Функция работает хорошо и выполняет свою работу, но она повреждает стек (esp времени выполнения не был должным образом сохранен .. ошибка в Visual Studio C ++ 2010), и я недостаточно хорошо знаю сборку, чтобы найти проблему и исправить ее.(Из того, что я прочитал, это связано с тем, что у меня не было одинакового количества нажатий и выпадений.) Я попытался выполнить функцию в отдельном потоке, но, поскольку она разделяет ту же память, что и моя основная программа, она также падает.Функция работает и делает все, что ей нужно, ожидая, что она повредит стек и вызовет сбой приложения.Есть ли способ, которым я могу изолировать его от моего основного приложения?Я читал о CreateProcess, но из того, что я понял, он выполняет отдельный файл .EXE, который я не хочу делать.Я хочу выполнить функцию, как если бы она была внешней программой, чтобы она не вызывала сбой моей основной программы, даже если она повреждает стек.Во всяком случае, делать такие вещи в C / C ++?Или, может быть, у кого-то есть другая идея, чтобы все исправить?Кроме того, мне все равно, «грязная» ли она или не соответствует стандарту, так как я пишу эту программу для личного использования.Поскольку функция делает то, что ей нужно, я действительно стараюсь сохранить ее, даже если она портит стек вызовов.

Большое спасибо

1 Ответ

2 голосов
/ 19 июня 2011

Это очень пахнет как несоответствие соглашения о вызовах.Задокументировано ли где-нибудь, как должна вызываться функция?У вас есть файл заголовка, содержащий прототип функции для функции?Попробуйте назвать его с другим соглашением о вызовах - если вы называете его как cdecl, попробуйте назвать его как stdcall или наоборот.

См. Также Что может пойти не так, когда выне соответствует соглашению о вызовах? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...