1. 程式人生 > >Wine中PE格式檔案的載入(二):Wineserver初始化過程

Wine中PE格式檔案的載入(二):Wineserver初始化過程

Wineserver的初始化過程就在thread_init函式中進行的。

具體分析thread_init函式(在ntdll/thread.c中)

1.     建立了TEB,PEB等資料結構。

2.     通過server_init_process()與服務程序建立socket連線。在此過程中,如果連線失敗就說明服務程序尚不存在,此時要通過start_server()先fork()一個子程序,讓其執行wine_exec_wine_binary(),以裝入並執行wineserver,再試圖與其建立連線。

thread_init部分函式程式碼如下圖所示:

start_server函式如下圖所示:

除了啟動wineserver建立通訊的socket外,還建立了一對管道,分別將寫端傳送到要通訊的程序中,來實現後面的函式呼叫。

在wineserver中的實現也類似,在收到client端 socket的連線後也會建立管道,將寫端傳送回來。

並且在wineserver中將socket client fd以及的管道讀端放入一個poll中監聽。來實現dll中的函式呼叫等請求。這裡就不多贅述了。


相關推薦

WinePE格式檔案載入Wineserver初始過程

Wineserver的初始化過程就在thread_init函式中進行的。具體分析thread_init函式(在ntdll/thread.c中)1.     建立了TEB,PEB等資料結構。2.     通過server_init_process()與服務程序建立socket連

WinePE格式檔案載入Wine初始過程

首先了解下Wine初始化過程。我們執行”wine WeChat.exe”命令,發生的過程是怎麼樣的?接下來從wine原始碼一步步分析函式呼叫過程。在loader/目錄下的原始碼編譯,由main.c生成了“wine”Linux可執行檔案;preloader.c生成了“pre-l

WinePE格式檔案載入DLL的裝入和連線

在載入完PE可執行檔案後,回到kernel32的入口函式__wine_kernel_init中,接下來呼叫了函式LdrInitializeThunk。dll的裝入和連線過程主要是該函式實現的。函式部分程式碼如下圖所示:先用main_exe_file判斷主模組是否已經被建立了,

SD卡的FAT32檔案系統

2.1 FAT檔案系統簡介 FAT(File Allocation Table,檔案分配表)檔案系統是windows作業系統所使用的一種檔案系統,它的發展過程經歷了FAT12、FAT16、FAT32三個階段。FAT檔案系統用“簇”作為資料單元。一個“簇”由一組連續的扇區

webRTC音訊相關的netEQDSP處理 webRTC音訊相關的netEQ控制命令決策 webRTC音訊相關的netEQ資料結構

上篇(webRTC中音訊相關的netEQ(四):控制命令決策)講了MCU模組是怎麼根據網路延時、抖動緩衝延時和反饋報告等來決定給DSP模組發什麼控制命令的。DSP模組根據收到的命令進行相關處理,處理簡要流程圖如下。   從上圖看出如果有語音包從packet buffer裡取出來先要做解碼得到PC

/proc檔案系統/proc/<pid>/stat

0. 前言 /proc 檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。 它以檔案系統的方式為核心與程序提供通訊的介面。使用者和應用程式可以通過/proc得到系統的資訊,並可以改變核心的某些引數。 由於系統的資訊,如程序,是動態改變的,所以使用者或應用程式讀取/proc

現代作業系統應用開發UWP——檔案管理FileManagement

背景簡介 我們的UWP程式想要讀寫本地的檔案的時候,往往會遇到許可權問題,這裡存在著兩個解決方法: 第一,電腦上的KnownFolder允許UWP程式直接訪問;這裡的KnowFolder指的是下面圖片中的資料夾: 關於這種方法可以參考第一篇部落格

linux入門學習linux圖形界面與命令行界面之間的切換,以及一些系統命令

之間 linu 鏡像 pan ctr 安裝 linux -- linux鏡像 一、linux圖形化界面與命令行界面之間的切換 註意:前提是你安裝的 linux鏡像ios 必須具備圖形化功能。 1)  圖形化界面--->命令行界面:       ctrl + alt +

Android進階 應用程序啟動過程

1.前言 最近一直在看 《Android進階解密》 的一本書,這本書編寫邏輯、流程都非常好,而且很容易看懂,非常推薦大家去看看(沒有收廣告費,單純覺得作者寫的很好)。 今天就將 應用程序啟動過程 總結一下(基於Android 8.0 系統)。 文章中例項&nbs

JavaScript ES6函數語言程式設計柯里、偏應用、組合、管道

上一篇介紹了閉包和高階函式,這是函數語言程式設計的基礎核心。這一篇來看看高階函式的實戰場景。 首先強調兩點: 注意閉包的生成位置,清楚作用域鏈,知道閉包生成後快取了哪些變數 高階函式思想:以變數作用域作為根基,以閉包為工具來實現各種功能 柯里化(curry) 定義:柯里化是把一個多引數函式轉換為一個巢狀的

NavMesh生成研究體素過程

NMGen是一個開源專案,包括Java版的recast靜態網格生成程式碼,以及詳細介紹生成過程的文章。因為在閱讀過程中覺得對理解recast原理非常有用,所以決定將其翻譯在自己blog上。 原blog上完整的目錄包括: 高度域介紹(Introducti

深度學習Deep Learning04權重初始問題2_ReLu激勵函式

三、權重初始化問題2_ReLu激勵函式 1、說明 2、ReLu/PReLu激勵函式 目前ReLu啟用函式使用比較多,而上面一篇論文沒有討論,如果還是使用同樣初始化權重的方法(

PE檔案格式學習總體結構

1.概述 PE檔案分為幾個部分,分別是: DOS頭 DOS Stub NT頭(PE頭) 檔案頭 可選頭 區段頭(一個數組,每個元素都是一個結構體,稱之為IMAGE_SECTION_HEADER) .text .rdata .data .rs

[日更-2019.5.22、23] Android 系統的分割槽和檔案系統--Android 檔案系統檔案

宣告 Android系統中有很多分割槽,每個分割槽內的檔案系統一般都不同的,使用ADB進入系統/目錄下可發現掛載這很多的目錄,不

Hibernate的多表操作1單向多對一

art 保存 int gen round t對象 情況 映射文件 拋出異常 由“多”方可知“一”方的信息,比如多個員工使用同一棟公寓,員工可以知道公寓的信息,而公寓無法知道員工的信息。 案例一: pojo類 public class Department {

Java web常見編碼亂碼問題

catalina 轉換 alt str 檢測 內容 tom 拼搏 image 根據上篇記錄Java web中常見編碼亂碼問題(一), 接著記錄亂碼案例:   案例分析:   2、輸出流寫入內容或者輸入流讀取內容時亂碼(內容中有中文)   原因分析:     a、 如果是

python關於操作時間的方法使用datetime模塊

log time模塊 bsp lib .py nth mon target ear 使用datetime模塊來獲取當前的日期和時間 1 import datetime 2 i=datetime.datetime.now() 3 print ("當前的日期和時間是%

JavaString、StringBuilder、StringBuffer常用源碼分析及比較StringBuilder、StringBuffer源碼分析

string類型 character private 字符 代碼 less pri des over StringBuilder: 一、構造方法: /** * Constructs a string builder with no characters in i

觀察者模式(Observer Pattern)HeadFirst的氣象站的實現

att dex mov min first return 狀態 size sdi 1 觀察者模式的原理,首先由一個主題,當主題發送變化的時候,通知該主題的訂閱者 按照上面的分析我們來進行設計 1.抽象主題Subject public interface Subject {

在 Windows Server Container 運行 Azure Storage Emulator使用自定義的 SQL Server Instance

manage span contain target ros 結果 images 兩種方法 ini   上一章,我們解決了 Azure Storage Emulator 自定義監聽地址的問題,這遠遠不夠,因為在我們 DEV/QA 環境有各自的 SQL Server Inst