一种获取数据的方法及装置与流程

文档序号:11254363阅读:321来源:国知局
一种获取数据的方法及装置与流程

本发明属于信息处理技术领域,尤其涉及一种获取数据的方法及装置。



背景技术:

目前,随着网络通信技术的进步和宽带网络的提速,网络直播得到了越来越多的发展和应用。

在游戏直播领域,越来越多的观众会观看游戏主播的直播。同时随着弹幕的发展,使得直播具有更好的互动和趣味性。对于游戏直播来说,主播可以通过一边玩游戏一边讲解游戏进行直播;但对于观众来说只能观看和发送弹幕,却不能实时的观看当前游戏的统计数据。

基于此,本发明实施例提供一种获取数据的方法及装置,以解决上述技术问题。



技术实现要素:

针对现有技术存在的问题,本发明实施例提供了一种获取数据的方法及装置,用于解决现有技术中在观看游戏直播时,用户只能观看和发送弹幕,不能实时自动获取游戏数据的技术问题。

本发明提供一种获取数据的方法,所述方法包括:

建立直播应用与注入组件之间的通信链路;

将所述注入组件注入至第一应用的进程中;

获取用户发送的弹幕信息,并基于所述弹幕信息利用所述注入组件获取所述第一应用的数据;

在所述直播应用的直播页面中显示所述数据。

上述方案中,所述建立直播应用与注入组件之间的通信链路,包括:

所述直播应用调用createnamedpipe函数创建命名管道;所述命名管道即为所述直播应用与所述注入组件之间的通信链路。

上述方案中,所述将所述注入组件注入至第一应用的进程中,包括:

利用virtualallocex函数在第一应用进程的内存空间中分配内存;

利用writeprocessmemory函数将所述注入组件的磁盘路径写入已分配的所述内存中;

利用createremotethread函数在所述第一应用进程中建立一个线程,利用所述线程加载所述注入组件。

上述方案中,所述利用所述线程加载所述注入组件,包括:

所述线程利用loadlibrary函数加载所述注入组件的磁盘路径。

上述方案中,所述利用所述注入组件获取用户发送的弹幕信息,并基于所述弹幕信息获取所述第一应用的数据,包括:

基于预先设置的数据标识获取所述弹幕信息中的数据类型;

所述注入组件利用动态调试工具windbg调试所述第一应用的进程,确定各数据类型与存储地址之间的对应关系;

基于所述对应关系查找所述数据类型对应的存储地址,从所述存储地址中读取对应的数据,并将所述数据发送至所述直播应用。

本发明还提供一种获取数据的装置,所述装置包括:

建立单元,用于建立直播应用与注入组件之间的通信链路;

注入单元,用于将所述注入组件注入至第一应用的进程中;

获取单元,用于获取用户发送的弹幕信息,并基于所述弹幕信息利用所述注入组件获取所述第一应用的数据;

显示单元,用于在所述直播应用的直播页面中显示所述数据。

上述方案中,所述建立单元具体用于:

调用createnamedpipe函数创建命名管道;所述命名管道即为所述直播应用与所述注入组件之间的通信链路。

上述方案中,所述注入单元具体用于:

利用virtualallocex函数在第一应用进程的内存空间中分配内存;

利用writeprocessmemory函数将所述注入组件的磁盘路径写入已分配的所述内存中;

利用createremotethread函数在所述第一应用进程中建立一个线程,利用所述线程加载所述注入组件。

上述方案中,所述利用所述线程加载所述注入组件,包括:

所述线程利用loadlibrary函数加载所述注入组件的磁盘路径。

上述方案中,所述获取单元具体用于:

基于预先设置的数据标识获取所述弹幕信息中的数据类型;

所述注入组件利用动态调试工具windbg调试所述第一应用的进程,确定各数据类型与存储地址之间的对应关系;

基于所述对应关系查找所述数据类型对应的存储地址,从所述存储地址中读取对应的数据,并将所述数据发送至所述直播应用。

本发明提供了一种获取数据的方法及装置,所述方法包括:建立直播应用与注入组件之间的通信链路,将所述注入组件注入至第一应用的进程中;获取用户发送的弹幕信息,并基于所述弹幕信息利用所述注入组件获取所述第一应用的数据;在所述直播应用的直播页面中显示所述数据;如此,当通信链路建立好之后,直播应用可以通过所述通信链路与注入组件进行通信,将注入组件注入之第一应用进程后,注入组件可以根据获取到的弹幕信息实时读取第一应用进程中的数据,并通过通信链路将数据发送至直播应用,这样就无需主播手动操作,也可以实时的、自动的获取数据,提高了直播的效率及趣味性。

附图说明

图1为本发明实施例一提供的获取数据的方法流程示意图;

图2为本发明实施例二提供的获取数据的装置结构示意图。

具体实施方式

为了在观看游戏直播时,用户可以实时自动获取游戏数据,本发明提供了一种获取数据的方法及装置,所述方法包括:建立直播应用与注入组件之间的通信链路,将所述注入组件注入至第一应用的进程中;获取用户发送的弹幕信息,并基于所述弹幕信息利用所述注入组件获取所述第一应用的数据;在所述直播应用的直播页面中显示所述数据。

下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。

实施例一

本实施例提供一种获取数据的方法,如图1所示,所述方法包括:

s101,建立直播应用与注入组件之间的通信链路,将所述注入组件注入至第一应用的进程中。

本步骤中;所述第一应用可以包括:游戏应用;一般来说,直播应用和第一应用是两个完全独立的应用,因此,为了在直播过程中直播应用可以实时自动获取到第一应用中的游戏数据,首先需要建立直播应用与注入组件之间的通信链路。需要说明的是,所述注入组件是所述直播应用的一部分,但是是一个功能独立的组件,且该组件随着直播应用的开启才会运行。当然,所述第一应用也可以包括其他应用,比如聊天软件应用、社交应用等。

这里,所述通信链路是进程间通信所需的链路,可以包括:命名通道、内存映射或者套接字等。本实施例中的通信链路是通过命名通道来实现的。

在建立通信链路时,具体包括:所述直播应用调用createnamedpipe函数创建命名管道;所述命名管道即为所述直播应用与所述注入组件之间的通信链路。所述命名管道具有事先约定好的名称,该名称与其他进程间的命名通道不同。

当命名管道建立好之后,所述注入组件会根据事先约定好的名称利用createfile函数来连接所述命名管道,在注入组件连接命名管道的过程中,调用waitnamedpipe来等待直播应用的响应。而所述直播应用具体是通过调用connectnamedpipe函数来等待注入组件进行连接,若注入组件连接上之后,所述注入组件通过调用writefile函数向管道中写入应答数据,所述直播应用调用readfile函数来读取直播应用发送过来的数据。

当所述注入组件连接成功后,还需将注入组件注入至第一应用中,使得注入组件与所述第一应用在同一进程,以能获取第一应用的数据。所述数据可以包括战况数据。

具体地,将所述注入组件注入至第一应用的进程中,包括:

利用virtualallocex函数在第一应用进程的内存空间中分配内存;利用writeprocessmemory函数将所述注入组件的磁盘路径写入已分配的所述内存中;利用createremotethread函数在所述第一应用进程中建立一个线程,利用所述线程加载所述注入组件。

这样就将用于获取第一应用数据的注入组件注入至所述第一应用中了。

s102,获取用户发送的弹幕信息,并基于所述弹幕信息利用所述注入组件获取所述第一应用的数据。

本步骤中,所述注入组件在获取第一应用的数据时,是需要基于弹幕信息来实现的。在获取弹幕信息时,可以基于预先设置的数据标识获取所述弹幕信息中的数据类型,然后根据数据类型获取第一应用相应的数据,具体包括:所述注入组件利用动态调试工具windbg调试所述第一应用的进程,确定各数据类型与存储地址之间的对应关系;基于所述对应关系查找所述数据类型对应的存储地址,从所述存储地址中读取对应的数据,并将所述数据发送至所述直播应用。

以战况数据为例来说,在获取战况弹幕信息时,可以基于预先设置的战况标识获取所述弹幕信息中的战况类型;比如战况类型包括:“总输出伤害值”、“总金币获取量”、“总的插眼个数”、“总的杀敌数量”等;那么“总输出伤害”对应的战况标识可以为a、“总金币获取量”对应的战况标识可以为b、“总的插眼个数”对应的战况标识可以为c、“总的杀敌数量”对应的战况标识可以为d。

而用户在发送战况弹幕信息时可以以“战况#+战况标识”的形式来发;比如,发送“战况#a”时即表示想要获取游戏角色的“总输出伤害值”的数据。

因第一应用中的每种战数据都会使用一个全局变量地址来进行储存,同样地,第一应用中的每种战况数据也会使用一个全局变量地址来进行储存,因此注入组件在基于所述战况弹幕信息获取所述第一应用的战况数据时,可以利用动态调试工具windbg调试所述第一应用的进程,确定各战况类型的战况数据与存储地址之间的对应关系;基于所述对应关系查找所述战况类型对应的存储地址,从所述存储地址中读取对应的所述战况数据,并将所述战况数据发送至所述直播应用。

比如,注入组件最后确定出的对应关系为:全局变量xxxx1存储的是“总输出伤害值”、全局变量xxxx2存储的是“总金币获取量”、全局变量xxxx3存储的是“总的插眼个数”、全局变量xxxx4存储的是“总的杀敌数量”;那么,从所述存储地址中读取对应的所述战况数据具体包括:

__asm

{

movsumdamage,[xxx1]//sumdamage则是读取到的总输出伤害值,[xxx1]则表示第一应用中存储总输出伤害值的全局变量地址。

}

__asm

{

movsumgold,[xxx2]//sumgold则是读取到的总金币获取量,[xxx2]则表示第一应用中存储总金币获取量的全局变量地址。

}

__asm

{

movsumeye,[xxx3]//sumeye则是读取的总插眼个数,[xxx3]则第一应用中存储总插眼个数的全局变量地址。

}

__asm

{

movsumkill,[xxx4]//sumkill则是读取的是总的杀敌数量,[xxx4]则表示第一应用中存储总的杀敌数量的全局变量地址。

}

其中,__asm{}括起来的内容表示在c语言中内嵌入汇编代码;所述xxx1和xxx2和xxx3和xxx4这四个参数的值则是四个内存地址,这四个内存地址具体则是通过windbg动态调试分析来查找的。

这样,注入组件就可以获取到各个战况类型的战况数据,并将战况数据经通信链路发送至直播应用。

s103,在所述直播应用的直播页面中显示所述数据。

本步骤中,当直播应用接收到数据后,调用发送弹幕的功能在所述直播应用的直播页面中显示所述数据,这样用户就可以在直播页面中实时观看到数据了。

以战况数据为例来说,当直播应用接收到战况数据后,调用发送弹幕的功能在所述直播应用的直播页面中显示所述战况数据,这样用户就可以在直播页面中实时观看到战况数据了。

实施例二

相应于实施例一,本实施例还提供一种获取数据的装置,如图2所示,所述装置包括:建立单元21、注入单元22、获取单元23及显示单元24;其中,

所述建立单元21用于建立直播应用与注入组件之间的通信链路;所述第一应用可以包括:游戏应用;一般来说,直播应用和第一应用是两个完全独立的应用,因此,为了在直播过程中直播应用可以实时自动获取到第一应用中游戏数据,首先需要建立直播应用与注入组件之间的通信链路。需要说明的是,所述注入组件是所述直播应用的一部分,但是是一个功能独立的组件,且该组件随着直播应用的开启才会运行。

这里,所述通信链路是进程间通信所需的链路,可以包括:命名通道、内存映射或者套接字等。本实施例中的通信链路是通过命名通道来实现的。

所述建立单元21在建立通信链路时,具体包括:所述直播应用调用createnamedpipe函数创建命名管道;所述命名管道即为所述直播应用与所述注入组件之间的通信链路。所述命名管道具有事先约定好的名称,该名称与其他进程间的命名通道不同。

当命名管道建立好之后,所述注入组件会根据事先约定好的名称利用createfile函数来连接所述命名管道,在注入组件连接命名管道的过程中,调用waitnamedpipe来等待直播应用的响应。而所述直播应用具体是通过调用connectnamedpipe函数来等待注入组件进行连接,若注入组件连接上之后,所述注入组件通过调用writefile函数向管道中写入应答数据,所述直播应用调用readfile函数来读取直播应用发送过来的数据。

当所述注入组件连接成功后,注入单元22还需将注入组件注入至第一应用中,使得注入组件与所述第一应用在同一进程,以能获取第一应用的数据。所述数据可以包括战况数据。

具体地,注入单元22将所述注入组件注入至第一应用的进程中,包括:

利用virtualallocex函数在第一应用进程的内存空间中分配内存;利用writeprocessmemory函数将所述注入组件的磁盘路径写入已分配的所述内存中;利用createremotethread函数在所述第一应用进程中建立一个线程,利用所述线程加载所述注入组件。

这样就将用于获取第一应用数据的注入组件注入至所述第一应用中了。

所述获取单元23在获取第一应用的数据时,是需要利用注入组件基于弹幕信息来实现的。在获取弹幕信息时,可以基于预先设置的数据标识获取所述弹幕信息中的数据类型,然后根据数据类型获取第一应用相应的数据,具体包括:所述注入组件利用动态调试工具windbg调试所述第一应用的进程,确定各数据类型与存储地址之间的对应关系;基于所述对应关系查找所述数据类型对应的存储地址,从所述存储地址中读取对应的数据,并将所述数据发送至所述直播应用。

以战况数据为例来说,所述获取单元23在获取战况弹幕信息时,可以基于预先设置的战况标识获取所述战况弹幕信息中的战况类型;比如所述战况类型包括:“总输出伤害值”、“总金币获取量”、“总的插眼个数”、“总的杀敌数量”等;那么“总输出伤害”对应的战况标识可以为a、“总金币获取量”对应的战况标识可以为b、“总的插眼个数”对应的战况标识可以为c、“总的杀敌数量”对应的战况标识可以为d。

而用户在发送战况弹幕信息时可以以“战况#+战况标识”的形式来发;比如,“战况#a”表示获取游戏角色的“总输出伤害值”的数据。

因第一应用中的每种战数据都会使用一个全局变量地址来进行储存,同样地,第一应用中的每种战况数据也会使用一个全局变量地址来进行储存,因此注入组件在基于所述战况弹幕信息获取所述第一应用的战况数据时,可以利用动态调试工具windbg调试所述第一应用的进程,确定各战况类型的战况数据与存储地址之间的对应关系;基于所述对应关系查找所述战况类型对应的存储地址,从所述存储地址中读取对应的所述战况数据,并将所述战况数据发送至所述直播应用。

比如,注入组件最后确定出的对应关系为:全局变量xxxx1存储的是“总输出伤害值”、全局变量xxxx2存储的是“总金币获取量”、全局变量xxxx3存储的是“总的插眼个数”、全局变量xxxx4存储的是“总的杀敌数量”;那么,从所述存储地址中读取对应的所述战况数据具体包括:

__asm

{

movsumdamage,[xxx1]//sumdamage则是读取到的总输出伤害值,[xxx1]则表示第一应用中存储总输出伤害值的全局变量地址。

}

__asm

{

movsumgold,[xxx2]//sumgold则是读取到的总金币获取量,[xxx2]则表示第一应用中存储总金币获取量的全局变量地址。

}

__asm

{

movsumeye,[xxx3]//sumeye则是读取的总插眼个数,[xxx3]则第一应用中存储总插眼个数的全局变量地址。

}

__asm

{

movsumkill,[xxx4]//sumkill则是读取的是总的杀敌数量,[xxx4]则表示第一应用中存储总的杀敌数量的全局变量地址。

}

其中,__asm{}括起来的内容表示在c语言中内嵌入汇编代码;所述xxx1和xxx2和xxx3和xxx4这四个参数的值则是四个内存地址,这四个内存地址具体则是通过windbg动态调试分析来查找的。

这样,获取单元23就可以获取到各个战况类型的战况数据,并将战况数据经通信链路发送至直播应用。

当直播应用接收到数据后显示单元24,调用发送弹幕的功能在所述直播应用的直播页面中显示所述数据,这样用户就可以在直播页面中实时观看到数据了。

以战况数据为例来说,当直播应用接收到战况数据后,显示单元24调用发送弹幕的功能在所述直播应用的直播页面中显示所述战况数据,这样用户就可以在直播页面中实时观看到战况数据了。

本发明提供的获取数据的方法及装置能带来的有益效果至少是:

本发明提供了一种获取数据的方法及装置,所述方法包括:建立直播应用与注入组件之间的通信链路,将所述注入组件注入至第一应用的进程中;获取用户发送的弹幕信息,并基于所述弹幕信息利用所述注入组件获取所述第一应用的数据;在所述直播应用的直播页面中显示所述战况数据;如此,当通信链路建立好之后,直播应用可以通过所述通信链路与注入组件进行通信,将注入组件注入之第一应用进程后,注入组件可以根据获取到的弹幕信息实时读取第一应用进程中的数据,并通过通信链路将数据发送至直播应用,这样就无需主播手动操作,也可以实时的、自动的获取战况数据,提高了直播的效率及趣味性。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1