正文 没有用MmMapIoSpace,用了映射的方式对物理地址数据进行读写,之前测试MmMapIoSpace在win10较高版本用不了,貌似是不支持了。...用法和效果如下,加载驱动后,Read.exe用来读取物理地址的数据,限制为0x100字节大小,当然可以通过修改驱动代码来读取任意字节,我这里只是给了个demo;Write.exe则是对指定的物理地址进行写操作...,限制了写入的大小为DWORD32,这里也可以通过修改驱动代码进行调整。...注 不是驱动大佬,可能驱动代码写的并不是很好,如果有什么意见或者驱动存在了蓝屏的问题,欢迎指出和指导 /* function 读取物理地址,大小为FF argv MapAddress:物理地址映射出来的地址
全志平台通读写寄存器的方法 echo 寄存器值 > /sys/class/sunxi_dump/dump cat dump 查看写进去的值 echo 寄存器值 > /sys/class/...到全志一号通查阅对应芯片的user_manual,看想查的寄存器的位置是多少 如,将PH8配作spi0的mosi 2. io口的基地址0x01C2 0800 PH Configure Register...RTS 100: Reserved 101: Reserved 110: Reserved 111: IO Disable 所以如果PH8配成spi 的mosi的话,应该是 0x00000022 32位寄存器...再查spi0对应的寄存器的数值: R16 spi0 - 0x01C6 8000 --- 0x01C6 8FFF (size 4K) root@mico:/sys/class/sunxi_dump# echo...dump 0x00090000 即: 0000 0000 0000 1001 0000 0000 0000 0000 读多个寄存器的数据
内核级别的内存读写可用于绕过各类驱动保护,从而达到强制读写对端内存的目的,本人闲暇之余封装了一个驱动级的内核读写接口,使用此接口可实现对远程字节,字节集,整数,浮点数,多级偏移读写等。...如下将简单介绍该内核读写工具各类API接口是如何调用的,鉴于驱动读写商业价值较大故暂时不放出源码(后期考虑)。...GitHUB项目地址:https://github.com/lyshark/LyMemory驱动读写首先要看的就是驱动支持的控制信号,如下是我封装的几个驱动控制器。...METHOD_BUFFERED, FILE_ANY_ACCESS)// 版本升级后的新功能 2022-09-24#define IOCTL_IO_ReadDeviationMemory 0x815内核驱动读写类库在...写多级偏移单精度浮点数BOOL WriteDeviationFloat(ProcessDeviationMemory *write_offset_struct,FLOAT write_float)全局读写函数封装相对于传统驱动读写
数据库的主从复制环境已经配好,该要解决系统如何实现读写分离功能了。Mysql的jdbc驱动提供了一种实现ReplicationDriver。...propertyName1=propertyValue1[&propertyName2=propertyValue2]...] 3 ReplicationDriver的调用方法 Mysql驱动使用究竟使用...所以,为了让mysql驱动能够准确的将命令发送到master或slave,代码需要在获取到数据连接后,执行命令 Connection.setReadOnly(true) 或 Connection.setReadOnly...Connection conn = driver.connect("jdbc:mysql:replication://master,slave1,slave2 /test", props); // 在主库上读写...rs = conn.createStatement().executeQuery("SELECT a,b FROM alt_table"); ....... }} 4 Spring TX实现读写分离
在一个结构体中定义各连续的寄存器(每个寄存器占四个字节),然后将offset 首地址ioremap,得到的地址传给结构体指针。然后操作寄存器的时候,就操作结构体成员就ok了。
内核中读写内存的方式有很多,典型的读写方式有CR3读写,MDL读写,以及今天要给大家分享的内存拷贝实现读写,拷贝读写的核心是使用MmCopyVirtualMemory这个内核API函数实现,通过调用该函数即可很容易的实现内存的拷贝读写
首先无论在内核态还是在用户态,我们调用的文件操作函数其最终都会转换为一个IRP请求,并发送到文件系统驱动上的IRP_MJ_READ派遣函数里面,这个读写流程大体上可分为如下四步;对于FAT32分区会默认分发到...文件系统驱动经过处理后,就把IRP传给磁盘类驱动的IRP_MJ_READ分发函数处理,当磁盘类驱动处理完毕后,又把IRP传给磁盘小端口驱动。...: 通过如上学习相信你已经掌握了如何使用文件读写系列函数了,接下来将封装一个文件读写驱动,应用层接收,驱动层读取;此驱动部分完整代码如下所示;// 署名权// right to sign one's name...\\ReadWriteSymbolName"typedef struct{ULONG64 size; // 读写长度BYTE* data; // 读写数据集}FileData;/...BYTE* data; // 读写数据集}FileData;int main(int argc, char* argv[]){// 连接到驱动HANDLE handle = CreateFileA
让我们继续在《内核读写内存浮点数》的基础之上做一个简单的延申,如何实现多级偏移读写,其实很简单,读写函数无需改变,只是在读写之前提前做好计算工作,以此来得到一个内存偏移值,并通过调用内存写入原函数实现写出数据的目的...以读取偏移内存为例,如下代码同样来源于本人的LyMemory读写驱动项目,其中核心函数为WIN10_ReadDeviationIntMemory()该函数的主要作用是通过用户传入的基地址与偏移值,动态计算出当前的动态地址...pbase, rbuffer, 4); } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return Value; } // 驱动卸载例程...VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint("Uninstall Driver \n"); } // 驱动入口地址 NTSTATUS DriverEntry...ReadDeviationMemory函数,让其只计算得出偏移地址,而所需要写出的类型则根据自己的实际需求配合不同的写入函数完成,也就是将两者分离开,如下则是一段实现计算偏移的代码片段,该代码同样来自于本人的LyMemory驱动读写项目
数据库的主从复制环境已经配好,该要解决系统如何实现读写分离功能了。MySQL的jdbc驱动提供了一种实现ReplicationDriver。...propertyName1=propertyValue1[&propertyName2=propertyValue2]...] 3 ReplicationDriver的调用方法 Mysql驱动使用究竟使用...所以,为了让mysql驱动能够准确的将命令发送到master或slave,代码需要在获取到数据连接后,执行命令 Connection.setReadOnly(true) 或 Connection.setReadOnly...conn.createStatement().executeQuery("SELECT a,b FROM alt_table"); ....... } } 4 Spring TX实现读写分离...{ return enterpriseDao.queryList(criteria); } 在现有项目上拉了一个分支,使用VMWare上搭建的MariaDB主从库进行测试,确实能实现读写分离
让我们继续在《内核读写内存浮点数》的基础之上做一个简单的延申,如何实现多级偏移读写,其实很简单,读写函数无需改变,只是在读写之前提前做好计算工作,以此来得到一个内存偏移值,并通过调用内存写入原函数实现写出数据的目的...以读取偏移内存为例,如下代码同样来源于本人的LyMemory读写驱动项目,其中核心函数为WIN10_ReadDeviationIntMemory()该函数的主要作用是通过用户传入的基地址与偏移值,动态计算出当前的动态地址...VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint("Uninstall Driver \n");}// 驱动入口地址NTSTATUS DriverEntry(IN...VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint("Uninstall Driver \n");}// 驱动入口地址NTSTATUS DriverEntry(IN...ReadDeviationMemory函数,让其只计算得出偏移地址,而所需要写出的类型则根据自己的实际需求配合不同的写入函数完成,也就是将两者分离开,如下则是一段实现计算偏移的代码片段,该代码同样来自于本人的LyMemory驱动读写项目
首先无论在内核态还是在用户态,我们调用的文件操作函数其最终都会转换为一个IRP请求,并发送到文件系统驱动上的IRP_MJ_READ派遣函数里面,这个读写流程大体上可分为如下四步; 对于FAT32分区会默认分发到...文件系统驱动经过处理后,就把IRP传给磁盘类驱动的IRP_MJ_READ分发函数处理,当磁盘类驱动处理完毕后,又把IRP传给磁盘小端口驱动。...: 通过如上学习相信你已经掌握了如何使用文件读写系列函数了,接下来将封装一个文件读写驱动,应用层接收,驱动层读取; 此驱动部分完整代码如下所示; // 署名权 // right to sign one's...\\ReadWriteSymbolName" typedef struct { ULONG64 size; // 读写长度 BYTE* data; // 读写数据集 }FileData...BYTE* data; // 读写数据集 }FileData; int main(int argc, char* argv[]) { // 连接到驱动 HANDLE handle =
实际项目的调试中,往往需要快速修改驱动芯片(只针对IIC通讯)中对应寄存器的值,传统的方式一般是编译驱动 -> 烧录固件 -> 测试,而这样的方式往往很繁琐。...这里介绍使用i2c-tools快速修改驱动芯片的寄存器方式1 使用工具的前提: 驱动芯片是用IIC通讯的,一般的常用的芯片基本都是IIC控制(电源,音频,光感等等) 交叉编译好i2c-tools 本文以...TI音频芯片TAS5754驱动为例 , 内核版本为: Linux buildroot 4.9.68 , 前一篇文章[Linux驱动炼成记] 04-功放TAS5754,已经说了一些设备地址的配置,参数等等...参数含义 -f Force access -y Disable interactive mode 使用i2cdump就可以罗列处所有寄存器的值,这里以0x3d 0x3e为例,可以看出...0x3d和0x3e寄存器对应的值为0x44, 然后我们去驱动中看一下是否可以对应上: #define TAS575X_CH_B_DIG_VOL 61 -> 十六进制 0x3d #define TAS575X_CH_A_DIG_VOL
cd sys/class/sunxi_dump 把要读写的地址写到dump里 root@TinaLinux:/sys/class/sunxi_dump# echo 0x07010310 > dump 读出来看一下
今天,小编要来说的的是Mac下一款实用的NTFS读写软件——Tuxera NTFS,我们都知道OS X默认是不支持NTFS格式写入的,对于很多使用U盘或移动硬盘写操作的朋友来说非常的不便。...Tuxera NTFS是专门为 Mac用户提供的专业NTFS驱动软件, 它在提供最快速数据传输的同时,也使用智能缓存层来保护您的数据。...能完全读写NTFS文件,兼容跨越Mac和Windows平台,数据传输速度快而稳定。什么是 NTFS?...安装包下载完成之后打开,点击【安装Tuxera NTFS】;2、安装之前,会有个提示:此软件包将运行一个程序以确定该软件能否安装,点击【允许】,然后安装向导就会出现,在出现的介绍中,我们可以观察到这款读写软件所包含的组件
背景针对Go语言modernc.org/sqlite驱动并发读写过程中的报错“database is locked (5) (SQLITE_BUSY)”的研究。...(startT)fmt.Printf("time cost:%s\n", tc.String())}结论journal_mode = wal 和 busy_timeout = 10000 无法保证并发读写不报错...;读写锁无法保证并发读写不报错(包括并发读);所有SQL操作都用写锁,能保证并发读写不报错。
在某些时候我们需要读写的进程可能存在虚拟内存保护机制,在该机制下用户的CR3以及MDL读写将直接失效,从而导致无法读取到正确的数据,本章我们将继续研究如何实现物理级别的寻址读写。...首先,驱动中的物理页读写是指在驱动中直接读写物理内存页(而不是虚拟内存页)。...这种方式的优点是它能够更快地访问内存,因为它避免了虚拟内存管理的开销,通过直接读写物理内存,驱动程序可以绕过虚拟内存的保护机制,获得对系统中内存的更高级别的访问权限。...// 从用户层虚拟地址切换到物理页地址的函数 // 将 CR3 寄存器的末尾4个比特清零,这些比特是用于对齐的,不需要考虑 /* 参数 cr3:物理地址。...address) { return 0; } return address + PAGE_OFFSET; } 有了如上封装,那么我们就可以实现驱动读写了,首先我们实现驱动读取功能,
如前所述,在前几章内容中笔者简单介绍了内存读写的基本实现方式,这其中包括了CR3切换读写,MDL映射读写,内存拷贝读写,本章将在如前所述的读写函数进一步封装,并以此来实现驱动读写内存浮点数的目的。...内存浮点数的读写依赖于读写内存字节的实现,因为浮点数本质上也可以看作是一个字节集,对于单精度浮点数来说这个字节集列表是4字节,而对于双精度浮点数,此列表长度则为8字节。...如下代码片段摘取自本人的LyMemory驱动读写项目,函数ReadProcessMemoryByte用于读取内存特定字节类型的数据,函数WriteProcessMemoryByte则用于写入字节类型数据...,完整代码如下所示;这段代码中依然采用了《驱动开发:内核MDL读写进程内存》中所示的读写方法,通过MDL附加到进程并RtlCopyMemory拷贝数据,至于如何读写字节集只需要循环读写即可实现;// 署名权...MmBuildMdlForNonPagedPool(mdl);BYTE* ChangeData = NULL;__try{// 将MDL映射到我们驱动里的一个变量,对该变量读写就是对MDL对应的物理内存读写
MDL内存读写是最常用的一种读写模式,通常需要附加到指定进程空间内然后调用内存拷贝得到对端内存中的数据,在调用结束后再将其空间释放掉,通过这种方式实现内存读写操作,此种模式的读写操作也是最推荐使用的相比于...CR3切换来说,此方式更稳定并不会受寄存器的影响。...1.调用PsLookupProcessByProcessId得到进程Process结构 2.调用KeStackAttachProcess附加到对端进程内 3.调用ProbeForRead检查内存是否可读写...ID DWORD64 address; // 要读写的地址 DWORD size; // 读写长度 BYTE* data;...address; // 要读写的地址 DWORD size; // 读写长度 BYTE* data; // 要读写的数据
如前所述,在前几章内容中笔者简单介绍了内存读写的基本实现方式,这其中包括了CR3切换读写,MDL映射读写,内存拷贝读写,本章将在如前所述的读写函数进一步封装,并以此来实现驱动读写内存浮点数的目的。...内存浮点数的读写依赖于读写内存字节的实现,因为浮点数本质上也可以看作是一个字节集,对于单精度浮点数来说这个字节集列表是4字节,而对于双精度浮点数,此列表长度则为8字节。...如下代码片段摘取自本人的LyMemory驱动读写项目,函数ReadProcessMemoryByte用于读取内存特定字节类型的数据,函数WriteProcessMemoryByte则用于写入字节类型数据...,完整代码如下所示; 这段代码中依然采用了《驱动开发:内核MDL读写进程内存》中所示的读写方法,通过MDL附加到进程并RtlCopyMemory拷贝数据,至于如何读写字节集只需要循环读写即可实现; //...MmBuildMdlForNonPagedPool(mdl); BYTE* ChangeData = NULL; __try { // 将MDL映射到我们驱动里的一个变量,对该变量读写就是对
领取专属 10元无门槛券
手把手带您无忧上云