扫描进程中的字节
Scanning through bytes in a process
我目前正在开发一个程序,这个想法涉及扫描一个进程(注入dll的进程)中的所有字节,如果在该字节找到一个函数,则返回信息并继续扫描。
我唯一的问题是 - 扫描进程(当前进程)中的所有字节并检查扫描的字节是否为函数的最有效方法是什么?
为字节扫描内存的最有效方法是使用任何专门的处理器指令。
将数据拖入处理器的数据缓存,然后对其进行扫描。
如果可以,获取适合处理器字长的字节大小。例如,ARM7TDMI 处理器具有 32 位字长,这意味着它可以一次获取 4 个字节。因此,处理器以四个字节的倍数获取最有效。
要了解更多详细信息,我们需要有关您的平台的更多详细信息,包括 OS 和处理器。
IMO,这是一个非常没有希望的目标。至少在第一次尝试时,我会挂钩导出的函数(基于 DLL 等的提及,我假设这是在 Windows 上)。
如果您想扫描更多未导出的函数,下一步可能是反汇编代码并查找 Call
指令,然后将每个指令的目标地址保存为函数的入口点。
实际上,这不太可能带来很多好处——能够在不知道函数的情况下记录函数 are/do 可能会生成大量输出,但实际信息很少。
我目前正在开发一个程序,这个想法涉及扫描一个进程(注入dll的进程)中的所有字节,如果在该字节找到一个函数,则返回信息并继续扫描。
我唯一的问题是 - 扫描进程(当前进程)中的所有字节并检查扫描的字节是否为函数的最有效方法是什么?
为字节扫描内存的最有效方法是使用任何专门的处理器指令。
将数据拖入处理器的数据缓存,然后对其进行扫描。
如果可以,获取适合处理器字长的字节大小。例如,ARM7TDMI 处理器具有 32 位字长,这意味着它可以一次获取 4 个字节。因此,处理器以四个字节的倍数获取最有效。
要了解更多详细信息,我们需要有关您的平台的更多详细信息,包括 OS 和处理器。
IMO,这是一个非常没有希望的目标。至少在第一次尝试时,我会挂钩导出的函数(基于 DLL 等的提及,我假设这是在 Windows 上)。
如果您想扫描更多未导出的函数,下一步可能是反汇编代码并查找 Call
指令,然后将每个指令的目标地址保存为函数的入口点。
实际上,这不太可能带来很多好处——能够在不知道函数的情况下记录函数 are/do 可能会生成大量输出,但实际信息很少。