如何测试已移植到64位的代码(指针)?

4
我已经将一款软件的源代码(使用c语言编写)从32位移植到了64位,但该软件并不支持64位。主要问题是指针相关的,需要把包含指针的整数改为长整型,并在比较时使用类型转换等。然而,我不知道如何进行测试。由于指针的大小加倍了,我推断只有当指向的地方的位置大于0x0...0100000000(1后面有8个零)时才会产生影响,但我该如何保证这一点呢?应该在我的虚拟机(OpenBSD)中运行多个程序来填充内存基址,还是有其他可靠的方法?
总之:如何测试代码以确保在amd64上没有(基于指针的)内存错误?

1
为什么要将int变量中的可能指针改为long而不是正确的指针?这尤其重要,因为long不一定是64位,例如Microsoft的Visual C++编译器在64位系统上仍然将long作为32位。 - Some programmer dude
关于你的问题,能否请你尝试并展示一些代码?不必是实际或真实的代码,只要足够让我们了解你知道什么以及你想做什么即可。 - Some programmer dude
@JoachimPileborg 我会在OpenBSD中使用代码,因为我研究过它是64位Unix-like架构的64位系统。 - Gökhan
作为示例代码,我将 if( (int) pointer1 < (int) pointer2) 更改为 if( (long) pointer1 < (long) pointer2) 或者将整数变量 "temp" 定义为长整型变量 temp = pointer3;。如有需要,我可以提供差异文件。我只是想知道是否仍然存在基于架构的内存错误。 - Gökhan
1
即便如此,“intptr_t”仍然是正确的,而且比“long”更清晰。 - MSalters
显示剩余2条评论
2个回答

1
运行系统中的所有自动化测试。
如果系统没有自动化测试或自动化测试覆盖范围不足,则需要创建更多测试,可能结合手动测试。
非常重要的是,你需要安装32位版本的系统进行比较。这样你就可以区分旧的错误和在移植过程中引入的错误。如果该系统对你来说是新的,那么这一点特别重要,这样你就不会完全知道它应该如何工作。
如果系统相当大,最好自动化运行相同的测试并比较结果(输出文件、数据库状态等)。

1
你不需要填充内存。分配它就足够了。但是,记住每个程序都有自己的内存空间。因此,应该在测试程序内部进行分配。
这并不测试你的函数指针。这些在第一行代码运行之前确定,但是使用ASLR后,它们可能会最终超过4G。(请检查!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接