gpt4 book ai didi

visual-studio - Visual Studio : preserve code order/boundaries with compiled code

转载 作者:行者123 更新时间:2023-12-02 02:12:34 26 4
gpt4 key购买 nike

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

我真正需要的只是我信任其地址的 C 代码区域上的“书挡”。这当然是假设编译后的C代码相对密集地存放在load image中。

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

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

我如何(重新)实现这些书挡? 某种段控制?可用于在 VS 2010 中构建的选项似乎没有提供任何有用的信息。 (我知道一个真正聪明的编译器实际上可能会根据调用图重新安排代码以最大程度地减少缓存行冲突。MS 真的那么聪明吗?)。我并不是真的坚持按文本顺序对该区域中的所有函数进行排序;我只需要该区域的上限和下限。

[我将尝试关闭链接时代码生成,这是唯一可以构建 [全局] 调用图的地方,看看会产生什么影响。]

最佳答案

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

关于visual-studio - Visual Studio : preserve code order/boundaries with compiled code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12102613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com