原创 Linux查看動態庫.so導出函數列表

有兩種方式:1.使用objdump命令。例如:objdump -tT xxx.so2.使用nm命令(個人覺得使用nm方式查看更方便。)例如 nm -D xxx.so(-D或-dynamic選項表示:顯示動態符號。該選項僅對於動態庫有意義)

原创 從Java虛擬機看Java類和對象的初始化

類變量的初始化 類變量是之類中的static變量,在Java程序運行時它存儲於方法區中,可以被認爲是類信息(java.lang.Class對象)的一部分。 《Java編程思想》中描述了static變量的初始化時機:創建類的第一個對象時,或

原创 Java—線程按順序執行

1.第一種方法:Thread.join() public static void main(String[] args) { final Thread t1 = new Thread(new Runnable() {

原创 TCP Keepalive機制與應用層心跳Heartbeat

TCP長連接中可能出現的問題1.     很多防火牆路由器等對於空閒socket自動關閉2.     對於非正常斷開, 服務器並不能檢測到. 爲了回收資源, 必須提供一種檢測機制.於是,就有了心跳(HeartBeat)機制。心跳機制的兩種

原创 Linux內核實現PE加載器——Longene源碼分析

Longene是一個源自中國的自由、開源的操作系統項目,目的是要把Linux的內核擴充成一個既支持Linux應用、也支持Windows應用,既支持Linux設備驅動、也支持Windows設備驅動的兼容內核;使用戶可以直接在Linux操作系

原创 Linux加載啓動可執行程序的過程(二)解釋器完成動態鏈接

接着上一篇博客。前面的工作都是在內核完成的,接下來會回到用戶空間。第一步,解釋器(也可以叫動態鏈接器)首先檢查可執行程序所依賴的共享庫,並在需要的時候對其進行加載。ELF 文件有一個特別的節區: .dynamic,它存放了和動態鏈接相關的

原创 Windows10安裝運行Docker

首先需要開啓Win10的Hype-V。在設置中搜索“啓用或關閉Windows功能”選中Hyper-V選項然後在 https://www.docker.com/get-docker 安裝Toolbox點擊左邊圖標,然後跳轉到Download

原创 WebSocket協議講解

WebSocket是什麼Wiki上是這樣介紹的:WebSocket是一種在單個TCP連接上進行全雙工通訊的協議。這裏做個補充:是HTML5開始提供的一種瀏覽器與服務器進行全雙工通訊的網絡技術,屬於應用層協議。它基於TCP傳輸協議,並複用H

原创 Linux動態鏈接器

我開始以爲動態鏈接器ld-linux.so.x是linux內核的一部分,其實這種想法是錯誤的。分析完ELF可執行文件在內核中加載啓動的源碼後,可以參考博主的這兩篇博客Linux加載啓動可執行程序的過程(一)內核空間加載ELF的過程Linu

原创 Wine中PE格式文件的加載(四):DLL的裝入和連接

在加載完PE可執行文件後,回到kernel32的入口函數__wine_kernel_init中,接下來調用了函數LdrInitializeThunk。dll的裝入和連接過程主要是該函數實現的。函數部分代碼如下圖所示: 先用main_exe

原创 理解TCP長連接(Keepalive)

TCP Keepalive的起源TCP協議中有長連接和短連接之分。短連接環境下,數據交互完畢後,主動釋放連接;長連接的環境下,進行一次數據交互後,很長一段時間內無數據交互時,客戶端可能意外斷電、死機、崩潰、重啓,還是中間路由網絡無故斷開,

原创 Windows安裝Redis

博主是在Win10下安裝Redis且安裝了Redis桌面管理客戶端。Redis 支持 32 位和 64 位。這個需要根據你係統平臺的實際情況選擇,這裏我們下載 Redis-x64-xxx.zip壓縮包到 D盤,解壓後,可以將文件夾重新命名

原创 理解Socket

Socket的概念什麼是Socket?很多博客總結的不到位。這裏做一個全面的解釋。基本原理的角度來看,Socket起源於Unix,Unix/Linux基本哲學之一就是“一切皆文件”,Socket是一種"打開—讀/寫—關閉"模式的實現,可以