5
|
Stephen Kellett · 技术社区 · 14 年前 |
![]() |
1
1
64位之所以有区别,唯一的原因是64位上的线程需要64位对齐的值。如果threadID没有64位对齐,则可能导致此问题。
另外,我还要三次检查myParam的生命周期。CreateThread在调用传入的函数之前很久就返回(我从经验中知道)。
我突然想到:你确定你正在将64位代码注入64位进程吗?因为如果你有一个64位的CreateThread调用,并试图将它注入到一个运行在WOW64下的32位进程中,可能会发生糟糕的事情。 开始真的没有主意了。编译器是否报告任何警告? 错误是否是由于宿主程序中的错误而不是DLL引起的?还有一些其他代码,例如,如果您使用了\uu declspec(import/export),则加载一个DLL,它发生在main/WinMain之前。如果 |
![]() |
2
0
我今天碰到了这个问题。我检查了每一个论点
那么,在哪里呢
前几行
对于amd64
PS:同样的代码可以在更新的Windows上运行(比如Vista和更新版本)。但我没有查。我在Windows Server 2003 R2 x64上遇到此问题。 |
![]() |
3
-1
我从事的是在windows下使用并行线程 用于计算。没有有趣的事情,没有dll调用,当然 有关区域和起始地址的所有相关数据都包含在 使用这种数据结构。 然后是数据结构的地址。 这是没有道理的。它只是工作和计算 两个螺纹或20个螺纹。
现在64位的CreateThread不推送数据的地址
结构。这似乎难以置信,所以我给你看了那把冒烟的枪,
调试会话的转储。
在右下角的子窗口中,您可以看到堆栈,并且 我用来填充参数的机制在32到64位之间是可移植的。 底线是:CreateThread在64位和32位中以相同的方式传递堆栈上的数据参数,然后执行子例程调用。在汇编程序级别,它不是那样工作的。如果对C++中自动填充的RSP有任何隐藏的要求,那将是非常讨厌的。 P、 不,不存在16字节对齐问题。那在我身后很久了。 |
![]() |
4
-2
尝试使用_beginthread()或_beginthreadex(),而不应直接使用CreateThread。 |
![]() |
Cpp plus 1 · 为32位或64位编译 7 年前 |
![]() |
Ky - · 此枚举有2个名称吗?如何将其转换为NS_ENUM? 10 年前 |
![]() |
user3523585 · 检查服务在Windows上安装为64位还是32位 10 年前 |
![]() |
Marcelo · 在高级安装程序中,如何检测64位机器中的32位进程? 11 年前 |
![]() |
riv · 从32位应用程序连接64位进程 11 年前 |