自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (15)
  • 收藏
  • 关注

原创 如何在拷贝文件时保留SELinux上下文

如果要在拷贝一个文件的时候保留其SELinux的上下文,有一个非常简单的方法,直接在拷贝的时候可以加上--preserve=context参数就可以了:cp --preserve=context <Source> <Dest>不过这样做有一个要求,就是当前的Linux内核必须已经激活了对SELinux的支持。如果很不幸没有打开的话,cp命令会报错:当然了,把当前Linux内核上对SELinux的支持打开就可以解决问题了。不过不是所有场景都可以打开对SELinux的支

2021-01-26 19:41:40 6544 1

原创 ARM架构下常用GNU汇编程序伪指令介绍(Assembler Directive)

所有的GNU汇编程序伪指令都以句号(.)打头,后面接上伪指令的名字,通常是由小写字母组成。.section.subsection.pushsection.popsection.previous.ascii语法: .ascii "string"....ascii 表示零个或多个(用逗号隔开)字符串,并把每个字符串(结尾不自动加“\0”字符)中的字符放在连续的地址单元。还有一个与.ascii 类似的.asciz,z ...

2020-08-07 17:08:06 16687

原创 Linux内核同步原语之信号量(Semaphore)

static inline int __sched __down_common(struct semaphore *sem, long state, long timeout){ struct semaphore_waiter waiter; list_add_tail(&waiter.list, &sem->wait_list); waiter.task = current; waiter.up = false; for (;;) { if...

2020-07-30 20:38:34 8935 1

原创 Linux同步原语之顺序锁(Sequence Lock)

(代码位于arch/arm64/include/asm/atomic.h中):#define ATOMIC_OP(op) \static inline void arch_##op(int i, atomic_t *v) \{ \ __lse_ll_sc_body(op, i, v); \}ATOMIC_OP(atomic_andnot)ATOMIC_OP(atomic_or)ATOMIC_OP(atomic_xor)ATOM...

2020-07-29 14:54:19 6069

原创 ARMv8.1平台下新添加原子操作指令

Large System Extensions (LSE)New atomic instructions to support scalable performance: Instructions for full-word, half-word, and byte operations are available. Most of the following have optional load-acquire and/or store-release semantics. Compare an

2020-07-28 17:25:40 14991 3

原创 Linux内核同步原语之原子操作(Atomic)

原子操作

2020-07-28 08:50:24 18613

原创 Arm64内存屏障

smp_load_acquire()forces a read of a location in memory (in much the same way asACCESS_ONCE()), but it ensures that the read happens before any subsequent reads or writes. smp_store_release()writes a value back to memory, ensuring that the write h...

2020-07-22 09:05:13 13450 2

原创 ARM64平台下WFE和SEV相关指令解析

WFEWait For Event.If the Event Register is not set,WFEsuspends execution until one of the following events occurs:An IRQ interrupt, unless masked by the CPSR I-bit. An FIQ interrupt, unless masked by the CPSR F-bit. An Imprecise Data abort, unles..

2020-07-20 14:24:34 16608 1

原创 Linux内核中的READ_ONCE和WRITE_ONCE宏

#define __READ_ONCE(x, check) \({ \ union { typeof(x) __val; char __c[1]; } __u; \ if (check) \ __read_once_size(&(x), __u.__c, sizeof(x)); \ else \ __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ smp...

2020-07-16 16:26:44 17335 7

原创 Linux内核同步原语之自旋锁(Spin Lock)

在Linux内核代码中,大量使用了自旋锁。自旋锁不会让

2020-07-15 14:35:44 9954 1

原创 内存屏障简介

为了限制性能下降,CPU被设计成在从内存中获取数据的同时,可以执行其他指令和内存引用。这明显会导致指令和内存引用乱序执行,并导致严重的混乱仅仅在两个CPU之间或者CPU与设备之间存在需要交互的可能性时,才需要内存屏障。任何代码只要能够保证没有这样的交互,这样代码就不必使用内存屏障。但是,不使用内存屏障不代表不使用同步机制。重排序问题无时无刻不在发生,源自三种场景:编译器编译时的优化 处理器执行时的乱序优化 缓存同步顺序(导致可见性问题)...

2020-06-30 18:01:30 16306 6

原创 Linux时间子系统之Tick广播层(Tick Broadcast)

test reserve

2020-06-18 15:20:39 9733 4

原创 Linux时间子系统之Tick模拟层(Tick Sched)

在分析高分辨率定时器的时候曾经提到过,一旦切换到高精度模式后,struct tick_sched { struct hrtimer sched_timer; unsigned long check_clocks; enum tick_nohz_mode nohz_mode; unsigned int inidle : 1; unsigned int tick_stopped : 1; unsigned int idle_active : 1; unsigned

2020-06-05 16:28:08 12208

原创 Linux时间子系统之高分辨率定时器层(HR Timer)

在前面介绍定时器层的文章中我们已经知道了在Linux内核中已经存在了一个管理定时器的通用框架。不过它也有很多不足,最大的问题是其精度不是很高。哪怕底层的定时事件设备精度再高,定时器层的分辨率只能达到Tick级别,按照内核配置选项的不同,在100Hz到1000Hz之间。但是,原有的定时器层由于实现教早,应用广泛,如果完全替换掉会引入大量代码改动。因此,Linux内核又独立设计出了一个叫高精度定时器层(High Resolution Timer)的框架,可以为我们提供纳秒级的定时精度,以满足对精确时间有迫切需求

2020-05-28 20:24:22 11460

原创 Linux时间子系统之时间维护层(Time Keeper)

struct timekeeper { struct tk_read_base tkr_mono; struct tk_read_base tkr_raw; u64 xtime_sec; unsigned long ktime_sec; struct timespec64 wall_to_monotonic; ktime_t offs_real; ktime_t of...

2020-05-19 15:14:56 11118

原创 Linux时间子系统之时间的表示

为了实现以上功能,Linux 实现了多种与时间相关但用于不同目的的数据结构。1)jiffies和jiffies_64内核用jiffies_64全局变量记录系统自启动以来经过了多少次Tick。它的声明如下(代码位于kernel/time/timer.c中):__visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;EXPORT_SYMBOL(jiffies_64);可以看出来jiffies_64被定义成了6

2020-05-11 14:56:46 7925 1

原创 Linux时间子系统之定时器层(Timer)

定时器层是基于Tick层之上的,精度比较低,struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struct hlist_node entry; unsigned long expires; void (...

2020-05-08 16:13:33 11646 5

原创 Linux时间子系统之时钟源层(Clock Source)

struct clocksource { u64 (*read)(struct clocksource *cs); u64 mask; u32 mult; u32 shift; u64 max_idle_ns; u32 maxadj;#ifdef CONFIG_ARCH_CLOCKSOURCE_DATA struct arch_clocksource_data archda...

2020-04-26 17:58:55 13059

原创 Linux时间子系统之Tick层

所谓Tick设备,也称作滴答设备,就Tick设备在Linux时间子系统中用tick_device结构体表示(代码位于kernel/time/tick-sched.h中):struct tick_device { struct clock_event_device *evtdev; enum tick_device_mode mode;};可以看出来,它仅仅是对定时事件设备(Cl...

2020-04-23 20:08:58 10225

原创 Linux时间子系统之定时事件层(Clock Events)

几乎所有的计算机系统中都会存在一个所谓的定时设备,经过设置后,在某个固定的时间或某个相对的时间间隔后,达到触发条件,发送中断给处理器。系统中的每一种实际的定时事件设备都由一个叫做clock_event_device的结构体变量表示(代码位于include/linux/clockchips.h):struct clock_event_device { void (*event_han...

2020-04-21 17:51:18 10116

原创 Arm通用计时器简介

所有使用Arm处理器的系统中都会包含一个标准化的通用计时器(Generic Timer)框架。这个通用计时器系统提供了一个系统计数器(System Counter)和一组计时器(Timer)。其结构如下图:可以看到,系统计数器是全局唯一的,并且全局共享。而且这个系统计数器还是一直存在的,哪怕系统处于待机状态,所有内核都被关闭了,它仍然可以工作。每一个Arm核都配备一组专门为自己服务的计时器...

2020-04-16 18:03:59 14032

原创 链接脚本解析

每一个链接器都需要链接脚本来将不同的对象文件链接成最终的可执行文件。如果不特别指定的话,链接器程序本身自带了一个默认的链接脚本,可以通过一下命令获得这个默认的脚本:ld --verbose一般情况来说,默认的链接脚本就够用了,大多数人也不会自己专门编写链接脚本。不过,如果你是编写内核或者固件程序的话,默认的链接脚本有时候就会显得不够用了,需要自己编写。可以用-T参数来告知连接器,使

2020-04-08 15:18:38 1617

原创 在Ubuntu18.04下编译树莓派4B的Arm64内核

make modules是编译模块,很多驱动还有功能在选的时候选成M的都是modules,不过直接make,不加任何参数,就是make all,包含make modules。不用额外加此make,但是在安装的时候make install只是安装bzimage,Systemmap。没有把modules安装好,还要额外的make modules_install,把模块放到/lib/modules文件夹...

2020-04-07 17:02:54 3477 1

原创 Arm64下Linux内核Image头的格式

Linux对于Arm64架构,其编译出来的内核默认是不支持压缩的;而对于Arm32版本来说,默认支持内核解压的操作(代码位于arch/arm/boot/compressed目录下,可是arm64目录下没有对应的代码)。如果实在想压缩内核,也可以在bootloader里面解压好后放到内存中指定的位置。struct arm64_image_header { __le32 code0; __l...

2020-04-03 11:44:10 3965

原创 在Ubuntu18.04下编译OpenJFX8(包含webkit)

1)下载源代码第一步当然是下载源代码,需要安装mercurial,在Ubuntu上可以直接使用apt安装:sudo apt install mercurial然后可以使用hg命令下载到最新的openjfx8的代码:hg clone http://hg.openjdk.java.net/openjfx/8u-dev/rt2)配置编译环境首先,编译OpenJFX8必须要依赖...

2019-12-04 10:15:15 2317

原创 如何向AOSP代码中添加编译好的可执行文件到ROM中

工作当中需要向AOSP的代码中添加一个可执行文件,从而可以打包进ROM里面,方便研究使用。研究一番后,发现其实步骤很简单,一共分成两部:1)将要放进ROM中的可执行文件放到AOSP的prebuilts目录下例如,如果我想将ida的调试服务器android_server文件放到ROM里面,那么我可以在prebuilts目录下建立一个ida目录,然后将android_server拷贝进去。...

2019-11-05 15:26:59 1645 2

原创 如何在Linux系统上简单的限制某个网络接口的速度

一般云端服务器都是建立在Linux操作系统之上的。在部署的时候,有时候会碰到要对某个网口进行限速的情况。当然,想要在Linux上限制速度有很多种选择,比如tc。不过这些方法虽然很强大,要真正很好的掌握还是要学习不少知识的。如果只是想简单的对某一个网络接口限制一下上行或下行速度这种简单的要求,完全没必要去用那些。WonderShaper就非常简单,只需要一个命令就行了。在使用之前首先得安装。

2017-06-01 17:09:50 5830

原创 如何向AOSP中添加根证书

工作中经常需要修改AOSP的代码,定制特定的ROM方便做应用程序分析。但是,由于需要抓取HTTPS的包进行分析,所以,每次刷机后都要倒一个根证书到手机中,非常麻烦。那能不能直接将这个根证书添加到AOSP的代码中,直接包含在编译出的ROM中呢?答案当然是肯定的。其实,AOSP包含的所有根证书都位于“libcore/luni/src/main/files/cacerts”或者是“system/

2017-04-24 16:17:03 3044

原创 Ubuntu系统下如何导入根证书

这几天在摆弄Ubuntu系统,想要抓包就装了个Charles,但本机的HTTPS包是抓不到的,因为没有把Charles的根证书导入CA,而且Charles自带的导证书的功能在Ubuntu下好像不工作。没办法,只能自己手动添加了。搞了半天发现Ubuntu系统中都没有一个好用的GUI工具可以方便的添加根证书。只有通过命令行进行操作,在此记录一下。首先,将要导入的证书拷贝到一个特定目录下:s

2017-04-11 10:45:25 19222

原创 如何查看Android设备上的分区信息

cat /proc/partitionsmountdfls -al /dev/block/platform/msm_sdcc.1/by-name

2016-03-24 14:51:11 46064 6

原创 TrustZone中TrustApp格式解析

ARM早在ARM v6的时候就引入了一个叫做Trust Zone的概念。其基本原理是,相对于普通操作系统的执行环境来说,又引入了一个独立的执行环境,彼此基本上不相关。即使普通操作系统和应用的执行环境被攻破,也不能触及到这个所谓的安全执行环境,这是通过硬件来保证的。Trust Zone中也会运行一个非常轻量级的操作系统,在这个操作系统中运行的程序,叫做Trust App,都是由硬件厂商特别编写的

2016-03-21 15:42:57 4217

原创 如何从oat文件中提取内嵌的dex文件

在Android的ART虚拟机使用的oat文件中,其实是包含了一个完整的dex文件的。可以通过解析oat文件将dex文件的偏移和长度都检索到,然后再将这段数据单独读取出来存成dex文件就可以了。当然,自己可以动手写一个提取的程序,逻辑不复杂。但是,程序员都是很懒的,如果已经有别人免费提供了这类工具,就绝不会自己动手写。经过一番查找,发现了一个比较好用的工具,叫做dextra(http:

2016-02-17 10:53:53 5918 1

原创 Java语言注解(Annotation)简介

Java语言默认自带的注释:1)@Override代表这个函数必须要覆盖2)@SuppressWarnings3)@Deprecated注释说到底,只是给相应的类或方法或变量等特定的域带上相应的属性,但并没有实际做事情。对应的工具会读取这些属性,并做出相应的操作。

2016-02-02 17:11:20 1613

原创 Mac平台下使用nm命令查看文件的符号表

Mac平台下使用nm命令查看文件的符号表

2016-01-29 17:40:38 27637

原创 如何在Mac电脑上创建一个签名身份(Signing Identity)

如何在Mac电脑上创建一个身份(Identity)

2016-01-04 15:55:06 8629

原创 如何解iOS系统中系统库的dyld缓存

这几天想反汇编看一下iOS 9系统中安全框架的实现代码,于是找到系统中的“/System/Library/Frameworks/Security.framework/”目录,发现里面除了一些配置文件和本地化字符串文件,其它什么都没有,最重要的“Security”二进制文件更是没有踪影。查询了许多资料之后才发现,原来从iOS 3.1开始,为了提高系统的性能,所有的系统库文件都被打包保存到了一个很

2015-12-28 11:13:27 7315

原创 Unix域套接字(Unix Domain Socket)介绍

在Linux系统中,有很多进程间通信方式,套接字(Socket)就是其中的一种。但传统的套接字的用法都是基于TCP/IP协议栈的,需要指定IP地址。如果不同主机上的两个进程进行通信,当然这样做没什么问题。但是,如果只需要在一台机器上的两个不同进程间通信,还要用到IP地址就有点大材小用了。其实很多人并不一定知道,对于套接字来说,还存在一种叫做Unix域套接字的类别,专门用来解决这个问题。其API

2015-12-16 15:48:40 33663 2

原创 dex2oat程序参数总结

Android从4.4开始正式引入了ART虚拟机,并从5.0开始取代了Dalvik成为默认的虚拟机。ART与Dalvik最大的不同就是,在程序安装的时候就将其编译成本地指令集(即所谓的Ahead Of Time,AOT),而不像Dalvik是在运行的时候对经常掉用的函数动态编译的(即所谓的Just In Time,JIT)。但是最终编译的动作,还是通过程序dex2oat来执行的。这个程序本身可带非

2015-12-11 13:47:58 12298

原创 Android-X86集成houdini所做的修改

Android-X86其实是基于Android的源码编译出来的一个X86版本,可以运行在X86系列处理器上。对于应用程序来说,如果全是使用Java语言编写的话,不会有什么问题。就算用到了JNI函数,如果编译出来了一个X86的动态库,并且包含在apk文件中,也不会有问题。要命就要命在有许多应用程序内部,只有ARM指令集的动态库,就不能在Android-X86平台下运行了,并且这类应用还不在少数。为了

2015-12-07 16:05:43 20877 5

原创 Linux下如何指定某一类型程序用特定程序打开(通过binfmt_misc)

在Windows平台上,可以绑定拥有特定扩展名的文件,使用特定的程序打开。比如,PDF文件就使用Acrobat Reader打开。这样做确实极大的方便了用户的使用体验。其实,在Linux平台上,也提供了类似的功能,甚至从某种意义上来说更加的强大。Linux的内核从2.6开始就引入了一个叫做Miscellaneous Binary Format(binfmt_misc)的机制,可以通过要打开文件

2015-11-27 14:23:49 9966 1

Android Security Internals

There are nearly a billion Android devices in use today, and every one is a potential security breach. Love it or hate it, the security of Android-based devices is of major concern to users and developers alike. In Android Security Internals, author Nikolay Elenkov delves into Android components and subsystems to give you a very deep and complete understanding of the security internals of Android devices. Elenkov’s coverage of security topics ranges from package and user management to the details of cryptographic providers and credential storage. Android Security Internals is destined to be one book that all security-minded Android developers will have to have on their bookshelves.

2016-03-07

MAC平台下iOS分析工具jtool

功能非常强大的MAC平台下iOS分析工具jtool。

2015-12-28

Google出品的dex转jar的工具enjarify

2015-10-20从github打包下载的enjarify源码。

2015-10-20

Java中瘦锁的应用

PPT中介绍了在Java语言中加入乐观锁从而提高性能的一种方法。 Android的Dalvik和ART虚拟机中的锁都是采用了这种方式。

2015-07-29

Android应用程序潜在漏洞

对经常出现的,由于开发者不小心或对系统不太熟悉,而引入的安全问题,进行了详细的描述。

2015-06-08

适用于Android平台上的Valgrind

预先编译好的Android平台Valgrind工具,亲测可用。

2015-05-27

Android平台Valgrind

预先编译好的Android平台Valgrind工具。

2015-05-22

Exception Handling ABI for the ARM Architecture

ARM异常处理实现的标准文档,可以帮助了解具体的异常处理实现机制。

2015-05-07

Android编码安全规范

本文档介绍了在Android编码中可能存在的一些安全陷阱,并为此给出了推荐的代码返利。

2015-03-30

Android5.0可用tcpdump

这个tcpdump版本是可以在Android 5.0设备上使用的。

2014-11-27

Symbian OS Explained - Effective C++ Programming for Smartphones

Symbian OS Explained - Effective C++ Programming for Smartphones

2008-05-23

Cross-site Scripting

Cross-site Scripting

2008-05-23

Practical Programming in Tcl and Tk

Practical Programming in Tcl and Tk

2008-05-23

COM 技术内幕—微软组件对象模型

COM 技术内幕—微软组件对象模型

2008-05-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除