自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 ELF函数重定位问题

一、背景gcc将代码编译为.o,ld将.o连接为.so或者可执行程序,可执行程序在使用PIC方式的.so时,都会遇到函数重定位的问题,本文对该问题进行分析。二、静态连接代码示例:x.c:#include void foo(){ printf("foo\n");}main.c:extern void foo(void);int main(void){

2017-11-28 17:46:26 5142

原创 ld.gold使用指南

一、背景gcc将源码编译为.o,然后linker将.o连接为.so或者可执行程序,一般使用的linker为ld.bfd、ld.gold、lld。ld.bfd在binutils软件包中,一般为默认的连接器;ld.gold也在binutils软件包中,速度比ld.bfd要快一些,但是内核以及其他一些项目不支持;lld是llvm的linker,据说比ld.gold更快,但是没怎么了解过,本文不讨

2017-11-16 17:14:09 14069 1

原创 android build system中product的继承(inherit-product),加载(import-products)和选择(lunch)

一、前言android源码中有很多product,进行配置时,会将所有的product的信息都读进来,每款product,可以包含如下信息## Functions for including product makefiles#_product_var_list := \ PRODUCT_NAME \ PRODUCT_MODEL \ PRODUCT_LO

2017-07-07 18:56:15 6153

原创 使用libhybris,glibc和bionic共存时的TLS冲突的问题

如无特殊说明,系统为linux,架构为x86 32bit,使用glibc,通过libhybris调用android bionic的驱动。一、什么是TLSTLS的全称是Thread Local Storage,是指进程中每一个线程都独有的变量,名字相同,但是读写互不影响。最常见的TLS之一就是errno,每一个线程都有自己的errno,保存着该线程的最近一次函数调用错误原因,别的线程

2016-12-29 20:03:25 3977 1

原创 qemu vl.c源码学习

阅读的代码是android emulator的,对应的qemu版本为1.5

2016-10-21 16:01:31 3726

原创 qemu参数解析

代码版本:qemu1.5static QemuOptsList *vm_config_groups[32]; qemu_add_opts(&qemu_drive_opts); qemu_add_opts(&qemu_chardev_opts); qemu_add_opts(&qemu_device_opts); qemu_add_opts(&qem

2016-10-21 13:19:36 11177

原创 qemu QOM(qemu object model)和设备模拟

本文所用qemu为1.5版本的,不是android emulator的。之前几篇文章介绍的都是android emulator中的设备模拟。一些是android自己加的platform bus上的虚拟设备;一些是qemu自己的虚拟设备,但是这部分代码很旧,没有使用到QOM模型。qemu1.1以及之后的qemu开始有了QOM模型。QOM很大一部分代码是为了实现了C++的继承,公用的东西放到O

2016-10-20 14:46:23 5668 2

原创 qemu QLIST数据结构

queue.h中是qemu使用到的一些基础的数据结构,比如QLIST,QSLIST,QSIMPLEQ,QTAILQ。本文主要介绍QLIST的数据结构,其它几种数据结构与之类似。QLIST用得比较多,类似于内核的双向链表,嵌入在其他结构体中使用。链表头#define QLIST_HEAD(name, type)

2016-10-20 10:54:14 1533

原创 android qemu-kvm i8259 中断控制器虚拟设备

ubuntu12.04下使用android emulator,启用kvm加速,模拟i8259中断控制器的代码比较旧,对应于qemu0.14或者之前的版本,这时还没有QOM(qemu object model)模型,虚拟设备的代码是比较简单的。玩虚拟设备之前,首先得搞明白真实设备怎么玩:http://www.360doc.com/content/09/1017/08/128139_739

2016-10-19 17:00:10 1338

原创 android qemu-kvm i8254 pit虚拟设备

ubuntu12.04下使用android emulator,启用kvm加速,模拟i8254定时器的代码比较旧,对应于qemu0.14或者之前的版本,这时还没有QOM(qemu object model)模型,虚拟设备的代码是比较简单的。玩虚拟设备之前,首先得搞明白真实设备怎么玩,有篇文档:http://blog.csdn.net/u013007900/article/details/

2016-10-19 11:41:05 1743

翻译 ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机

英文原文:https://lwn.net/Articles/658511/。本文在翻译的基础上加了一些自己的理解。qemu、virtual box、vmware、xen都是虚拟机,一般用户接触到的virtual box和vmware比较多,都是用来ubuntu中跑windows,或者windows中跑ubuntu的。qemu其实是鼎鼎大名的最基础的开源模拟器,可以纯软件模拟x86、

2016-10-13 16:01:39 3771 1

原创 android qemu-kvm内存管理和IO映射

为什么内存管理和IO映射要放一起呢?因为IO映射有memory map io(MMIO)和port map io(PMIO)两种,其中MMIO和内存管理有关的。MMIO和普通内存的访问的汇编指令是相同的;PMIO有自己的汇编指令。kvm如果执行到了PMIO的指令,那么退出状态是KVM_EXIT_IO。kvm怎么知道某段内存是MMIO,从而退出状态是KVM_EXIT_MMIO,而某段内存

2016-10-11 20:29:24 3640

原创 android emulator虚拟设备分析第五篇之pipe上的opengles

一、概述二、opengles —— pipe上的另一个service三、使用host gpu

2016-09-12 10:39:47 3841

原创 android emulator虚拟设备分析第四篇之framebuffer

一、概述二、驱动三、虚拟设备四、测试程序

2016-09-12 10:31:33 3778

原创 android emulator虚拟设备分析第三篇之pipe上的qemud service

一、概述以boot-properties为例,注意不需要看ANDROID-QEMUD.TXT,这个是和guest os中的qemud进行相关的,已废弃。启动emulator时,有一个参数-prop =,用于向guest os中添加属性。二、guest os中使用qemud service的方法实现代码是:http://androidxref.com/5.1.0_r1/x

2016-09-09 16:03:23 6860

原创 android emulator虚拟设备分析第二篇之pipe

一、概述qemu pipe也是一个虚拟设备,是一个通用的虚拟设备,用于提供guest os和emulator通信的功能,这样就不用写很多虚拟设备了。之前在guest os中有个qemud进程,也是干这个事的,使用虚拟设备ttyS1提供guest os和emulator通信的功能,速度比较慢,已被pipe所替代。基于通用的数据通信pipe,emulator提供了四种服务:Avai

2016-09-09 14:39:29 6174

原创 android emulator虚拟设备分析第一篇之battery

本文使用的android版本是5.1.0_r1,goldfish内核版本是3.4,android镜像是x86架构的。本文以battery为例,介绍虚拟设备的实现方法。为什么android emulator需要虚拟设备,简单来说就是android系统需要使用,但是host系统却没有,比如gps,bluetooth,battery,gsm等。另外,虚拟设备也提供了android emula

2016-09-08 20:35:56 6025

原创 unix domain socket进程凭据

进程凭据是指unix domain socket(AF_UNIX)发送方的pid,uid,gid信息。只能是AF_UNIX,不能是AF_INET的原因很简单,AF_INET可能都不在同一台机器上,pid,uid,gid没有意义。在以下的内容中,socket server作为接收方,socket client作为发送方,当然反过来也没有问题,不过本文以这个为例。有两种方法传递进程凭据:

2016-09-02 14:46:36 5853

原创 获取urllib2.urlopen失败时的错误页面

错误方法:import urllib2req = urllib2.Request('http://127.0.0.1/longerrorpage')try: response=urllib2.urlopen(req)except Exception,e: print e, response.read()HTTP Error 404: Not Found正确方法:

2016-08-12 21:21:16 7265

原创 如何查找android emulator内核的精确版本

android api22, arm imagesroot@generic:/ # cat /proc/versionLinux version 3.4.67-01422-gd3ffcc7-dirty (digit@tyrion.par.corp.google.com) (gcc version 4.8 (GCC) ) #1 PREEMPT Tue Sep 16 19:34:06 CEST

2016-06-23 11:14:08 2766

原创 静态库改为动态库后,可以影响到程序的执行结果

源于systemd的例子先看bus-error.h中的一个宏:#define BUS_ERROR_MAP_ELF_REGISTER \ __attribute__ ((__section__("BUS_ERROR_MAP"))) \ __att

2016-06-20 20:31:36 1230

原创 python os.path.isdir权限问题小坑一个

使用django搞一个东西玩,python manager.py runserver的时候,一切正常。将项目部署到apache之后,出现了问题。定位到问题所在: if not os.path.isdir(working_dir): return 为什么apache里面认为这个目录不存在了呢,查看isdir的定义:os.path.isdir(path)

2016-04-21 14:03:06 1978

原创 初始化python类的实例时,私有变量的值与上一个实例的相同,问题定位

#!/usr/bin/env python# -*- Coding=UTF-8 -*-class parser: def __init__(self, x=[]): print "early-init: id(x) = %s" % id(x) self.numbers = x print "post-init: id(self.numb

2016-04-21 14:00:51 825

原创 python BaseHTTPServer重启失败,提示端口被占用

有一个BaseHTTPServer,名为A,监听端口12346;它有10个子进程,通过os.system("nohup xxxx &")启动,也是BaseHTTPServer,名字分别为B0~B9,分别监听9000~9009。A将接收到的请求分发给B0~B9处理。当重启A时,会提示端口12346被占用,占用者是Bx。原因是A的socket fd被Bx所继承了,A关闭后,Bx取得监听权,端口

2016-04-21 13:58:27 1397 1

原创 为什么有时候读取文件,atime不更新

在linux中,使用stat foo.txt 命令可以看到文件foo.txt的三个时间:atime:access time,访问时间mtime:modify time,修改时间,文件内容有修改ctime:change time,create time,改变时间,文件的索引节点发生变化,具体的情况有:1、文件内容有修改;2、文件权限有修改;3、inode变了;4、重命名(重命名不会导致i

2016-04-11 17:02:59 2464

原创 shell重定向小记

对于int型的,使用open,write,read,close操作,对于FILE*型的使用fopen,fwrite,fread,fclose操作标准输入,int fd = 0,int fd = STDIN_FILENO,FILE *f = stdin,shell重定向标准输入使用"有种特殊的情况是这样的,不一定需要使用EOF,任意单词都可以,首尾相同:$ cat

2016-03-07 22:57:14 560

原创 编译开源软件时,prefix, sysroot, DESTDIR怎么整

开发环境ubuntu12.04,x86_64,gcc4.6arm板子环境armeabi,32bit,gcc5.3以shell里面经常用到的file程序为例子从ftp://ftp.astron.com/pub/file/上面下载源代码,因为我的ubuntu使用的是file5.09,不支持编译最新版本的file.5.25,所以我就下载file5.09了。

2016-03-04 14:15:02 7722 1

原创 ELF entry point和装载地址

为了研究ELF文件的装载到内存的哪里,以及从哪里开始运行程序,环境:ubuntu12.04 64位,gcc4.6.3。使用的源代码是:#include void hello(void){ exit(42);}int main(void){ return 24;}程序并不是从main函数开始执行的,gcc -o main main.c时,默

2016-02-25 14:00:19 11503

原创 arm平台函数传递参数,反汇编实例分析

测试前,需要了解下sysv的传参方式:1、输入参数通过r0-r3传递,多余的放入堆栈中;返回值放入r0,不够的话放入{r0,r1}或者{r0,r1,r2,r3},比如:int foo(int a, int b, int c, int d), 输入:r0 = a, r1 = b, r2 = c, r3 = d,返回:r0 = 类型为int的retvalueint *foo(char a,

2016-02-25 00:26:08 6824

原创 libffi浅析

最近调试了weston的一个coredump,对libffi有了一些了解,在此记录下,使用的是arm处理器,32位,soft float,libffi3.1,使用的abi是SYSV。libffi简介和使用示例:http://www.atmark-techno.com/~yashi/libffi.html,建议先看完,有所了解再继续看本文。大体意思就是libffi用于高级语言之间的相互调

2016-02-20 22:20:36 16374 1

原创 shell脚本test命令没用好,写了好几天的代码全被删了

在桌面上有一堆.cpp和elf文件以及shell脚本,我想写一个脚本删除所有的elf文件

2014-05-24 08:34:25 650

空空如也

空空如也

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

TA关注的人

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