- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用非托管的 C++,当我调用返回 LPVOID 的方法时,我遇到了这个问题。
LPVOID MyMethod(...);
问题是此方法有时会返回 Bad Ptr,如果返回的值是 Bad Ptr,我想知道是否有检测方法。
我试过询问它是否为 NULL,但没有成功。
我意识到结果是否为 Bad Ptr 的唯一方法是在调试时,我尝试了一些不同的方法但仍然无法做到。
最佳答案
不,没有简单的方法可以确定指针是否损坏。
Windows 确实有 IsBadReadPtr、IsBadWritePtr。这些函数存在固有缺陷——它们仅确定函数在调用时在您的地址空间中是否可读或可写。它们也可能是 security 的原因issues永远不要使用。
主要问题是无法区分进程仍可访问的“坏”指针和好指针。
例如,
int g[5];
int somethingElse;
void* GetPointer()
{
return &g[5]; // Whoops, off by one.
}
&g[5] 可能是您进程中的有效指针,并且可能指向其他东西,您将能够访问它而不会崩溃,但写入它会破坏您的状态。
关于c++ - 如何将 LPVOID 验证为 <Bad Ptr>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683059/
我正在处理处理 USB 设备的函数。 但我已经在一些简单的事情上遇到了问题: 我遇到了编译错误 A value of the type "LPVOID" can not be assigned to
我有以下代码: IShellLink* psl; HRESULT hres = CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_
我确实在论坛和 MSDN 上看了一会儿,但似乎无法找到我的问题所在。我相信这对于像我这样的非菜鸟来说很简单。我正在尝试编译一个简单的程序,它不喜欢我的代码。 #include "pch.h" #inc
我有一个采用 LPVOID 类型参数的 C 函数。传入的值是\0 分隔的字符数组。如何转换参数以查看 Visual Studio/windbg 中的传入值? 最佳答案 您可以在脚本中执行此操作。像下面
我正在编写一个简单的控制台应用程序,它允许我从通过我提供的参数传递的一组参数创建多个线程。 DWORD WINAPI ThreadFunc(LPVOID threadData) { } 我将它们打包到
在我将其投入类之前,它运行良好。对解决此类型转换错误有任何帮助吗? 错误 error C2440: 'type cast' : cannot convert from 'IAT CInjector::
我在使用文件映射和阅读时遇到问题。 在下面的代码中,我从 MapViewOfFile 中获取了 pMemory,但我不知道如何将内容显示到 Edit 控件,我只得到乱七八糟的字符(如汉字)。我想使用
我正在尝试创建一个线程来处理 ZIP 归档: HANDLE hThread = CreateThread( NULL, 0, ZipProcess,
不是很教授。用C++。我一直在研究的代码是:https://msdn.microsoft.com/en-us/library/windows/desktop/ee175819(v=vs.85).asp
我正在尝试将数据从传递到我的方法的参数转换为结构,我需要将数据传递到全局变量,因为它在我的应用程序的其他地方需要。 我已经尝试了以下但我收到错误提示 diceResult is an undeclar
我想读取我通过 CreateRemoteThread 发送到我在另一个进程中注入(inject)的 DLL 的参数。 我可以毫无问题地调用该函数,我只是不知道如何将 LPVOID 转换为结构。 这是一
有人可以在这里解释并帮助我吗?可以说我有这样的功能,其中 lpData 包含指向我想要的数据的指针。 void foo(LPVOID lpData) { } 检索此内容的正确方法是什么。这行得通,但最
我是 C 编程语言的初学者,我得到了以下代码: LPVOID lpvAddr; lpvAddr = VirtualAlloc(NULL, strlen(jmp_esp), 0x3000, 0x40);
我有以下 Win32 ATL 代码: CComVariant result; DWORD dwFileSize = GetFileSize(hFile, NULL); LPVOID lpBuffer
如何将 WIN32_FIND_DATA 转换为 LPVOID? 我正在尝试 Hook 一个函数,但我无法将 WIN32_FIND_DATA 转换为 LPVOID 这是我的功能: /* New Find
这个问题在这里已经有了答案: How to find the size of an array (from a pointer pointing to the first element array
好的,我正在尝试在 WFSExecute 下编写此代码,但如果我键入: WFSPINGETDATA * pingetdata = lpCmdData; 我得到一个错误: errorC2440: 'in
在 C++ 中进行类型转换时,我有时会感到困惑,它们到底返回了什么? LPVOID lpFunction; DWORD dw = (DWORD)lpFunction; // What does it
我可以在 C 中使用 void* 而不是 LPVOID 吗? 或者 LPVOID 比 void* 执行一些特殊的功能。 最佳答案 C 中没有 LPVOID 类型,这是 Windows 的东西。 存在这
我收到这个奇怪的错误: MyView:OnInitialUpdate() { int* my_int; *(my_int) = 1; AfxBeginThread(MyThre
我是一名优秀的程序员,十分优秀!