Пункты 2 и 3 легко ответить:
3-я точка. Любой отладчик. Вот для чего они сделаны. Установите ваш отладчик, чтобы сломать это специальное исключение. Вы должны быть в состоянии щелкнуть себя по стеку вызовов и найти различные вызовы в стеке (по крайней мере, Delphi может сделать это, так что Visual Studio также должен это делать). Компиляция без оптимизаций, если это возможно. OllyDBG также может работать - возможно, в сочетании с функциональностью трассировки.
2-я точка. Любая информация о x86 Assembler, Reverseengineering ... Попробуйте: OpenRCE , Документация NASM , Сообщество ASM .
1-я точка. Callstack сообщает вам функции. Я не знаю, написано ли это по порядку или в обратном порядке, поэтому может оказаться, что первая строка - это последняя вызванная функция или первая вызванная функция. Следите за звонками с помощью отладчика. Иногда вы можете переключаться между asm и кодом (в зависимости от отладчика, файлов карты ...). Если у вас нет источника - изучите ассемблер, прочитайте о реверс-инжиниринге. Прочитайте документацию по функциям, которые вы вызываете в сторонних компонентах. Возможно, вы не удовлетворяете предварительному условию.
Если вы можете рассказать немного больше о программе (какие части исходного кода у вас есть, задействован ли библиотечный вызов ?, ...)
Теперь немного чтения кода:
Функция принимает указатель на строку с нулем в конце и ссылку на объект даты. Указатель считается действительным!
Функция проверяет, находится ли строка в определенном формате (%, затем 8 цифр и \ 0). Если это не так, возвращается false. Эта проверка (большое if) обращается к указателю без каких-либо проверок достоверности. Длина не проверяется, и если указатель указывает где-то в дикой природе, доступ к этому пространству. Я не знаю, если более короткая строка вызовет проблемы. Это не должно происходить из-за способа оценки &&.
Затем часть памяти выделяется в стеке. Числовая часть строки копируется в нее (что нормально), и буфер получает завершение \ 0. Атоис извлекает числа. Это будет работать из-за различных начальных местоположений и \ 0-окончания после каждой части. Как-то сложно, но приятно. Некоторые комментарии прояснили бы все.
Эти числа затем вставляются в объект. Он должен быть действительным, поскольку он передается в функцию по ссылке. Я не знаю, можете ли вы передать ссылку на удаленный объект, но если это так, то это может быть и вашей проблемой.
В любом случае - кроме отсутствующей проверки на указатель на строку, эта функция исправна и не является причиной вашей проблемы. Это только место, которое бросает исключение. Поиск аргументов, которые передаются в эту функцию. Они всегда действительны? Пройдите регистрацию.
Надеюсь, я не допустил серьезных ошибок, так как я программист на Delphi. Если я это сделал - не стесняйтесь комментировать.