我在3D中有两个凸多边形.它们在不同的平面上都是平的,因此它们是一对面.
计算这两个多边形之间最近距离的最简单方法是什么?
编辑:在第一个多边形中具有端点而在第二个多边形中具有另一个端点的最短可能线的长度.我正在寻找的距离是这条最短线的长度.
如何允许用户单击一次单击以检查项目CheckedListBox
?默认行为是第一次单击选择项目,第二次单击允许您切换检查.我也不想在选择上切换支票,我正在寻找ListView
控件的行为,我可以直接点击复选框来切换它们而不先选择它们的项目.
我正在尝试找到在测试应用程序中导入的wglGetProcAddress(OpenGl32.dll)的条目.由于某种原因,名称为"wglGetProcAddress"的导入确实指向通过在Opengl32.dll上调用GetModuleHandle和GetProcAddress返回的相同函数.
可执行文件已加载到内存中,并且是一个当前暂停其线程的进程.以下代码正确读取由该可执行文件导入的名称模块及其功能.因此,IAT不应包含RVAs,因为它已被加载.
HMODULE h = GetModuleHandle("OPENGL32.dll");
DWORD expect_addr = (DWORD)GetProcAddress(h, "wglGetProcAddress");
PIMAGE_IMPORT_DESCRIPTOR import_desc = (PIMAGE_IMPORT_DESCRIPTOR)(pmem + import_dir);
while (import_desc->Name)
{
PIMAGE_THUNK_DATA thunk = (PIMAGE_THUNK_DATA)(pmem + import_desc->OriginalFirstThunk);
while (thunk->u1.Function)
{
PIMAGE_IMPORT_BY_NAME import = (PIMAGE_IMPORT_BY_NAME)(pmem + thunk->u1.AddressOfData);
printf("%s 0x%X\n", import->Name, thunk->u1.Function);
if ((DWORD)expect_addr == (DWORD)thunk->u1.Function)
{
printf("Found wglGetProcAddress\n");
}
else if (!strcmp((const char*)import->Name, "wglGetProcAddress"))
{
printf("Found wglGetProcAddress's import, but the function has a different value.\n");
}
++thunk;
}
++import_desc;
}
Run Code Online (Sandbox Code Playgroud)
来自该原始值的GetProcAddress返回XX变化的地址60XXC245,但是thunk-> u1.Function总是返回0xA46D8.thunk-> u1(Function,AddressOfData,Ordinal和ForwarderString)中的所有内容都具有相同的值.导入描述符和导入的名称是正确的.有谁看到我错过了什么?
编辑:我正在尝试别的东西:我正在扫描pmem(内存中的可执行文件的图像),因为我期望的是IAT条目,但是它找不到:
HMODULE h = GetModuleHandle("OPENGL32.dll");
DWORD expect_addr = (DWORD)GetProcAddress(h, …
Run Code Online (Sandbox Code Playgroud)