我有一个应用程序,其中使用了一些代码完整性检查过程。完整性检查如下所示:
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平台的编译时获取标签地址吗?