關於多個程序載入同乙個DLL的一些觀念

2021-05-22 22:04:06 字數 708 閱讀 3204

自己在之前一直認為dll分為二種,一種是系統的dll(共享),一種是自己寫的dll(非共享,當然,應該也可以做成共享的)

對於同乙個dll而言,針對第二種情況,也就是通常寫的dll沒有任何特別處理過的dll。

在這裡我做了乙個試驗,編寫乙個dll和乙個載入dll並呼叫dll中乙個函式的程式,分別用二個od載入這二個可執行程式呼叫dll中的函式,為了說明載入的這個dll分別位於不同的程序,沒有任何的共享關係,我把二個程序同時一步一步除錯,都執行到載入完dll後,dll的載入位址是一樣的都0x10000000,接著我在第乙個程序中轉到dll載入的地方,把mz頭用00填充,再一下f9,結果程式顯示找不到呼叫的函式,接著再轉到第二個程序,也轉到0x10000000去看一下,這裡沒有被改動的跡象。f9一下,可以執行成功。說明載入的dll雖然都在0x10000000,但是它們位於不同的程序,是不會相互干擾的。

以上這個例子我認為說服力不夠, 於是又做了乙個實驗,此時dll中有二個函式,第乙個函式可以設定dll中的全域性變數x的值,第二個函式不設定全域性變數,全域性變數在宣告時初始值為0. 分別編寫二個程式,分別呼叫函式中的十個函式,第乙個程式呼叫第乙個函式,第二個程式呼叫第二個函式,這樣用od交叉執行,發現二者之間的執行沒有任何的干擾,說明它們分別位於不同的程序中,實驗時,二個程式同時載入同一位置的同一dll。

這樣一來,就可以說明我之前的想法了,另外又在看雪上搜到,如果想在dll中共享,需要在dll中設定乙個共享段。這樣程序間才能共享資料。

多個程序能否監聽同乙個埠號

我們都知道socket是網路上兩個程序之間的雙向通訊鏈路,即 根據unix網路程式設計中的知識可知,服務端監聽乙個埠會經歷 1 根據套接字型別 ipv4,ipv6等 建立套接字socket 2 將套接字bind繫結到具體的網路位址和埠號 3 呼叫listen開始在這個套接字上進行監聽。unix提供了...

多個請求使用同乙個Servlet

如果jsp中乙個請求對應乙個servlet那要建很多servlet,冗餘較多。我們可以把乙個模組的請求封裝在乙個servlet,實現功能的模組化,從而簡化 其實這種方式有點類似於struts中的action。新建jsp檔案 輸入如下 分別是3個請求,請求同乙個servlet,但是後邊跟的引數meth...

同乙個Tomcat部署多個專案

一 同一tomcat 多個埠部署不同的專案 在tomcat 安裝目錄下c program files apache tomcat 6.0.29 conf找到server.xml 1 在結點後面增加結點,如下 好處 可以把多個專案部署在根目錄 二 tomcat 部置方式 tomcat部署專案有3種方法...