Windows程式設計學習記錄(六) 呼叫API

2021-10-23 04:55:48 字數 889 閱讀 8605

win32中api的作用是以一種新的方式替代了dos中軟中斷的作用。在dos中用組合語言程式設計,要呼叫系統提供的功能,首先要知道中斷號,其次要知道中斷號的功能號,如列印乙個字串,就要使用21h號中斷的9號功能。使用的過程中,功能號存放在ah中,dx中存放字串位址,最後int21h。

mov ah,9

mov dx,offset szhello

int 21h

這種方法比較繁瑣,需要不斷地查中斷表。與dos系統不同,win32系統的功能模組是放在dll中的,在dll檔案的pe頭匯出表中,以字串的形式指出了這個dll提供的匯出函式列表,應用程式可以通過函式名呼叫。

格式: 函式名 proto [距離] [call模式] [引數1]:資料型別, [引數2]:資料型別,……

中的內容都可以省略。距離near、far等等,通常省略,因為win32匯程式設計序中只有乙個flat段。call模式即cdelcall、stdcall等,如果省略則使用.model的預設值。引數名可以省略,加上只改善**的可讀性。win32彙編只使用dword型別的引數,所以資料型別基本是dword。

include和c語言中的include類似,等於新增了乙個包含函式宣告的標頭檔案,編譯器在編譯時將include語句直接替換成目標檔案。而includelib則包含了dll中匯出函式的資訊,鏈結時鏈結器根據這些資訊到指定dll中找到對應函式。

可以這樣理解:如果沒有include對應.inc檔案則找不到函式的宣告,沒有includelib對應.lib檔案則找不到函式的實現。

為了避免整個源**都在push push call,masm提供了乙個偽指令:invoke 函式明,引數,引數……通過這種方式

函式的返回值放在eax中,如果返回值是64位,則高位放在edx中。如果返回值太大,就返回指向返回值的指標。

機器學習 學習記錄六

本篇部落格將介紹semi supervised learning的實現方法 介紹 之前我們所介紹的機器學習所提到的資料都是帶有label的。而現實是,蒐集這些帶有label的資料並不是一件簡單的事情,但是蒐集一些不帶有label的資料就要容易很多。semi supervised learning指的...

spring學習記錄(六)

public class myadvice implements methodinterceptor 然後,在xml配置檔案中進行通知和切點的定義,以及將切點和通知進行組裝 myadvice class com.huwc.myadvice bean aop config proxy target c...

windows核心程式設計 記錄 1

物件,windows分為使用者物件和核心物件.說的最多的就是核心物件.核心物件有很多,程序,檔案,管道,and so on.需要記錄的只有乙個東西 closehandle 程序,有程序的核心物件,程序的核心物件比此程序的存在週期要常.程序結束的時候它所對應的核心物件並不會立刻結束,而是檢查它的計數器...