首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ReadProcessMemory()不适用于像0x2840C6C68D8这样的长地址

ReadProcessMemory()是一个Windows API函数,用于从指定进程的虚拟内存中读取数据。它的原型如下:

代码语言:txt
复制
BOOL ReadProcessMemory(
  HANDLE  hProcess,
  LPCVOID lpBaseAddress,
  LPVOID  lpBuffer,
  SIZE_T  nSize,
  SIZE_T  *lpNumberOfBytesRead
);

参数解释如下:

  • hProcess:要读取内存的进程句柄。
  • lpBaseAddress:要读取的内存起始地址。
  • lpBuffer:用于存储读取数据的缓冲区。
  • nSize:要读取的字节数。
  • lpNumberOfBytesRead:实际读取的字节数。

然而,ReadProcessMemory()函数在处理长地址时可能会遇到问题。长地址通常是指64位操作系统中的地址,它们由16个十六进制数字组成,比如0x2840C6C68D8。由于Windows API函数的限制,ReadProcessMemory()函数在32位进程中无法正确处理64位地址。

为了解决这个问题,可以使用其他方法来读取长地址的内存数据。一种常见的方法是使用指针链,通过多次调用ReadProcessMemory()函数来读取连续的内存块。另一种方法是使用更高级的调试技术,如使用调试器来读取目标进程的内存。

总结起来,ReadProcessMemory()函数不适用于像0x2840C6C68D8这样的长地址。如果需要读取长地址的内存数据,可以考虑使用指针链或调试技术来实现。

相关搜索:html输入类型的电子邮件不适用于像äüö这样的德语字符如何使用像谷歌地图这样的自动提示实现地址搜索?如何为像Polkadot或Kusama这样的基板链生成刻录地址?其中()不适用于"-12345“这样的字符串,但适用于"12345”SonarQube:像“设置配置文件”这样的东西可能/计划用于sonarqube吗?按姓氏排序不适用于O‘’Brien和O‘’Koren这样的名字有没有像" audio /*“和" video /*”这样的MIME类型用于所有的音频和视频?如何获得像\n这样的内联换行符,用于智能许可而不是段落如何使SwiftUI列表/大纲组懒惰地用于像文件系统这样的大树?如何引用像"$A$2,$C$2,$E$2“这样的区域地址中的单个单元格?是否有像Firebug这样的调试工具用于服务器端Perl/CGI?按电子邮件地址分组不适用于php中的mongodb需要像"dateRangeInput“这样的UI选择器用于R闪亮应用程序中的数值字段如何将像"2011-06-25T11:00:26 + 01:00"这样的日期字符串转换为像iPhone一样长的字符串?x86_64中的外壳代码避免了像绝对地址这样的大常量中的空字节?React在vue中是否有像<template/>这样的元素,它只用于包装东西,但对html的结构没有真正的影响?是否有像werkzeug的ProxyFix这样的库来修复request.remote_addr,而不是用于Quart / Hypercorn ASGI服务器?有没有像rEFInd这样的图形化引导程序,但适用于有基本输入输出系统(不是UEFI)的计算机?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

readprocessmemory函数分析_in the process

大家好,又见面了,我是你们的朋友全栈君。 函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有访问权限。...lpNumberOfBytesRead); 参数: hProcess:进程句柄 lpBaseAddress:读出数据的地址 lpBuffer:存放读取数据的地址 nSize:读出的数据大小...lpBuffer, int nSize, out int lpNumberOfBytesRead); 这个函数有五个参数,第一个参数是 进程句柄,由OpenProcess函数获取;第二个参数是要读出数据的地址...,使用CE等辅助工具可取得;第三个参数是用于存放读取数据的地址;第四个参数是 要读出的数据大小;第五个参数是读出数据的实际大小。...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185866.html原文链接:https://javaforall.cn

39320

Readprocessmemory用法

大家好,又见面了,我是你们的朋友全栈君。 函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有访问权限。...lpNumberOfBytesRead); 参数: hProcess:进程句柄 lpBaseAddress:读出数据的地址 lpBuffer:存放读取数据的地址 nSize:读出的数据大小 lpNumberOfBytesRead..., int nSize, out int lpNumberOfBytesRead); 这个函数有五个参数,第一个参数是 进程句柄,由OpenProcess函数获取;第二个参数是要读出数据的地址...,使用CE等辅助工具可取得;第三个参数是用于存放读取数据的地址;第四个参数是 要读出的数据大小;第五个参数是读出数据的实际大小。...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185788.html原文链接:https://javaforall.cn

36420
  • ReadProcessMemory与WriteProcessMemory用例分析

    首先介绍一个函数VirtualProtectEx,它用来改变一个进程的虚拟地址中特定页里的某一区域的保护属性,这句话有些咬嘴,直接从MSDN中翻译过来的,简单来说就是改变某一进程中虚拟地址的保护属性,如果以前是只读的...,第二个参数lpBaseAddress为要读取内容的基地址,当然你事先要了解你要读取内容的基地址。...使用ReadProcessMemory()函数,可以获得该进程内存空间中的信息,或是用于监测进程的执行情况,或是将进程内的数据备份,然后调用writeProcessMemory()进行修改,必要时再还原该进程的数据...将内存的内容更改后,别忘了调用VirtualProtectEx()恢复内存原来的保护属性。 下面看个例子,该例子是用于如何设置和移除断点的,类似调试器的功能。...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185948.html原文链接:https://javaforall.cn

    68320

    createprocess error=2_CreateProcess

    std::cout << "获取句柄成功" << std::endl; } else { std::cout << "获取句柄失败" << std::endl; } } ReadProcessMemory...函数声明如下,成功true失败返回false BOOL ReadProcessMemory ( HANDLE process,//要读取的句柄 LPCVOID baseAddress,//要读取的地址(...我个人觉得就是相对于HANDLE的偏移地址) LPVOID buffer,//要把读到的数据放到buffer,这是个指针 SIZE_T size,//要读取的数据字节大小 SIZE_T *readSize...( HANDLE process,//要写入的句柄 LPVOID baseAddress,//要写入的地址,注意不是LPCVOID(多个C) LPCVOID buffer,//要写入的数据指针 SIZE_T...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194599.html原文链接:https://javaforall.cn

    51910

    用户层下API的逆向分析及重构

    &API-MS-Win-Core-Memory-L1-1-0.ReadProcessMemory> 函数,在kenel32.dll中,mov edi,edi 是用于热补丁技术所保留的,这段代码仔细看其实除了...我们希望自己的代码中直接传递参数,并且直接调用调用ntdll.KiFastSystemCall函数。因此我们需要模拟call指令,call指令的本质就是将返回地址入栈,并跳转。...在 User 层和 Kernel 层分别定义了一个 _KUSER_SHARED_DATA结构区域,用于 User 层和 Kernel 层共享某些数据,它们使用固定的地址值映射,_KUSER_SHARED_DATA...结构区域在 User 和 Kernel 层地址分别为: User 层地址为:0x7ffe0000 Kernnel 层地址为:0xffdf0000 虽然指向的是同一个物理页,但在ring3层是只读的,在...直接sysenter进内核,这样可以规避所有三环hook。

    90481

    用户层下API的逆向分析及重构

    &API-MS-Win-Core-Memory-L1-1-0.ReadProcessMemory> 函数,在kenel32.dll中,mov edi,edi 是用于热补丁技术所保留的,这段代码仔细看其实除了...我们希望自己的代码中直接传递参数,并且直接调用调用ntdll.KiFastSystemCall函数。因此我们需要模拟call指令,call指令的本质就是将返回地址入栈,并跳转。...在 User 层和 Kernel 层分别定义了一个 _KUSER_SHARED_DATA结构区域,用于 User 层和 Kernel 层共享某些数据,它们使用固定的地址值映射,_KUSER_SHARED_DATA...结构区域在 User 和 Kernel 层地址分别为: User 层地址为:0x7ffe0000 Kernnel 层地址为:0xffdf0000 虽然指向的是同一个物理页,但在ring3层是只读的,在...直接sysenter进内核,这样可以规避所有三环hook。

    68610

    ReadProcessMemory会被检测到吗?_仅完成部分readprocess如何解决

    大家好,又见面了,我是你们的朋友全栈君。 ReadProcessMemory 从特定进程的内存里读取数据。被读取的整个位置应该是可读的否则操作会失败。...BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess , __in LPCVOID lpBaseAddress , __out LPVOID...lpBaseAddress:一个指向目标进程需要读取数据的首地址的指针。在读取数据之前,系统将会确认需读取的所有数据是否可读,如果不可读那么函数执行失败。...lpBuffer:指向要接收读取到的数据的缓冲区。 nSize:读取的数据大小,单位为Bytes。 lpNumberOfBytesRead:指向一个变量,用于放置传送数据的大小。...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186007.html原文链接:https://javaforall.cn

    79230

    C++内存加密动态免杀defender

    前置知识 这里用到的两个函数ReadProcessMemory、WriteProcessMemory: // 将指定地址范围中的数据从指定进程的地址空间复制到当前进程的指定缓冲区。...在32位系统中函数地址长为4字节,如果要修改MessageBox函数跳转到HookedMessageBox函数,MessageBox函数地址位12340000h,HookedMessageBox地址为12345678h...首先进入setHook函数,该函数用于设置挂钩,oldAddress保存了MessageBox函数的地址: 使用ReadProcessMemory函数从内存中读取原始MessageBox函数的前6个字节...加密了内存2,内存1也要进行一些处理,可以使用VirtualFree释放内存1,也可以像内存2一样加密。...,如果函数的调用地址在这一块内存页范围则表明这是shellcode申请的地址,即内存2,这样就成功获取到内存2地址: void initVirtualAllocSet(PVOID callerAddress

    2.9K62

    读取与修改其他程序的数据ReadWriteProcessMemory

    4.在程序私有的2GB中,windows 98系列的系统的程序的可用地址为4MB–2GB windows 2000系列的系统的程序的可用地址为...修改后程序正确执行,但是在读取一些不可用内存地址时会有229错误(会有很多,是正常的) ——仅完成部分的 ReadProcessMemory 或WriteProcessMemory 请求。...DWORD g_arList[1024]; // 存放查找到的地址列表 int g_nListCnt; // 有效地址个数 HANDLE g_hProcess; // 目标进程句柄...,与新值dwValue比较 // 在已经搜索出来的地址中再次查找 for(int m=0;m<nOrgCnt;m++) { if(::ReadProcessMemory(g_hProcess...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194418.html原文链接:https://javaforall.cn

    1.9K20

    x86平台inline hook原理和实现

    原理 对于正常执行的程序,它的函数调用流程大概是这样的: 0x1000地址的call指令执行后跳转到0x3000地址处执行,执行完毕后再返回执行call指令的下一条指令。...指令的内存地址;backCode接收一个长度为5字节的数组缓冲区,用于备份原有的call指令;FuncBeCall参数接收一个返回值为void函数地址。...StartHook函数第3个参数接收一个函数地址,这个函数地址指向的函数应该是这样的: _declspec(naked) void OnCall() { ...... } OnCall函数用_declspec...(naked)修饰,被它修饰的函数我们常称它为裸函数,裸函数的特点是在编译生成的时候不会产生过多用于平衡堆栈的指令,这意味着在裸函数中我们要编写内联汇编控制堆栈平衡。...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155255.html原文链接:https://javaforall.cn

    81510

    error at hooking api ntprotect_read,match and write

    编译环境:delphi 2010+windows 7 u ,用途读取其他程序中readprocessmemory和writeprocessmemory的参数,但不知读取偏移即a+($b),b是怎么读的...已实现 使用INLINE hookapi,CriticalSection临界区,dll分为动态loadlibry和静态加载 问题1:对多线程目标程序HOOK 卸载时会出现错误,应该是线程不断读写内存函数READPROCESSMEMORY...,但钩子正在卸载没有改回正确的地址就被目标程序读取,导致目标程序处理错误的API地址而出错,如果不是不停读写 卸载不会出现错误?...*后, 他对本进程所有模块的的IAT表都进行修改(使用WriteProcessMemory), 某线程可能此时访问正在被修改中的IAT表, 可能call 到其它地址去。...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194475.html原文链接:https://javaforall.cn

    65430

    C#_对内存的操作

    用.net的方法是: Process[] p = Process.GetProcessesByName("winmine"); p[0].Id;这样就能返回相应进程的PID了。...[] buffer,int size,int[] nor); readrpocessmemory可以用来读取某个进程地址的值。...第一个参数就是上面API返回的值;第二个是要读取进程的地址;第三个参数为读取出的内容,要求为指针,它相当于一个out类型的参数,读出的内容并不是以函数返回值的方式得到;第四个为读取值的字节大小,int为...int[] result=new int[1]; int[] lpdw=new int[1];//这样定义就可以了,一个元素的数组,能起到指针的作用。...流行的工具是OD,本菜鸟还没研究透,另外CE这个工具也是必不可少的,例如上面的地址0x1005194就是用CE找出来的,CE怎么使用呢,再说就扯的太远了,网上有不少的教程,有兴趣的可以查一下。

    77520

    进程伪装详解

    就不能够正常运行,所以我们如果想到实现进程伪装,最好的选择就是伪装成系统必备的exe,当我们进行进程伪装之后,在系统中显示的就会是系统进程的信息,但这个程序还是能够执行它正常的功能,这样就达到了进程伪装...的进程名和启动路径 那么这里我们改人如何获取进程的这些信息呢,这里可以使用到ntdll.dll里面的NtQueryInformationProcess来获取进程的PEB地址,这里稍微提一个概念,什么是...,这里拿到PEB结构之后我们就能够对进程的一些属性进行修改就能够实现进程伪装的效果,但是这里并不能够通过指针来直接速写内存数据,因为每个程序都有自己独立的空间,所以这里就需要用到ReadProcessMemory...FS段寄存器指向当前的TEB结构,在TEB偏移0x30处是PEB指针,通过这个指针即可取得PEB的地址,可以通过汇编实现 __asm { mov eax,fs:[0x30] mov PEB,eax }...同理,0x70偏移则指向了 CommandLine为命令行参数 那么我们首先获取结构中的PebBaseAddress和ProcessPamameters ::ReadProcessMemory(hProcess

    67500

    实战 | 进程伪装的思路和研究

    就不能够正常运行,所以我们如果想到实现进程伪装,最好的选择就是伪装成系统必备的exe,当我们进行进程伪装之后,在系统中显示的就会是系统进程的信息,但这个程序还是能够执行它正常的功能,这样就达到了进程伪装...的进程名和启动路径 那么这里我们改人如何获取进程的这些信息呢,这里可以使用到ntdll.dll里面的NtQueryInformationProcess来获取进程的PEB地址,这里稍微提一个概念,什么是...,这里拿到PEB结构之后我们就能够对进程的一些属性进行修改就能够实现进程伪装的效果,但是这里并不能够通过指针来直接速写内存数据,因为每个程序都有自己独立的空间,所以这里就需要用到ReadProcessMemory...FS段寄存器指向当前的TEB结构,在TEB偏移0x30处是PEB指针,通过这个指针即可取得PEB的地址,可以通过汇编实现 __asm { mov eax,fs:[0x30] mov PEB,eax }...同理,0x70偏移则指向了 CommandLine为命令行参数 那么我们首先获取结构中的PebBaseAddress和ProcessPamameters ::ReadProcessMemory(hProcess

    1.1K20

    进程伪装详解

    就不能够正常运行,所以我们如果想到实现进程伪装,最好的选择就是伪装成系统必备的exe,当我们进行进程伪装之后,在系统中显示的就会是系统进程的信息,但这个程序还是能够执行它正常的功能,这样就达到了进程伪装...NtQueryInformationProcess来获取进程的PEB地址,这里稍微提一个概念,什么是PEB?...,这里拿到PEB结构之后我们就能够对进程的一些属性进行修改就能够实现进程伪装的效果,但是这里并不能够通过指针来直接速写内存数据,因为每个程序都有自己独立的空间,所以这里就需要用到ReadProcessMemory...FS段寄存器指向当前的TEB结构,在TEB偏移0x30处是PEB指针,通过这个指针即可取得PEB的地址,可以通过汇编实现 __asm { mov eax,fs:[0x30] mov PEB,eax }...和ProcessPamameters ::ReadProcessMemory(hProcess, pbi.PebBaseAddress, &peb, sizeof(peb), NULL); ::ReadProcessMemory

    2K40
    领券