自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android System.loadLibrary深度剖析

Android System.loadLibrary深度剖析缘起:从Android 6.0 & AGP 3.6.0开始,系统支持直接加载apk中未压缩的so,也就是说在App安装时,系统不再将apk中的so解压,而在加载so时,直接从apk中加载。具体见:https://developer.android.com/guide/topics/manifest/application-element#extractNativeLibs然而,熟悉glibc开发的程序员知道,dlopen系列函数不支

2022-01-04 09:01:25 5753 1

原创 OpenJDK System.loadLibrary源码剖析

OpenJDK System.loadLibrary源码剖析System.loadLibrary是用于通知JVM加载Native so的,so加载成功后,在/proc/self/maps中可以看到so已经被加载到内存中。熟悉系统层开发同学可以猜到,这基本等同于dlopen/LoadLibrary调用,接下来我们通过OpenJDK源码来分析一下。下载OpenJDK源码:https://github.com/openjdk/jdktag:jdk8-b1201. System.java搜索loadLi

2021-12-28 15:40:18 596

原创 源码剖析Android ANR产生机制

源码剖析Android ANR产生机制如下采用Android源码的android-11.0.0_r48分支进行,不同版本源码差异巨大。ANR的捕获起点为ProcessRecord.appNotResponding方法,本文由appNotResponding逆推ANR的产生机制。源码:frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java。通过源码搜索appNotResponding,发现系统提供了AnrH

2021-11-10 16:07:13 4493 2

原创 Windows 11运行Android应用

x86 Windows 11运行Android应用:硬件层通过将arm指令集翻译成x86指令集,也就是Intel bridge technology。软件层我猜基于微软自己的WSL2,本质上是一个基于Hyper-V的虚拟机。

2021-06-25 09:56:16 1310 1

原创 Linux so剖析

Linux so剖析此处so指Shared Object,即动态链接库,本文将从so文件格式开始讲述,在了解完so文件格式的必要知识后,接下来最简概述so的生成,即编译器的静态链接,然后便是so的加载与动态链接,以及动态链接库的依赖动态链接库。so的文件格式为ELF(Executable and Linkable Format),ELF由Unix System Laboratories开发,已经成为标准。常见的动态链接库(so), 静态库(a), 编译目标文件(o), 可执行文件, CoreDump文件

2021-05-06 09:26:14 2309 1

原创 Qualcomm ARM CPU与Intel x86 CPU性能比较

Qualcomm ARM CPU与Intel x86 CPU性能比较 随着移动互联网时代的到来,Qualcomm(高通)、Texas Instruments(德州仪器)等基于ARM架构的CPU受到越来越多人的关注,而昔日王者的Intel x86架构由于功耗

2011-10-08 21:14:56 10600 4

原创 在Ubuntu10.04中建立ARM交叉编译环境

在Ubuntu10.04中建立ARM交叉编译环境 在Linux中建立整个ARM交叉编译环境的整体过程为:1、 下载源文件2、 在Linux中建立编译目录并设置环境变量3、 建立内核头文件4、 建立二进制工具(binutils)5、

2011-09-30 11:15:43 10676 4

原创 在Windows中编译Nginx源码

在Windows中编译Nginx源码 Nginx是一个高性能的HTTP和反向代理服务器。其是开源的,并且是跨平台的,通常Nginx运行在Linux平台下,也可运行于Windows、FreeBSD等,本文主要讲解在Windows系统中编译Nginx源码。注意:Ngi

2011-08-29 19:45:08 18510 2

原创 Nginx filter 模块解析

Nginx filter 模块解析我们知道nginx很多功能都是通过filter模块来实现的,如:替换content的sub module、content压缩的gzip module等。接下去我们看看nginx是怎样处理filter模块的。Nginx filter module所

2011-07-29 15:55:31 9246 1

原创 Nginx 内存池(pool)分析

Nginx 内存池(pool)分析Nginx 内存池管理的源码在src/core/ngx_palloc.h、src/core/ngx_palloc.c 两个文件中。先将我整理的注释等内容贴上,方便下面分析:ngx_create_pool:创建poolngx_destory_poo

2011-07-28 12:08:04 4923 2

原创 关于 LoadLibrary 的疑问

<br />关于LoadLibrary 的疑问<br /> <br />Win32 API 中 LoadLibrary 函数的功能是加载某个库文件(通常是 dll 文件),然后返回 HMODULE 句柄,可以使用两个这个句柄来调用dll中的导出函数,一切似乎就这么简单。下面我们考虑深入一点,提出几个问题。<br />使用 Process Explorer 可以看到进程所加载的 dll,当然也可以看到使用 LoadLibrary 函数所加载进来的 dll。一个dll被某个进程加载后,这个dll就表现为被占用了

2011-04-25 20:09:00 8212 2

原创 调试 Windows API

<br />调试Windows API<br /> <br />真正写过代码的同学没有哪个没有调试过自己的代码吧。<br />在 Visual Studio 中,如果我们想看一个 C++ Run Time 库函数(如:strcpy)的实现,在调试当前行按F11,便可以进入函数内部,来单步执行,调试了。但如果碰到Windows API 函数,如:ShellExecute,F11 不能直接进入调试,怎么办呢?我们能进入 ShellExecute 函数内部调试吗?当然能,但你看完本篇文章之后,便拥有了这个能力。<

2011-04-22 22:18:00 3412 1

原创 谨慎对待对话框模板

对话框模板是写在 rc 文件中的用于描述 Windows 对话框的脚本,Visual Studio 提供了方便的对话框编辑器,我们也可以通过修改 rc 文件的脚本来改变对话框的大小、样式等。

2011-02-09 20:59:00 1908

原创 发现Process Explorer 一个小Bug

说起 Process Explorer,没有哪个程序员没用过的吧。最近偶然发现Process Explorer一个小Bug,在此分享一下。

2010-12-21 20:49:00 3124

原创 注册表 Run、RunOnce 键值解析

注册表Run、RunOnce 键值解析绝大多数使用过Windows 操作系统的用户都不会对注册表的 Run、RunOnce 键值感到陌生,但你真的了解所有这些键值的细节吗?让我们具体说来。本文在Win2000,WinXp、Vista、Win7系统中讲解Run、RunOnce注册表键值,涉及如下四个:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunHKEY_CURRENT_USER/Software/Microsoft/Wi

2010-12-14 20:36:00 26287 3

原创 手机屏幕解析

目前市面上主流手机屏幕有:TFT、OLED 、AMOLED、SUPER AMOLED、IPS 。下面我们来一一讲述。

2010-08-21 15:18:00 2807

原创 C++ 智能指针详解

由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::weak_pt

2010-07-05 20:19:00 158704 32

转载 最快速度找到内存泄漏

最快速度找到内存泄漏许式伟2006年11月某日内存管理是C++程序员的痛。我的《内存管理变革》系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担。由于工作忙的缘故,这个系列目前未完,暂停。这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏。1、确认是否存在内存泄漏我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏。例如:class CMyApp : public CWinApp{public:   BOOL InitApplica

2010-07-02 21:04:00 3721 3

原创 在 Win7 下使用 VS2005 编译 Chrome

Chrome 是浏览器的新秀,无论从启动速度、Js 执行速度、更新速度来说,都是最佳的。最主要的是,Chrome 还是开源的,拿来研究一定不错。本文所编译的 Chrome 版本为 Revision:49506(2010.06.11),Chrome 在 Google 内部的开发名是 Chromium,如下都是用开发名 Chromium。

2010-06-15 16:17:00 10093 2

转载 去掉Visual Studio 2005的IntelliSense功能

VS的IntelliSense功能类似其他IDE中的auto-completion,也就是能够自动补全,不过和VI和Emacs中的auto-completion不一样,IntelliSense比较Intelligent,根据编程语言的语法来谈出备选填。

2010-06-15 16:12:00 5020

原创 使用 C++ 处理 JSON 数据交换格式

JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。 本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C++ 语言来处理 JSON。关于 JSON 更具体的信息,可参见 JSON 官网:http://www.json.org。

2010-06-04 20:46:00 81447 24

原创 在 Windows 中编译 boost1.42.0

 在 Windows 中编译 boost1.42.0     前提条件:在 Windows 中编译 boost,直接使用 Visual Studio 编译器是最简单的,所以请务必先安装 Visual Studio,本文中使用的编译器为 Visual Studio 2005。1、下载并解压 boost    Boost 的下载地址为:http://sourcefo

2010-05-05 19:34:00 2922

原创 Windows 中SQLite3 使用(2) -- 基本导出函数

Windows 中SQLite3 使用(2) –- 基本导出函数 一、概述SQLite3 的最常使用基本导出函数有五个:sqlite3_open:打开(链接到) SQLite3 数据库。sqlite3_close:关闭 SQLite3 数据库连接。sqlite3_exec:对于已打开的数据库连接,执行 SQL 语句。sqlite3_get_table:对于已打开的数据库

2010-04-06 10:23:00 4489 1

原创 Windows 中 SQLite3 使用(1) -- 配置

Windows 中 SQLite3 使用(1) –- 配置 一、SQLite3 简介    SQLite3 是一个开源免费的嵌入式关系数据库,它在 2000 年由 D. Richard Hipp 发布,它不像大型数据库管理系统,占用系统大量资源。SQLite3 是用 C 语言编写的开源数据库,可移植性好,容易使用、轻型、高效、可靠,主要用在嵌入式系统中,由于其便利性,目前很多桌面程序也

2010-04-06 10:22:00 12846 1

原创 解析VC++ Name Mangling 机制

解析VC++ Name Mangling 机制 摘要在C++中,Name Mangling 是为了支持重载而加入的一项技术,目前C++ Name Mangling 并没有统一的标准,也没有较完整的中文文档化资料,所以本篇文章在VS2005环境中,解析C++ Name Mangling 的技术细节,以及怎样将VC Name Mangling后的名称还原为可读的形式。 目录l 

2010-03-30 11:11:00 7939 4

原创 Windows 修复网络解析

Windows 修复网络解析在 WinXp 中,当我们无法访问网络时,一个最常用、简单的解决办法就是打开“本地连接”,然后点击支持Tab选项卡中的“修复”按钮。我们都知道这样操作,但如果要编码实现,就必须知道点击修复按钮后,系统究竟干了些什么。当我们点击按钮后,系统做的一些操作,列举如下:ipconfig -release      // 释放 IP 地址ipconfig -r

2010-03-24 10:34:00 2508

原创 SendMessage、PostMessage原理

SendMessage、PostMessage原理本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:1、SendMessage、PostMessage的运行机制。2、SendMessage、PostMessage的运行内幕。3、SendMessage、PostMessage的内部实

2010-03-16 09:34:00 57179 19

原创 让Visual Studio载入Symbol(pdb)文件

让Visual Studio载入Symbol(pdb)文件 在VC编译工程的编译连接阶段,会产生Symbol文件,也就是常说的 pdb 文件。pdb 的全称为 program database,在 MSDN 中的解释为,pdb 文件是一个在编译和链接阶段产生的,包含了类型和调试符号信息的二进制文件。pdb 文件中包含了各个函数的符号表,也是进行 WinDbg 调试必不可少的文件。既然

2010-03-16 09:26:00 29025 1

转载 BIOS 响声代码

BIOS 响声代码当电脑出现毛病不能启动时,机器的带电自检程序POST会从PC喇叭发出一些提示信息,让您找出发生故障的部件。因而,掌握电脑所发出声音的含义对于解决各种问题是很有帮助的,下面就按照不同公司的BIOS简单介绍一下响铃代码的含义。 Award BIOS   1短                         系统正常启动   2短              

2010-03-10 19:39:00 1604

原创 C/C++函数调用约定

C/C++函数调用约定关于 C/C++ 函数调用约定,大多数时候并不会影响程序逻辑,但遇到跨语言编程时,了解一下还是有好处的。VC 中默认调用是 __cdecl 方式,Windows API 使用 __stdcall 调用方式,在 DLL 导出函数中,为了跟 Windows API 保持一致,建议使用 __stdcall 方式。调用约定跟堆栈清除密切相关。如果写一个汇编函数,给 C

2010-03-10 09:46:00 19219 6

原创 Vista、Win7 网络共享访问慢的解决方案

        在 Vista、Win7 中,网络共享访问时,打开一个共享文件夹,有时地址栏中都会出现进度条,打开速度超级慢。慢的主要原因是由于Vista、Win7 中多了一个叫做“远程拆分压缩(Remote Differential Compression)”的的机制,这个机制能够减少网络文件传输数据量,提高文件下载速度,但会大大降低共享访问的速度。         何为“远程拆分压缩(

2010-03-02 16:10:00 14341 1

翻译 理解在保护模式下Internet Explorer的工作方式

本文翻译于MSDN文章,名称为:Understanding and Working in Protected Mode Internet Explorer。Url:http://msdn.microsoft.com/zh-cn/library/bb250462(en-us,VS.85).aspx译序:看英文的文章老是觉得隔一层纱,此次下定决定翻译一篇英文文档,以提升自己英文阅读能力,也方便

2010-03-01 20:28:00 9816

原创 Windows 中 Cookie、Internet Temp Files、History、Temp Directory 具体路径(2000、Xp、Vista、Win7)

要查看这类型的文件,需要设置显示隐藏文件,具体设置如下:打开控制面板(经典视图) -> 文件夹选项 -> 查看 -> 高级设置,去掉勾选“隐藏受保护的操作系统文件(推荐)”,将“隐藏文件和文件夹”更换为选择“显示所有文件和文件夹”,确定离开即可。 下文中的“[user name]”为当前登陆的用户名,通常如:Administrator。2000、Xp:2000、Xp是我们熟悉的系统,所

2010-02-24 09:12:00 7738

原创 Assembly(汇编)、C、C++、Java、C#访谈

会长:访谈时间还差5分钟,下面我们先看看各大语言们在讨论干些什么吧。Assembly:我是计算机程序设计界的老大,用我写的程序运行效率最高,所以我觉得全世界应该都用我这门语言。C:首先我极力反对这句话,Assembly运行效率虽高,但开发效率极端底下,而且特定于CPU指令集,移植等异常困难。看看由我写的程序吧,一行可以顶你Assembly十多行,而且源代码可移植,多方便啊。C++:Asse

2009-09-23 17:51:00 2571 1

原创 C++关键字static

      本文主要讲解C++ static关键字使用时的一些技巧,需要避免的用法。    一、基本语法            static的变量存在于全局静态数据区,系统自动初始化为0。在整个程序运行过程中只初始化一次,只有一个内存地址。具体还有一些细节,想必大家已经在其他书籍上看过了,这里不再多提。     二、使用技巧            1、在不增加其他变量的情况

2009-06-19 16:39:00 1283

原创 Linux下建立安装 smb,并进行配置

    今天在Linux(Fedora5,其他版本应该大同小异)下建立smb服务终于成功了,下面说说过程吧,作为备忘。    首先在shell里面查询自己是否安装了smb。    [root@localhost ~]# prm -qa samba | grep samba    samba-3.0.21b-2    // 如果有这行输出,则表示安装了 smb,否则需要安装①  

2009-05-26 10:31:00 23378 4

原创 深入解析SendMessage、PostMessage

    本文将使用C++语言,在MFC框架的配合下给出PostMessage、SendMessage等的使用方式与使用不当造成的后果(讨论均针对自定义的消息进行)。如有什么错误,欢迎指正。 写过Windows程序的同学都知道PostMessage、SendMessage的区别,PostMessage函数调用发送之后,立即返回,不等待消息处理完成。而SendMessage则让调用的线程处于阻

2008-08-06 20:41:00 17955 8

WindowsFocus源码。

这是我自己写的类似代码,和机试时的代码差别不大。

2007-10-19

WindowsFocus源码。

XXX软件股份有限公司面试笔试倒数第二题类似源代码?

2007-10-19

空空如也

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

TA关注的人

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