У меня есть приложение, в котором используется некоторая процедура проверки целостности кода.Проверка целостности выглядит следующим образом:
codemark1_start:
<Some code>
codemark1_end:
AsmCrcCodeMrk((MyTinyBuff), codemark1_start, codemark1_end, 1,Procedure);
Макрос AsmCrcCodeMrk выглядит как
AsmCrcCodeMrk(DescriptorAddr, StartAddr, EndAddr, Id, BPA) \
AsmCrcCodeSig \
__asm mov EAX, offset DescriptorAddr \
__asm mov EAX, StartAddr \
__asm mov EAX, EndAddr \
__asm mov EAX, Id\
__asm mov EAX, BPA\
После компиляции программа была обработана дополнительным приложением, которое "тянет"вывести "фрагменты" между метками и рассчитать их CRC.Под Win32 все компилируется и работает.
Однако для X64 существуют трудности:
1) X64 не поддерживает встроенный ассемблер.Но я могу сделать макрос как функцию в отдельном файле и сделать функцию __forceinline.
2) Необходимо получить адреса меток во время компиляции.И это проблема.
Может кто-нибудь сказать мне, как получить адреса меток во время компиляции для платформы X64?