QIPTR 2019-05-03 21:29 采纳率: 33.3%
浏览 901
已结题

windows64位程序OpenFileMapping失败?麻烦诸位大神帮我看下!

如下代码,A程序创建一个名为SHINE的文件映射对象,B程序是vs内嵌asm代码,调用Openfilemapping函数打开文件映射对象,但是总是失败,用汇编
获取了DOS错误码总是0x6(句柄无效),同时获取到NT错误码是0xC0000024STATUS_OBJECT_TYPE_MISMATCH(对象类型不匹配)。

A程序:
char v2[] = "SHINE";

HANDLE      MappingHandle = NULL;
ULONG_PTR   VirtualAddress = NULL;
HANDLE      v1 = INVALID_HANDLE_VALUE;

v1 = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 0x1000, v2);
B程序:
VS内嵌的ASM文件,
OpenFileMappingA函数地址每次启动都是一样的所以写死了

.DATA

INP DB 'SHINE\0'

.CODE

Sub_1 PROC

            ;获取命令行参数保存到[rbp+8h]中
            mov         rax,qword ptr gs:[60h]
mov         rax,qword ptr [rax+20h]
mov         rax,qword ptr [rax+78h]
mov         qword ptr [rbp+8h],rax
            ;打开名为"SHINE"的文件映射对象,并获得内存首地址

            lea   r8,INP
xor         rdx,rdx
mov         rcx,6
mov  rax,00007ffb4ed0f5d0h      ;openfilemappingA首地址,我的电脑上固定的所以写死了
call rax
mov         rax,qword ptr gs:[30h];获得TEB地址
xor         rbx,rbx
mov         ebx,dword ptr [rax+68h];偏移0x68处获得LastErrorValue
mov         ecx,dword ptr [rax+1250h];偏移0x1250处获得LastStatusValue
ret
Sub_1 ENDP

END

小弟用win2k源码查了下这个函数的调用过程,发现它会调用ObReferenceObjectByHandle函数,这里面好像有设置NTstatus为STATUS_OBJECT_TYPE_MISMATCH的过程,也不知道是不是这里出的错,一头雾水,还望各位前辈帮忙解决下!小弟非常感激!!!!

  • 写回答

1条回答 默认 最新

  • oyljerry 2019-05-05 08:40
    关注
    v1 = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 0x1000, v2);
    

    这里看看v1是否为正确的句柄,是否创建成功了,用GetLastError看是否有错误信息

    评论

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多