2012-08-24 96 views
3

我有一个由混合C和x86汇编代码组成的应用程序。出于复杂的原因,汇编代码想要知道(声称的程序计数器)值是否是C代码的目标代码所在区域中的地址。过去这个应用程序运行良好,包括这个古怪的检查。Visual Studio:使用编译代码保留代码顺序/边界

我真正需要的是我信任的C代码区域的“书挡”。 这当然假设编译的C代码相对密集地存放在加载映像中。

我目前通过定义虚拟函数LowestAddress(){}和HighestAddress(){}并将它们分别放在包含代码的文件中的第一个和最后一个来获得我的手势。汇编代码只是将感兴趣的值与这些函数的地址进行比较,以确定该值是否在C代码范围内。糟糕的是,这是第二个假设,即函数在内存中以源文件的文本顺序进行排序,这在过去的Visual Studio的旧版本中显然是正确的。

唉,不再,当然不是VS2010编译链接时代码。 (我不知道其他[非]优化设置是做什么的。)在使用VS2010进行检查时,我的LowestAddress函数显然位于目标代码中间,用于其他一些C函数。

我该如何(重新)实施这些书挡?某种细分控制? VS 2010中可用的选项似乎没有提供任何有用的东西。 (我明白,一个非常聪明的编译器可能实际上会重新安排代码以最小化基于调用图的缓存行冲突。MS实际上是否聪明?)。我并没有真正坚持按照文本顺序订购全部这个地区的功能;我只需要该地区的上限和下限。

[我要去尝试关闭链接时代码生成,这是一个[全球]调用图可以构建的唯一场所,并看到有什么样的影响。]

+2

欢迎来到Stack Overflow!请注意,标签不是关键字。也就是说,stuf- * wait *。 33k代表,并且你刚创建了新的标签'visual'和'studio'?!来吧,艾拉! ;) – Charles

+0

我有一个奇怪的浏览器问题,因为我输入了问题,直到现在才失去了访问权限。我可能会得到它的权利,但总是有好的帮助。 –

+0

我能想到的2个选项是链接器选项/ ORDER,您可以在其中指定可执行文件中的函数顺序,也许可以在#pragma部分的帮助下指定部分。但我没有尝试这些。 – Christopher

回答

2

可以指定通过使用/ORDER编译器参数将函数放置在图像中的顺序。

+0

这工作! –