tmp\ccFziEge.s:914: Error: registers may not be the same -- `strexb r3,r2,[r3]'tmp\ccFziEge.s:968: Error: registers may not be the same -- `strexh r3,r2,[r3]' /** * @brief STR Exclusive (8 bit) * * @param value value to store * @param *addr address p…
一.前言 在使用Cortex-M内核的MCU进行开发时,有时候会因为对内存错误访问等原因造成程序产生异常从而进入HardFaultHandler错误中断.如果程序结构比较复杂,尤其是运行了RTOS时可能短时间内不易定位异常产生的原因.Segger提供了一种分析CortexM内核芯片HardFault的方法,我在项目中使用后感觉该方法比较实用,本文用来记录该异常分析组件的使用. 二.组件添加 在SEGGER官网的Application Notes页面下提供了该组件的源码和文档 下载下来后将源文件添…
虽然这里的Arm Linux kernel前面加上了Android,但实际上还是和普遍Arm linux kernel启动的过程一样的,这里只是结合一下Android的Makefile,讲一下bootimage生成的一个过程.这篇文档主要描述bootimage的构造,以及kernel真正执行前的解压过程. 在了解这些之前我们首先需要了解几个名词,这些名词定义在/Documentation/arm/Porting里面,这里首先提到其中的几个,其余几个会在后面kernel的执行过程中讲述: 1)ZT…
http://blog.dornea.nu/2015/07/01/debugging-android-native-shared-libraries/ Since I haven't done this before, I thought I could share some experiences with you. All this began during some APK analysis which was heavily using JNIs. In my particular ca…
1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2然后编译装载26th_segmentfault并执行测试程序后,内核便打印了oops出来,如下图所示: 2.接下来,我们便来分析oops: Unable to handle kernel paging request at //无法处理内核页面请求的虚拟地址56000050 pgd = c38500…
出现Oops消息的大部分错误时因为对NULL指针取值或者因为用了其他不正确的指针值. Oops如何产生的解释如下:     由于处理器使用的地址几乎都是虚拟地址,这些地址通过一个被称为“页表”的结构被映射为物理地址.当引入一个非法指针的时候,分页机制无法将该地址映射到物理地址,此时处理器就会向操作系统发出一个“页面失效(page fault)”的信号.如果地址非法“换入(page in)”缺失页面:这时,如果处理器恰好处于超级用户模式,系统就会产生一个Oops. Oops的格式: 更加详细的解释…
1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2然后编译装载26th_segmentfault并执行测试程序后,内核便打印了oops出来,如下图所示: 2.接下来,我们便来分析oops: Unable to handle kernel paging request at //无法处理内核页面请求的虚拟地址56000050 pgd = c38500…
LDO Regulator High accuracy voltage regulator Vout = 2.5V * (1 + ( 5.6 / 6.8 ) ) = 4.55V Recently the author had to adapt  a standard circuit configuration  (which often uses an npn bipolar) so as to operate as a low-dropout (LDO) regulator. The circ…
Embedded-Programming-with-the-GNU-Toolchain Vijay Kumar B. vijaykumar@bravegnu.org 翻译整理:thammer github:https://github.com/tanghammer/Embedded-Programming-with-the-GNU-Toolchain.git 目录 1.介绍 2.建立ARM实验室 2.1.Qemu ARM 2.2.在Debian中安装Qemu 2.3.安装ARM GNU工具链 3…
内存对齐,memory alignment.为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐.原因在于,为了访问未对齐的内存,处理器需要作两次内存访问:然而,对齐的内存访问仅需要一次访问.内存对齐一般讲就是cpu access memory的效率(提高运行速度)和准确性(在一些条件下,如果没有对齐会导致数据不同步现象).依赖cpu,平台和编译器的不同.一些cpu要求较高(这句话说的不准确,但是确实依赖cpu的不同),而有些平台已经优化内存对齐问题,不同编译器的对齐模数不同.总…
ARM7TDMI(-S)指令集及汇编 ARM 处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制 较为简单,ARM7TDMI(-S)具有 32 位 ARM 指令集和 16 位 Thumb 指令集,ARM 指令集效率 高,但是代码密度低,而 Thumb 指令集具有更好的代码密度,却仍然保持 ARM 的大多数 性能上的优势,它是 ARM 指令集的子集.所有 ARM 指令都是可以有条件执行的,而 Thumb 指令仅有一条指令具备条件执行功能.ARM 程序和 Thumb 程序可相互…
环境:gcc (OpenWrt/Linaro GCC 4.8) 以如下的简单代码为例,说明gdb的使用. void func1(int a, int b) { int c; c = a + b; } int main(void) { func1(,); ; } 1. gdb 下一步的命令 a.执行下一行语句(语句级别) next(或n) 执行下一行语句,如果是函数调用则直接将函数执行完:相当于visual studio调试器中的"Step Over (单步跟踪)" step(或s) 执…
工具与环境: IDA7.0 JEB2.2.5 Nexus 5 Android 4.4 目录: 一:app简单分析与java层反编译 二: compatible.so反调试与反反调试 三: compatible.so注册jni函数分析 四: stub.so反调试与反反调试 五: stub.so注册jni函数分析 六: Assembly-CSharp.dll解密分析 七: libengine模块分析 八:总结 一:app简单分析与java层反编译 整体图: 1.最近在学习手游保护方面的技术,本文是学…
工具与环境 Xposed IDA 6.8 JEB 2.2.5 Fiddler2 010Editor NEXUS 5  Android 4.4 好久不玩逆向怕调试器生锈,拿出来磨磨! 高手莫要见笑,仅供小菜玩乐,有不对或不足的地方还请多多指教,不胜感激! 0x00: 程序大概情况分析 在我们拿到一个APP准备破解时一般得安装运行,程序运行后须要注册用户,随便注册一个用户登录,以下是APP须要购买vip才能使用的大概情况. 通过简单的查看可以知道是要通过网络支付后才能使用VIP,可以使用Fiddle…
__align __align 关键字指示编译器在 n 字节边界上对齐变量. __align 是一个存储类修饰符.它不影响函数的类型. 语法 __align(n) 其中: n 是对齐边界. 对于局部变量,n 值可为 1.2.4 或 8. 对于全局变量,n 可以具有最大为 2 的 0x80000000 次幂的任何值. __align 关键字紧靠变量名称前面放置. 用法 如果声明的变量的常规对齐边界小于 n,__align(n) 是非常有用的.八字节对齐方式可以显著提高 VFP 指令的性能. 可以将…
摘要:本文先简单介绍下Fault异常类型,向量表及其代码,异常处理C语言程序,然后详细分析下异常处理汇编函数实现代码. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十八 Fault异常处理>,作者:zhushy. Fault异常处理模块与OpenHarmony LiteOS-M内核芯片架构相关,提供对HardFault.MemManage.BusFault.UsageFault等各种故障异常处理.有关Cortex-M芯片相关的知识不在本文讨论,请自行参考<Cortex-M7 Devi…
关键词:VEC_ACCESS.coredump.LR.PC等. CK中存在一种VEC_ACCESS异常,可能原因是用户空间访问了内核空间,还有一种是内核访问不存在的总线地址. 下面简单构造VEC_ACCESS异常,包括变量指针异常和函数指针异常并分析. 1. 变量指针异常 #include <stdio.h> void main(void) { char *p = (char *)0xfffffffe; *p = ; } 执行后异常输出如下,并生成了coredump文件. [ 1601.325…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5083 题目意思:如果给出 instruction 就需要输出对应的 16-bit binary code,给出16-bit binary code 就需要输出对应的instruction. 由于不会截取的技巧,代码量非常可观 = =,所以说,一直很讨厌做模拟题!!! 留下这代码,纪念一个代码还是不够精简的自己!!!内存和时间还能接受,也比较容易理解,不过好多重复代码= =.以下这个代码可以忽略,改到…
安装yum install pciutils usbutils [root@server09 ~]# [root@server09 ~]# lspci00:00.0 Host bridge: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 DMI2 (rev 04)00:01.0 PCI bridge: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 1a…
摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链接我会一一附上. 注:由于本人采用Exynos4412开发板学习,所以本文大部分资料都是基于此处理器的 简介:对于整个Android系统的启动总的来说分为三个阶段: BootLoader引导即uBoot.bin linux内核启动即zImage Android系统启动即ramdisk.img与sys…
linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&…
Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash controller v350... FoundSpi(cs1) ID: 0xEF 0x40 0x18 0x00 0x00 0x00Spi(cs1): Block:64KB Chip:16MB Name:"W25Q128B"*** Warning - bad CRC, using defau…
http://www.canbushack.com/blog/index.php?title=determining-network-baud-rate Determining Network Baud Rate So you found a CAN BUS to reverse engineer, but you don't know it's buad rate. There are a couple to find it out. One. Go one-by-one through a…
Instruction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 343    Accepted Submission(s): 99 Problem Description Nowadays, Jim Green has produced a kind of computer called JG. In his computer,…
Instruction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 347    Accepted Submission(s): 101 Problem Description Nowadays, Jim Green has produced a kind of computer called JG. In his computer…
source-1: http://www.coredump.gr/articles/ios-anti-debugging-protections-part-1/ source-2: http://www.coredump.gr/articles/ios-anti-debugging-protections-part-2/ Many iOS applications use anti-debugging techniques to prevent malicious users from usin…
ref:http://www.coranac.com/tonc/text/asm.htm 23.1. Introduction Very broadly speaking, you can divide programming languages into 4 classes. At the lowest level is machine code: raw numbers that the CPU decodes into instructions to execute. One step u…
可以选择nand启动和nor启动,这两者之间的关系通过一个按键来选择 这个OM0有何玄机,在数据手册中有这么一段 位宽RAM启动了(当然,还得设置一些东西,下面就说), Nanaflash启动经历的过程相当于首先,2440自动从nand里面读取4K的代码,这4K代码将nand里面的数据拷贝到ram中,然后跳转到ram中执行代码,为什么是4K,因为 2440.s的启动代码需要包含几个文件 2440addr.inc 内部寄存器地址 Memcfg.inc 各个bank的内存配置数据 Option.in…
裸机程序应该是一个很好的选择 1. 不拷贝启动代码,因为我们用自己的启动代码 2.       建立工程目录分级,建立完成后如下所示 拷贝相应代码到对应目录中 Option中拷贝 Core中拷贝 建立新的main文件 将文件加入工程 路径中建立包含 还要为asm文件建立包含 修改2440init.s文件 行(可能你的不是) AREA    Init,CODE,READONLY修改为 AREA    RESET,CODE,READONLY 这样编译器就能找到入口点了 在上面这句下面加上一行 字节对…
内核版本:2.6.32.2(mini2440光盘源码) github地址:https://github.com/guanglun/mini2440_uboot_linux (for_len分支 https://github.com/guanglun/mini2440_uboot_linux/tree/for_learn) /* * linux/arch/arm/kernel/head.S * * Copyright (C) 1994-2002 Russell King * Copyright (…