首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android 逆向】代码调试器开发 ( ptrace 函数 | 寄存器 | 写寄存器 )

文章目录 一、寄存器 二、写寄存器 一、寄存器 ---- 调用 ptrace(PTRACE_GETREGS, m_nPid, NULL, regs) 读取进程运行时的寄存器 ; 读取寄存器时 , 进程必须处于...WUNTRACED 状态 , 否则就会出错 ; 参数一设置为 PTRACE_GETREGS , 代表本次操作是读取寄存器 ; 完整代码 : int CPtrace::getRegister(REGS...PTRACE_GETREGS failed pid %d", m_nPid); return PTERR_GETREG_FAILED; } return PTERR_SUCCESS; } 二、写寄存器...---- 调用 ptrace(PTRACE_SETREGS, m_nPid, NULL, regs) 向进程运行时的寄存器写入 ; 写寄存器时 , 进程必须处于 WUNTRACED 状态 , 否则就会出错...; 参数一设置为 PTRACE_SETREGS, 代表本次操作是向寄存器写入 ; int CPtrace::setRegister(const REGS* regs) { if (ptrace(PTRACE_SETREGS

39400
您找到你想要的搜索结果了吗?
是的
没有找到

汇编指令-MRS()和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)

1.MSR和MRS指令介绍  MRS 指令:  对状态寄存器CPSR和SPSR进行操作。通过CPSR可以获得当前处理器的工作状态。...SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。 MSR指令:    对状态寄存器CPSR和SPSR进行写操作。...与MRS配合使用,可以实现对CPSR或SPSR寄存器-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。...标志域屏蔽字节([31:24]) 所以cpsr_c表示的是CPSR控制位、 4.使用MRS和MSR来设置2440位管理模式,实例: mrs r0,cpsr                          状态寄存器...,    { r0-r12,pc }^                    //  中断返回, ^表示将spsr的复制到cpsr

2K50

汇编指令-MRS()和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)

1.MSR和MRS指令介绍  MRS 指令:  对状态寄存器CPSR和SPSR进行操作。通过CPSR可以获得当前处理器的工作状态。...SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。 MSR指令:    对状态寄存器CPSR和SPSR进行写操作。...与MRS配合使用,可以实现对CPSR或SPSR寄存器-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。...([23:16]) F 标志域屏蔽字节([31:24]) 所以cpsr_c表示的是CPSR控制位、 4.使用MRS和MSR来设置2440位管理模式,实例: mrs r0,cpsr //状态寄存器..., { r0-r12,pc }^ //中断返回, ^表示将spsr的复制到cpsr

1.2K20

RGMII接口调试使用VIO读取PHY寄存器

这时,常常需要使用VIO去读取PHY里面对应寄存器,看是否工作在正常RGMII接口时序模式。 测试场景 测试拓扑图如下 ?...经验总结:遇到RGMII接口调试时,最关键的是要查看PHY芯片的型号,查阅PHY芯片手册,通过MDIO读取PHY芯片寄存器,看RGMII接口上数据和时钟是否偏移2ns,再决定FPGA对应管脚约束是否进行偏移...具体的测试步骤为:通过VIO配置MDIO管理模块PHY地址、寄存器地址,然后选择操作读取某一PHY芯片的寄存器,结合PHY的工作状态,判断该寄存器是否被正确读取。...由于执行操作时是采用先写入地址,在读取数据的方式,因此只测试读操作就可以完整的测试MDIO管理模块的功能。以下是VIO对应的调用代码。...mdc_o) ); //------------------------------------------------------------------- 通过VIO和MDIO读取相应寄存器

3.7K21

11-快速修改芯片驱动中寄存器

实际项目的调试中,往往需要快速修改驱动芯片(只针对IIC通讯)中对应寄存器,传统的方式一般是编译驱动 -> 烧录固件 -> 测试,而这样的方式往往很繁琐。...TI音频芯片TAS5754驱动为例 , 内核版本为: Linux buildroot 4.9.68 , 前一篇文章[Linux驱动炼成记] 04-功放TAS5754,已经说了一些设备地址的配置,参数等等...interrupt-parent = ; //interrupts = ; }; 罗列出设备上寄存器...参数含义 -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

1.5K20

汇编调试方式之:通过串口转义输出寄存器

前两天在调试DragonOS的riscv引导代码的时候,想在真机上获取寄存器,就找到了这篇帖子,非常有用,就把里面的代码提取出来,在此记录。...因为在汇编里面难以对字符串进行格式化操作,因此可以考虑把寄存器转义一下,然后输出到串口,再使用一个C程序把它转义回来。...方法如下: 编码函数 首先在汇编里面定义这样一个函数: // 要打的输入到a0 __do_show_val: // todo: 为了保护寄存器,这里应当添加压栈操作, // 把函数使用到的寄存器都保存一下...addi t2, t2, -1 j 2b 3: li a0, 0x0A # 打一个回车, 方便查看 li a7, 0x01 ecall ret 当要使用上述代码的时候,就把要打印的寄存器.../show Enter:PAAAIFPDAAAAAAAA 000000003F58000F Enter: 所以我们可以看到这个寄存器就是“3F58000F“。

10010

图解|Linux文件预原理

概述 本文主要阐述内核(linux-3.12)的文件系统预设计和实现。...当然,这个细节对应用程序透明,应用程序可能的感觉就是下次的速度会更快,当然这是好事。文中我们会通过设置几个情境(顺序、随机、多线程交织)来分析预的逻辑。...且是顺序),那让我们看看操作系统是如何对文件进行预的。...顺序(本次偏移为上次偏移 (ra->start) + 大小(ra->size,包含预量) - * 上次预大小(ra->async_size)) * 2. offset...本次预窗口的起始以及大小以及预大小可根据前一次的预窗口计算得到,又由于本次是异步预,因此,预大小就是本次的页面数量,因此将本次预的第一个页面(PAGE 4)添加预标记。

6010

Linux小说「GitHub 热点速览 v.22.03」

作者:HelloGitHub-小鱼干 本周特推选取了一个画风有点意思的 Linux 代码带项目 flash-linux0.11-talk,希望有趣的文风能带你读完 Linux 代码。...本周特推 1.1 小说一样 Linux:flash-linux0.11-talk 本周 star 增长数:1,050+ flash-linux0.11-talk 带你 Linux 0.11 核心代码并理解背后的操作系统设计思考...,按照作者的宣言“你管这破玩意叫操作系统源码 — 像小说一样品读 Linux 0.11 核心代码”这是一个 Linux 代码趣项目,可以从章节(节选)感受下画风: 第 5 回 进入保护模式前的最后一次折腾内存...GitHub 地址→https://github.com/sunym1993/flash-linux0.11-talk 1.2 彩色方程注释:annotated_latex_equations 本周

3.3K20

Linux下开发stm32 ③ | 寄存器工程开发

先来回顾一下前两篇 Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译 Linux下开发stm32(二) | 使用openocd下载与调试 前两篇我们介绍了如何创建一个空的裸机工程...main文件),并编译工程生成elf文件,然后将其转为bin格式或hex格式,使用openocd下载,最后编写了一个makefile雏形,并成功点亮了一个LED~ 但是这个LED我们是通过指针直接操作寄存器地址来完成的...,接下来,我们在此基础上,引入stm32头文件,其中包含了寄存器的宏定义,也就是使用寄存器进行开发~ 1.创建寄存器工程 首先将上一节中创建的裸机工程00-template-reg复制一份出来,改名为01...0x40010c00+0x0c) &= ~(1<<0); GPIOB->ODR &= ~(1<<0); while(1); } void SystemInit(void) { } 至此,寄存器工程创建完毕...,接下来开始编译~ 2.编译&下载寄存器工程 编译寄存器工程的重点就在于C头文件和C源文件,启动文件的编译和链接都和之前一样。

1.2K30

Linux内核32--拷贝-更新(RCU)

所以,Linux内核引入了-拷贝-更新技术(英文是Read-copy update,简称RCU),它是另外一种同步技术,主要用来保护被多个CPU读取的数据结构。...RCU允许多个操作和多个写操作并发执行。更重要的是,RCU是一种免锁算法,也就是说,它没有使用共享的锁或计数器保护数据结构(但是,这儿还是主要指的操作是无锁算法。...所以,其使用场合也是比较严格的,多个写操作中的锁开销不能大于操作采用无锁算法省下的开销)。...因为,这时候操作可能还在读取旧数据,所以,必须等到所有的可能的操作执行rcu_read_unlock()离开临界代码段后,旧数据的存储空间才能被释放。...4 使用场合 RCU是从Linux2.6版本引入的,主要使用在网络层和虚拟文件系统层。

1.6K10

Linux Shell函数返回

Shell函数返回,一般有3种方式:return,argv,echo 1) return 语句 shell函数的返回,可以和其他语言的返回一样,通过return语句返回。 示例: #!...获取函数的返回通过调用函数,或者最后执行的获得。 另外,可以直接用函数的返回用作if的判断。 注意:return只能用来返回整数值,且和c的区别是返回为正确,其他的为错误。...3) echo 返回 其实在shell中,函数的返回有一个非常安全的返回方式,即通过输出到标准输出返回。因为子进程会继承父进程的标准输出,因此,子进程的输出也就直接反应到父进程。...因此不存在上面提到的由于管道导致返回失效的情况。 在外边只需要获取函数的返回即可。 示例: #!...参考推荐: Shell函数返回 Linux 之 shell 比较运算符(推荐) Linux Shell学习简单小结(推荐) SHELL学习笔记----IF条件判断,判断条件

8.6K20
领券