本文共 2162 字,大约阅读时间需要 7 分钟。
OpenCL(Open Computing Language)是第一个面向异构系统通用目的并行编程的开放式、免费标准。它为开发人员提供了一种高效的方式来编写并行代码,使得软件能够在多核处理器(如CPU、GPU、Cell架构等)上高效运行。OpenCL广泛应用于游戏、娱乐、科研、医疗等多个领域。
DMA(直接内存存取)是一种硬件机制,允许外设直接与主内存进行数据传输,而无需经过系统处理器(CPU)。这种机制显著提高了数据传输效率,减少了内存映射带来的开销。
软件请求数据:
read)请求数据。硬件异步推数据:
int dad_transfer(struct dad_dev *dev, int write, void *buffer, size_t count) { dma_addr_t bus_addr; dev->dma_dir = write ? DMA_TO_DEVICE : DMA_FROM_DEVICE; dev->dma_size = count; bus_addr = dma_map_single(&dev->pci_dev->dev, buffer, count, dev->dma_dir); dev->dma_addr = bus_addr; writeb(dev->registers.command, DAD_CMD_DISABLEDMA); writeb(dev->registers.command, write ? DAD_CMD_WR : DAD_CMD_RD); writel(dev->registers.addr, cpu_to_le32(bus_addr)); writel(dev->registers.len, cpu_to_le32(count)); writeb(dev->registers.command, DAD_CMD_ENABLEDMA); return 0;} Jellyfish是一个基于Linux的用户态GPU根kit证明-of-concept项目,利用LD_PRELOAD技术通过Jynx(CPU)和OpenCL(GPU)实现。该项目目前支持AMD和NVIDIA显卡,AMDAPPSDK也支持Intel显卡。
###运行条件
kit.c文件的第103行,指定目标IP地址。GPU-based keylogger通过直接监控键盘缓存内存地址,利用DMA实现高效数据捕获。其优势在于无需修改内核代码,仅需通过特征匹配找到键盘缓存地址即可。
/dev/mem和/dev/kmem文件。struct urb结构中的transfer_buffer内存地址。mmap申请内存并重映射键盘缓存地址。DMA(直接内存存取)是一种硬件机制,允许外设直接与主内存进行数据传输,无需经过CPU控制。这种技术可以通过热补丁(hotpatch)实现对系统内存的直接修改。
OpenCL为并行计算提供了统一的编程环境,DMA优化了数据传输效率,GPU rootkit和keylogger利用硬件特性实现了高效的恶意行为,而DMA hack则为系统安全带来了新的挑战。
转载地址:http://tdzkz.baihongyu.com/