在我的企业中,在听到社区的赞誉后,我们开始迁移到基于 WSL2 的解决方案。
但是,在我们连接到我们的企业 VPN 后,WSL 无法连接到外部网站(以及 VPN 内部的网站)。
似乎是windows内部的路由问题,我该如何解决?
编辑:将void *修改为uint8_t *值。问题仍然存在。编辑:问题是一个简单的变量溢出,与整数提升无关。
我解决了该简化代码中的一个错误。类型与原始源代码中的类型相同。
unsigned int entrySize; // entrySize is 288
int startIndex, endIndex; // both are 24536838
uint8_t *pStartAddr; // valid initialized pointer (0x34f1e40)
/*Mystery begins...*/
uint8_t *curr_addr = pStartAddr + entrySize * startIndex;
while (curr_addr <= startAddr + entrySize * endIndex)
{
externFunc(curr_addr);
curr_addr+=entrySize;
}
Run Code Online (Sandbox Code Playgroud)
乍一看,此代码似乎很明显,不包括奇怪的类型选择。
但是,在我们的一次崩溃中,似乎curr_addr获得了无效的指针。我的直觉是存在一个问题,entrySize * startIndex因为它们的乘法设置在第32位,并且具有startIndex和endIndex作为符号类型可能会使编译器使用所需的值感到困惑。
在更改了他们的类型之后,问题就解决了。但我无法弄清楚到底是什么问题。
我正在使用64位计算机,x86_64 CPU,gcc(GCC)4.8.5 20150623和linux red hat发行版(版本4.8.5-28)
我以为上面的计算在的第32位设置时开始出现问题entrySize * startIndex。但是,当我使用第startIndex32位打开的第一个值时,它仍然有效。它也显示
我的问题是:
int* 的值结果unsigned int …