缺少使用C ++ hotloader /运行时链接器

时间:2017-04-02 14:34:37

标签: c++ visual-c++ linker

为了方便运行时C ++编程,我做了一个小型运行时间C ++ hotloader,它在程序运行时加载和链接目标文件。它的工作原理是将clang编译的目标文件中的部分复制到内存中,处理调整后的重定位并根据需要调用.CRT $ XCU部分中的全局初始值设定项。所有这一切都在视觉工作室2013兼容模式下顺利工作,但自从将我的编译器升级到Visual Studio 2015并适当地设置VS2015的兼容模式后,似乎可能会出现一些新的初始化机制,我已经引入了这个机制。但还是占了。我注意到这会影响对printf的调用,例如。给出:

printf("This is the number 5: %d %d %d\n", 5, 5, 5);
printf("This is the number 15: %d\n", 15);
printf("This is the number 30: %d\n", 30);

在执行期间,printf似乎没有获得正确的地址,似乎因为某些原因被调用未初始化的内存:

这是数字5:-858993460 -858993460 -858993460 这是数字15:-858993460 这是数字30:-858993460

与字符串相同:

printf("str: %s\n", "hello");

脚本-example.exe中的0x0F6B3F7D(ucrtbased.dll)抛出异常:0xC0000005:访问冲突读取位置0xCCCCCCCC。

我希望知道MSVC内部人员的人知道我在这里失踪了什么。非常感谢您的帮助。

0 个答案:

没有答案