gpt4 book ai didi

c++ - 修改 OBJ 文件链接到的源文件会使应用程序崩溃?

转载 作者:行者123 更新时间:2023-11-28 03:00:58 25 4
gpt4 key购买 nike

我正在从事一个项目,其中有我可以编辑的源文件(.cpp、.h)和我不能编辑的目标文件(.obj)。我正在尝试将一个变量添加到源文件的类之一。它可以很好地编译和链接,但会在应用程序生命周期的某处导致随机崩溃。

我的问题是:有没有什么方法可以将成员变量添加到驻留在源文件中的类中,该类被链接到 OBJ 文件并由 OBJ 文件使用(无需重新编译 OBJ 文件)?

我知道我完全有可能误解了实际问题是什么,但这是我最好的猜测,因为我以前遇到过它,希望能回答我的问题。当然,除非您完全确定我的问题是其他问题。

这是一些背景:我正在处理另一个程序员的代码。他们已经设置了代码库中随处使用的多个单例。我正在尝试使用消息将一组特定的系统与所有单例分离,以便我可以更轻松地管理、修改和构建系统。将变量添加到其中一个单例后,它每次都会在同一个地方崩溃应用程序(我看不到它的源代码)。根据我添加的变量类型,崩溃将发生在应用程序中的某个不同点。我已经考虑到代码库中某处存在缓冲区溢出,但我没有时间处理该问题,而是先查看其他更具体的可能原因。

当然,“简单”的解决方案是让分发 OBJ 文件的程序员在添加我的新变量的情况下重新编译它们(他们以前不得不这样做),但我仍在努力解耦系统的方法,以及执行和撤消的周转时间,因为其他程序员的工作时间与我的计划相反。

如果相关,我会发布一些源代码或调试调用堆栈,但事实并非如此。问题如前所述。我在一个类中添加了一个变量。它现在使程序在一些随机 OBJ 文件的例程中崩溃。

感谢您的宝贵时间。

最佳答案

如果我没看错你的问题(你在最终的可执行文件中有两个相同类型的不同版本),你所要求的将在运行时导致未定义的行为。

假设您有一个名为“foo”的结构,它有两个 int 成员,并且由您的程序员同事编译到一个单独的目标文件中。然后你获取“foo”,向它添加一个 int 成员,然后将它编译为另一个 obj 文件。您现在链接创建可执行文件的两个 obj 文件。

您有两个问题——程序运行期间的 sizeof(foo) 是多少?它等于 foo 的较小版本还是较大版本?其次,链接器很可能为较小版本保留空间——当程序试图访问您添加到较大版本 foo 的 int 时会发生什么?将发生内存“重读”或覆盖。

您应该与您的程序员同事协调您的工作。您使用源版本控制系统吗?如果是这样,这通常是解决这些问题的地方。

关于c++ - 修改 OBJ 文件链接到的源文件会使应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849954/

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