Поврежденное смещение в инструкции вызова - PullRequest
2 голосов
/ 20 августа 2011

Последние несколько дней были потрачены на отладку очень странной проблемы.Произошел сбой приложения, созданного для i386, работающего в Windows, с полностью поврежденной верхней частью стека вызовов и указателем инструкций в бессмысленном месте.

После некоторых усилий я перестроил стэк вызовов и смог определить, как закончился IP-адрес.в бессмысленном месте.Инструкция в буст-коде общего указателя пытается вызвать функцию, определенную в моей таблице адресов импорта DLL, используя неправильное смещение.Инструкция выглядит следующим образом:

call dword ptr [nonsense offset into import address table]

В результате выполнение оказалось в плохом месте, которое, к сожалению, было исполняемым.Затем выполнение продолжалось, поглощая верхушку стека до тех пор, пока в конечном итоге не рухнул.

Запустив идентичное приложение на моем ПК и войдя в проблемный код, я могу найти ту же инструкцию вызова и увидеть, что она должнавызов нового оператора msvc100.

Продолжая сравнивать мини-дамп с ПК клиента с моим ПК, я обнаружил, что мой ПК вызывает функцию со смещением 0x0254 в таблицу адресов.На клиентском ПК код пытается вызвать функцию со смещением 0x8254.

Еще более запутанным является то, что это смещение не исходит из регистра или другой области памяти.Смещение является постоянной величиной при разборке.Итак, разборка выглядит так:

call dword ptr [ 0x50018254 ]

не похоже:

call dword ptr [ edx ]

Кто-нибудь знает, как это может произойти?

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Это кажется мне аппаратной ошибкой, в основном ошибка памяти.Как указал @Hostile_Fork, это просто немного перевернуло.

Есть ли в вашей памяти функция ECC?это он делает, убедитесь, что включен.Я бы прошёл тест на запись памяти с помощью memtest86, чтобы посмотреть, что произойдет, держу пари, у вас неисправный чип памяти, не похоже на ошибку.

0 голосов
/ 20 августа 2011

Это перевернутый бит:

0x0254 = 0b0000001001010100
0x8254 = 0b1000001001010100

Возможно, повреждена память, поврежден диск, гамма-лучи от солнца ...?

Если этот конкретный случай воспроизводим ибинарный диск соответствует вашему, я бы исследовал дальше.Если это не является специально воспроизводимым, я бы посоветовал клиенту выполнить диагностику компьютера.

...