热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hook其他程序中的StringGrid的内容,希望高手们来看看,我取得了别的程序的StringGrid地址,但是我在dll中引用的时候总出错

我想取得别的程序的StringGrid中的内容,我的思路是写一个dll插入到目标进程中,取得stringgrid的地址,然后在dll中取得stringgrid中cell的值。stringgri
我想取得别的程序的StringGrid中的内容,我的思路是写一个dll插入到目标进程中,取得stringgrid的地址,然后在dll中取得stringgrid中cell的值。

stringgrid的地址我已经取得了,和目标程序中比对过了, 是正确的,可是我在dll中引用的时候就出现内存访问错误了,
下面是在dll中的代码:

HANDLE hd=FindControlHandle();//找到目标程序stringgrid的句柄

TStringGrid *StringGrid1;
//把句柄转换成地址,这里参考delphi论坛中相关问题的解决方法,重写了FindControl函数。这里得到的stringgrid的地址是正确的。
StringGrid1= (TStringGrid*)(FindControl2(hd));

 AnsiString s;
 s.sprintf("%.8X",hd);
 ShowMessage("stringgrid的句柄:"+s);
 s.sprintf("%.8X",StringGrid1);
 ShowMessage("stringgrid的地址:"+s);

    ShowMessage(StringGrid1->Cells[2][2]);   //这里出现内存访问错误.

7 个解决方案

#1


StringGrid1= (TStringGrid*)(FindControl2(hd));
这一句执行完看看StringGrid1的值是否为NULL,就知道FindControl2有没有成功。

#2


StringGrid1= (TStringGrid*)(FindControl2(hd));
这一句执行完看看StringGrid1的值是否为NULL,就知道FindControl2有没有成功。

------------------------------------------
stringgrid1的值我看过,就是在目标程序中的stringrid的值,所以这点我特别困惑,明明已经的到了这么内存地址,为什么引用的时候会出现错误呢?

#3


必须将代码注入到目标进程中才可以那样访问。 否则跨进程的访问肯定要AV的。

#4


我已经把dll注入到目标进程中去了,hook也提示成功,从一些工具中也可以看出目标进程中有这个dll

#5


>>> ShowMessage(StringGrid1->Cells[2][2]);   //这里出现内存访问错误.

你说的这一句,是在Dll中的代码还是App中的?

#6


>>> ShowMessage(StringGrid1->Cells[2][2]);   //这里出现内存访问错误.

你说的这一句,是在Dll中的代码还是App中的?

---------------------------------
放在dll中的

#7


这个帖子原来放bcb区,不知道怎么解决,希望在vc区有人能帮忙解决

推荐阅读
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • 核心代码第一种声音[DllImport(Kernel32.dll)]引入命名空间usingSystem.Runtime.InteropServices;publicstat ... [详细]
  • C#DataGridView控件中数据导出到Excel方法一:usingSystem;usingSystem.Collections.Generic;usingSys ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
    本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
  • http头_http头部注入
    1、http头部注入分析1、原理 ... [详细]
author-avatar
航模特异_831
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有