КД>Появилась мысль — проверить корректность выравнивания данных.
КД>То есть, чтобы в случае некорректного выравнивания генерировалось исключение.
Это SetErrorMode с SEM_NOALIGNMENTFAULTEXCEPT.
Но дело в том, что
* Дефолт — исключения, это есть опция их выключить.
* На x86 и x64 обычные инструкции не требует выравнивания. А необычные (требующие выравнивания) компилятор не будет вставлять при доступе по указателю сомнительного происхождения.
Здравствуйте, Alexander G, Вы писали:
КД>>Появилась мысль — проверить корректность выравнивания данных.
КД>>То есть, чтобы в случае некорректного выравнивания генерировалось исключение.
AG>Это SetErrorMode с SEM_NOALIGNMENTFAULTEXCEPT.
Попробую, но, по-моему, это как раз выключает исключение
SEM_NOALIGNMENTFAULTEXCEPT
The system automatically fixes memory alignment faults and makes them invisible to the application. It does this for the calling process and any descendant processes. This feature is only supported by certain processor architectures. For more information, see the Remarks section.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>>Попробую, но, по-моему, это как раз выключает исключение
AG>Да, выключает. И только на Itanium. AG>Привёл как ориентир, где эту опцию искать, и что на х86 и х64 её, фактически, нет за ненадобностью.
В отладчике установлена галочка у исключения "Datatype misalignment".
Жаль.
Меня тут терзают смутные сомнения — по моему, у меня в одном .NET приложении (C#, Win, Intel) были проблемы с выравниванием и исключение таки генерировалось...
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
КД>Не подскажете — как такое реализовать? КД>Надо как-то хитро откомпилировать бинарник или что-то вызвать из WIN API?
Запустить прогу под кастомным отладчиком, который будет трейсить инструкции по одной, дизасмить и смотреть по каким адресам происзодят обраения. Можно набадяжить скриптик для windbg.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
КД>>Не подскажете — как такое реализовать? КД>>Надо как-то хитро откомпилировать бинарник или что-то вызвать из WIN API? O>Запустить прогу под кастомным отладчиком, который будет трейсить инструкции по одной, дизасмить и смотреть по каким адресам происзодят обраения. Можно набадяжить скриптик для windbg.
$ ../../../pin -t obj-intel64/pinatrace.so -- /bin/ls
Makefile atrace.o imageload.o inscount0.o itrace.out
Makefile.example atrace.out imageload.out itrace proccount
atrace imageload inscount0 itrace.o proccount.o
$ head pinatrace.out
0x40001ee0: R 0xbfffe798
0x40001efd: W 0xbfffe7d4
0x40001f09: W 0xbfffe7d8
0x40001f20: W 0xbfffe864
0x40001f20: W 0xbfffe868
0x40001f20: W 0xbfffe86c
0x40001f20: W 0xbfffe870
0x40001f20: W 0xbfffe874
0x40001f20: W 0xbfffe878
0x40001f20: W 0xbfffe87c
$