原创 C++ 異步回調

上一文中講了C語言通過函數指針實現異步回調,本文講解C++類中實現線程回調 C++類中實現線程回調 本文繼續討論C++中實現回調,由於C++中有類,而C語言中的回調函數不能直接定義爲成員函數,所以就很麻煩了,下面將討論解決辦法。

原创 一種簡單的禁止應用被雙開的方法

前段時間發現一個應用被雙開後,不能同時在一個手機上登陸兩個賬號,登陸A之後,B會被踢下線。 剛開始還以爲有什麼黑科技,或者有名管道,本地socket之類的,或者是向sd卡寫了什麼文件,這幾種方案都檢查了,沒有效果。 沒辦法只能分析

原创 linker打開log開關

linker在設計之初就爲廣大碼農提供了便利 // Get a few environment variables. const char* LD_DEBUG = getenv("LD_DEBUG"); if (LD_

原创 JEB編寫腳本

通過編寫jeb的python腳本,用來解密java的加密函數,如下圖得aa.E就是一個加密函數,如果腳本運行完成,這個應該被替換成解密後得字符串。 我得方法就是遍歷每個函數調用,然後找到目標方法,替換成解密後得字符串。結果就是簡

原创 Android java脫殼(修改art源碼方案)

9.0 aosp 修改源碼地方: android-p/art/runtime/dex/art_dex_file_loader.cc OpenCommon函數中添加 7.0 8.0 8.1 修改源碼地方: android-p/art

原创 WeakHashMap的回收機制分析

原文鏈接:https://www.ktanx.com/blog/p/288 (轉載)[https://www.ktanx.com/blog/p/288] 在Java中,一般人對於Weak

原创 vfork導致父進程環境變量被修改

vfork導致父進程環境變量被修改 vfork版本 #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <sys/types.h> #includ

原创 爲什麼wait()一定要放在循環中

在多線程的編程實踐中,wait()的使用方法如下: synchronized (monitor) { // 判斷條件謂詞是否得到滿足 while(!locked) { // 等待喚醒

原创 刷入第三方Recovery系統TWRP

我們需要預先準備兩個文件,分別是SuperSU與TWRP: supersu權限管理工具 TWRP 輔助刷機的Recovery系統 Supersu下載頁Twrp下載頁 在Devices根據自己型號,解鎖對應的版本,點進去下最新的。準

原创 InputManagerService

Input框架 每增加一個WindowState.java,WMS都會通過registerInputChannel向InputDispatcher註冊一個connection,這個connection用於後續event查找當前的觸摸位置屬

原创 SmaliEx反編譯Rom

1: 首先將手機中的system/framework/ system/app/ system/priv-app 拉出來 (或者可以直接下載各手機廠商公佈的rom轉成img) 2: 下載SmaliEx工具 Download lates

原创 Android Native Framework gdb調試工具

腳本使用方法 gdb_native.sh 228 adb1 gdb_native.sh 228 其中228代表要調試進程的pid,必須指定; adb1 指定你想使用的adb工具,也可以不指定adb。 #!/bin/bash PR

原创 七、Android數據鏈接更新路由表

數據鏈接響應 sp<RILRequest> RIL::processSolicited(const Parcel& p) { switch (rr->mRequest) { case RIL_REQUEST_SET

原创 Android Binder理解

在之所以需要進程通訊,內核空間的地址空間是所有進程共享的,但是用戶空間使用的是虛擬地址空間(都有4GB空間),不能共享,因此需要類似於binder這樣的驅動,讓數據在內核中逛一圈 Binder框架定義了四個角色:Server,Client

原创 Android Graphics Framework

Android系統圖形框架 Android系統圖形框架由下往上主要的包括HAL(HWComposer和Gralloc兩個moudle),SurfaceFlinger(BufferQueue的消費者),WindowManagerServic