在多道程序環(huán)境下,要使程序運(yùn)行,必須先為之創(chuàng)建進(jìn)程。而創(chuàng)建進(jìn)程的第一件事,便是將程序和數(shù)據(jù)裝入內(nèi)存。如何將一個(gè)用戶源程序變?yōu)橐粋€(gè)可在內(nèi)存中執(zhí)行的程序,通常都要經(jīng)過(guò)以下幾個(gè)步驟:
首先是要編譯:
由編譯程序(Compiler)將用戶源代碼編譯成cpu可執(zhí)行的目標(biāo)代碼,產(chǎn)生了若干個(gè)目標(biāo)模塊(Object Module)(即若干程序段)。形成的目標(biāo)代碼,每個(gè)目標(biāo)代碼都是以0為基址順序進(jìn)行編址,原來(lái)用符號(hào)名訪問(wèn)的單元用具體的數(shù)據(jù)——單元號(hào)取代。這樣生成的目標(biāo)程序占據(jù)一定的地址空間,稱(chēng)為作業(yè)的邏輯地址空間,簡(jiǎn)稱(chēng)邏輯空間。
在邏輯空間中每條指令的地址和指令中要訪問(wèn)的操作數(shù)地址統(tǒng)稱(chēng)為邏輯地址 。很簡(jiǎn)單,邏輯地址就是你源程序里使用的地址,或者源代碼經(jīng)過(guò)編譯以后編譯器將一些標(biāo)號(hào),變量轉(zhuǎn)換成的地址。
其次是鏈接
由鏈接程序(Linker)將編譯后形成的一組目標(biāo)模塊(程序段),以及它們所需要的庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊(Load Module);
最后是裝入(地址重定位)
由裝入程序(Loader)將裝入模塊裝入物理內(nèi)存。物理內(nèi)存是真實(shí)存在的插在主板內(nèi)存槽上的內(nèi)存條的容量的大小。
物理內(nèi)存內(nèi)存是由若干個(gè)存儲(chǔ)單元組成的,每個(gè)存儲(chǔ)單元有一個(gè)編號(hào),這種編號(hào)可唯一標(biāo)識(shí)一個(gè)存儲(chǔ)單元,稱(chēng)為內(nèi)存地址(或物理地址)。我們可以把內(nèi)存看成一個(gè)從0字節(jié)一直到內(nèi)存最大容量逐字節(jié)編號(hào)的存儲(chǔ)單元數(shù)組,即每個(gè)存儲(chǔ)單元與內(nèi)存地址的編號(hào)相對(duì)應(yīng)。
裝入模塊雖然具有統(tǒng)一的地址空間,但它仍是以“0”作為參考地址,即是浮動(dòng)的。要把它裝入內(nèi)存執(zhí)行,就要確定裝入內(nèi)存的實(shí)際物理地址,并修改程序中與 地址有關(guān)的代碼,這一過(guò)程叫做地址重定位。地址重定位主要是把邏輯地址轉(zhuǎn)換成物理內(nèi)存絕對(duì)地址,這個(gè)工作又稱(chēng)為地址映射。
圖4-2 對(duì)用戶程序的處理步驟
源程序經(jīng)過(guò)編譯后,可得到一組目標(biāo)模塊,再利用鏈接程序?qū)⑦@組目標(biāo)模塊鏈接,形成裝入模塊。根據(jù)鏈接時(shí)間的不同,可把鏈接分成如下三種:
(1) 、靜態(tài)鏈接。在程序運(yùn)行之前,先將各目標(biāo)模塊及它們所需的庫(kù)函數(shù),鏈接成一個(gè)完整的裝配模塊,以后不再拆開(kāi)。我們把這種事先進(jìn)行鏈接的方式稱(chēng)為靜態(tài)鏈接方式。
(2)、 裝入時(shí)動(dòng)態(tài)鏈接。這是指將用戶源程序編譯后所得到的一組目標(biāo)模塊,在裝入內(nèi)存時(shí),采用邊裝入邊鏈接的鏈接方式。
(3)、 運(yùn)行時(shí)動(dòng)態(tài)鏈接。這是指對(duì)某些目標(biāo)模塊的鏈接,是在程序執(zhí)行中需要該(目標(biāo))模塊時(shí),才對(duì)它進(jìn)行的鏈接。
1.靜態(tài)鏈接方式(Static Linking)
我們通過(guò)一個(gè)例子來(lái)說(shuō)明在實(shí)現(xiàn)靜態(tài)鏈接時(shí)應(yīng)解決的一些問(wèn)題。在圖 4-4(a)中示出了經(jīng)過(guò)編譯后所得到的三個(gè)目標(biāo)模塊A、B、C,它們的長(zhǎng)度分別為 L、M和N。在模塊A中有一條語(yǔ)句CALL B,用于調(diào)用模塊B。在模塊B中有一條語(yǔ)句CALL C,用于調(diào)用模塊C。B和C都屬于外部調(diào)用符號(hào),在將這幾個(gè)目標(biāo)模塊裝配成一個(gè)裝入模塊時(shí),須解決以下兩個(gè)問(wèn)題:
(1) 對(duì)相對(duì)地址進(jìn)行修改。在由編譯程序所產(chǎn)生的所有目標(biāo)模塊中,使用的都是相對(duì)地址,其起始地址都為 0,每個(gè)模塊中的地址都是相對(duì)于起始地址計(jì)算的。在鏈接成一個(gè)裝入模塊后,原模塊B和 C在裝入模塊的起始地址不再是 0,而分別是 L和 L+M,所以此時(shí)須修改模塊B和C中的相對(duì)地址,即把原B中的所有相對(duì)地址都加上 L,把原 C中的所有相對(duì)地址都加上L+M。
(2) 變換外部調(diào)用符號(hào)。將每個(gè)模塊中所用的外部調(diào)用符號(hào)也都變換為相對(duì)地址,如把B 的起始地址變換為 L,把 C 的起始地址變換為 L+M,如圖 4-4(b)所示。這種先進(jìn)行鏈接所形成的一個(gè)完整的裝入模塊,又稱(chēng)為可執(zhí)行文件。通常都不再拆開(kāi)它,要運(yùn)行時(shí)可直接將它裝入內(nèi)存。這種事先進(jìn)行鏈接,以后不再拆開(kāi)的鏈接方式,稱(chēng)為靜態(tài)鏈接方式。
圖 4-4 程序鏈接示意圖
2.裝入時(shí)動(dòng)態(tài)鏈接(Load-time Dynamic Linking)
用戶源程序經(jīng)編譯后所得的目標(biāo)模塊,是在裝入內(nèi)存時(shí)邊裝入邊鏈接的,即在裝入一個(gè)目標(biāo)模塊時(shí),若發(fā)生一個(gè)外部模塊調(diào)用事件,將引起裝入程序去找出相應(yīng)的外部目標(biāo)模塊,并將它裝入內(nèi)存,還要按照?qǐng)D4-4所示的方式來(lái)修改目標(biāo)模塊中的相對(duì)地址。裝入時(shí)動(dòng)態(tài)鏈接方式有以下優(yōu)點(diǎn):
(1) 、便于修改和更新。對(duì)于經(jīng)靜態(tài)鏈接裝配在一起的裝入模塊,如果要修改或更新其中的某個(gè)目標(biāo)模塊,則要求重新打開(kāi)裝入模塊。這不僅是低效的,而且有時(shí)是不可能的。若采用動(dòng)態(tài)鏈接方式,由于各目標(biāo)模塊是分開(kāi)存放的,所以要修改或更新各目標(biāo)模塊是件非常容易的事。
(2)、便于實(shí)現(xiàn)對(duì)目標(biāo)模塊的共享。在采用靜態(tài)鏈接方式時(shí),每個(gè)應(yīng)用模塊都必須含有其目標(biāo)模塊的拷貝,無(wú)法實(shí)現(xiàn)對(duì)目標(biāo)模塊的共享。但采用裝入時(shí)動(dòng)態(tài)鏈接方式,OS則很容易將一個(gè)目標(biāo)模塊鏈接到幾個(gè)應(yīng)用模塊上,實(shí)現(xiàn)多個(gè)應(yīng)用程序?qū)υ撃K的共享。
3.運(yùn)行時(shí)動(dòng)態(tài)鏈接(Run-time Dynamic Linking)
在許多情況下,應(yīng)用程序在運(yùn)行時(shí),每次要運(yùn)行的模塊可能是不相同的。但由于事先無(wú)法知道本次要運(yùn)行哪些模塊,故只能是將所有可能要運(yùn)行到的模塊都全部裝入內(nèi)存,并在裝入時(shí)全部鏈接在一起。顯然這是低效的,因?yàn)橥鶗?huì)有些目標(biāo)模塊根本就不運(yùn)行。比較典型的例子是作為錯(cuò)誤處理用的目標(biāo)模塊,如果程序在整個(gè)運(yùn)行過(guò)程中都不出現(xiàn)錯(cuò)誤,則顯然就不會(huì)用到該模塊。 近幾年流行起來(lái)的運(yùn)行時(shí)動(dòng)態(tài)鏈接方式,是對(duì)上述在裝入時(shí)鏈接方式的一種改進(jìn)。這種鏈接方式是將對(duì)某些模塊的鏈接推遲到程序執(zhí)行時(shí)才進(jìn)行鏈接,亦即,在執(zhí)行過(guò)程中,當(dāng)發(fā)現(xiàn)一個(gè)被調(diào)用模塊尚未裝入內(nèi)存時(shí),立即由OS去找到該模塊并將之裝入內(nèi)存,把它鏈接到調(diào)用者模塊上。凡在執(zhí)行過(guò)程中未被用到的目標(biāo)模塊,都不會(huì)被調(diào)入內(nèi)存和被鏈接到裝入模塊上,這樣不僅可加快程序的裝入過(guò)程,而且可節(jié)省大量的內(nèi)存空間。
為了闡述上的方便,我們先介紹一個(gè)無(wú)需進(jìn)行鏈接的單個(gè)目標(biāo)模塊的裝入過(guò)程。該目標(biāo)模塊也就是裝入模塊。在將一個(gè)裝入模塊裝入內(nèi)存時(shí),可以有絕對(duì)裝入方式、可重定位裝入方式和動(dòng)態(tài)運(yùn)行時(shí)裝入方式,下面分別簡(jiǎn)述之。
1.絕對(duì)裝入方式(Absolute Loading Mode)
在編譯時(shí),如果知道程序?qū)Ⅰv留在內(nèi)存的什么位置,那么,編譯程序?qū)a(chǎn)生絕對(duì)地址的目標(biāo)代碼。即按照物理內(nèi)存的位置賦予實(shí)際的物理地址。例如,事先已知用戶程序(進(jìn)程)駐留在從R處開(kāi)始的位置,則編譯程序所產(chǎn)生的目標(biāo)模塊(即裝入模塊)便從R處開(kāi)始向上擴(kuò)展。絕對(duì)裝入程序按照裝入模塊中的地址,將程序和數(shù)據(jù)裝入內(nèi)存。裝入模塊被裝入內(nèi)存后,由于程序中的邏輯地址與實(shí)際內(nèi)存地址完全相同,故不須對(duì)程序和數(shù)據(jù)的地址進(jìn)行修改。程序中所使用的絕對(duì)地址,既可在編譯或匯編時(shí)給出,也可由程序員直接賦予。
這個(gè)方式的優(yōu)點(diǎn):是CPU執(zhí)行目標(biāo)代碼快。
缺點(diǎn):1)是由于內(nèi)存大小限制,能裝入內(nèi)存并發(fā)執(zhí)行的進(jìn)程數(shù)大大減少
2)編譯程序必須知道內(nèi)存的當(dāng)前空閑地址部分和其地址,并且把進(jìn)程的不同程序段連續(xù)地存放起來(lái),編譯非常復(fù)雜。由于程序
因此,通常是寧可在程序中采用符號(hào)地址,然后在編譯或匯編時(shí),再將這些符號(hào)地址轉(zhuǎn)換為絕對(duì)地址。
如何把虛擬內(nèi)存地址空間變換到內(nèi)存唯一的一維物理線性空間?涉及到兩個(gè)問(wèn)題:
地址映射就是建立虛擬地址與內(nèi)存地址的關(guān)系。
2.靜態(tài)地址重定位(可重定位裝入方式 Relocation Loading Mode)
絕對(duì)裝入方式只能將目標(biāo)模塊裝入到內(nèi)存中事先指定的位置。在多道程序環(huán)境下,編譯程序不可能預(yù)知所編譯的目標(biāo)模塊應(yīng)放在內(nèi)存的何處,因此,絕對(duì)裝入方式只適用于單道程序環(huán)境。在多道程序環(huán)境下,所得到的目標(biāo)模塊的起始地址通常是從 0 開(kāi)始的,程序中的其它地址也都是相對(duì)于起始地址計(jì)算的。此時(shí)應(yīng)采用可重定位裝入方式,根據(jù)內(nèi)存的當(dāng)前情況,將裝入模塊裝入到內(nèi)存的適當(dāng)位置。
靜態(tài)地址重定位:即在程序裝入對(duì)目標(biāo)代碼裝入內(nèi)存的過(guò)程中完成,是指在程序開(kāi)始運(yùn)行前,程序中指令和數(shù)據(jù)的各個(gè)地址均已完成重定位,即完成虛擬地址到內(nèi)存地址映射。地址變換通常是在裝入時(shí)一次完成的,以后不再改變。
值得注意的是, 在采用可重定位裝入程序?qū)⒀b入模塊裝入內(nèi)存后, 會(huì)使裝入模塊中的所有邏輯地址與實(shí)際裝入內(nèi)存的物理地址不同,圖4-3示出了這一情況。
圖4-3 作業(yè)裝入內(nèi)存時(shí)的情況
例如,在用戶程序的 1000 號(hào)單元處有一條指令LOAD 1,2500,該指令的功能是將 2500 單元中的整數(shù) 365 取至寄存器 1。但若將該用戶程序裝入到內(nèi)存的 10000~15000號(hào)單元而不進(jìn)行地址變換, 則在執(zhí)行11000號(hào)單元中的指令時(shí),它將仍從 2500 號(hào)單元中把數(shù)據(jù)取至寄存器1而導(dǎo)致數(shù)據(jù)錯(cuò)誤。由圖4-3 可見(jiàn),正確的方法應(yīng)該是將取數(shù)指令中的地址 2500 修改成 12500,即把指令中的相對(duì)地址 2500 與本程序在內(nèi)存中的起始地址 10000 相加,才得到正確的物理地址12500。除了數(shù)據(jù)地址應(yīng)修改外,指令地址也須做同樣的修改,即將指令的相對(duì)地址 1000 與起始地址 10000 相加,得到絕對(duì)地址 11000。
優(yōu)點(diǎn):無(wú)需硬件支持
缺點(diǎn):1)程序重定位之后就不能在內(nèi)存中搬動(dòng)了;
2)要求程序的存儲(chǔ)空間是連續(xù)的,不能把程序放在若干個(gè)不連續(xù)的區(qū)域中。
3.動(dòng)態(tài)地址重地位(動(dòng)態(tài)運(yùn)行時(shí)裝入方式 Dynamic Run-time Loading)
可重定位裝入方式可將裝入模塊裝入到內(nèi)存中任何允許的位置,故可用于多道程序環(huán)境;但這種方式并不允許程序運(yùn)行時(shí)在內(nèi)存中移動(dòng)位置。因?yàn)椋绦蛟趦?nèi)存中的移動(dòng),意味著它的物理位置發(fā)生了變化, 這時(shí)必須對(duì)程序和數(shù)據(jù)的地址(是絕對(duì)地址)進(jìn)行修改后方能運(yùn)行。然而,實(shí)際情況是,在運(yùn)行過(guò)程中它在內(nèi)存中的位置可能經(jīng)常要改變,此時(shí)就應(yīng)采用動(dòng)態(tài)運(yùn)行時(shí)裝入的方式。
動(dòng)態(tài)地址重定位:不是在程序執(zhí)行之前而是在程序執(zhí)行過(guò)程中進(jìn)行地址變換。更確切的說(shuō),是把這種地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時(shí)才進(jìn)行,即在每次訪問(wèn)內(nèi)存單元前才將要訪問(wèn)的程序或數(shù)據(jù)地址變換成內(nèi)存地址。動(dòng)態(tài)重定位可使裝配模塊不加任何修改而裝入內(nèi)存。為使地址轉(zhuǎn)換不影響指令的執(zhí)行速度,這種方式需要一個(gè)重定位寄存器的支持,
優(yōu)點(diǎn):1)目標(biāo)模塊裝入內(nèi)存時(shí)無(wú)需任何修改,因而裝入之后再搬遷也不會(huì)影響其正確執(zhí)行,這對(duì)于存儲(chǔ)器緊縮、解決碎片問(wèn)題是極其有利的;
2)一個(gè)程序由若干個(gè)相對(duì)獨(dú)立的目標(biāo)模塊組成時(shí),每個(gè)目標(biāo)模塊各裝入一個(gè)存儲(chǔ)區(qū)域,這些存儲(chǔ)區(qū)域可以不是順序相鄰的,只要各個(gè)模塊有自己對(duì)應(yīng)的定位寄存器就行。
缺點(diǎn):需要硬件支持。
5.1. 構(gòu)造動(dòng)態(tài)鏈接庫(kù)
DLL是包含函數(shù)和數(shù)據(jù)的模塊,它的調(diào)用模塊可為EXE或DLL,它由調(diào)用模塊在運(yùn)行時(shí)加載;加載時(shí),它被映射到調(diào)用進(jìn)程的地址空間。在VC中有一類(lèi)工程用于創(chuàng)建DLL。
5.2. DLL的裝入方法
1)裝入時(shí)動(dòng)態(tài)鏈接(load-time):
在編程時(shí)顯式調(diào)用某個(gè)DLL函數(shù),該DLL函數(shù)在可執(zhí)行文件中稱(chēng)為引入(import)函數(shù)。
鏈接時(shí)需利用 .LIB文件。在可執(zhí)行文件中為引入的每個(gè)DLL建立一個(gè)IMAGE_IMPORT_DESCRIPTOR結(jié)構(gòu)。
在裝入時(shí)由系統(tǒng)根據(jù)該DLL映射在進(jìn)程中的地址改寫(xiě)Import Address Table中的各項(xiàng)函數(shù)指針。Hint是DLL函數(shù)在DLL文件中的序號(hào),當(dāng)DLL文件修改后,就未必指向原先的DLL函數(shù)。在裝入時(shí),系統(tǒng)會(huì)查找相應(yīng)DLL,并把它映射到進(jìn)程地址空間,獲得DLL中各函數(shù)的入口地址,定位本進(jìn)程中對(duì)這些函數(shù)的引用
裝入時(shí)動(dòng)態(tài)鏈接過(guò)程:
(注:Import Address Table是在裝入時(shí)依據(jù)DLL模塊的加載位置確定)。
DLL函數(shù)的調(diào)用過(guò)程:
2)運(yùn)行時(shí)動(dòng)態(tài)鏈接(run-time):
在編程時(shí)通過(guò)LoadLibrary(給出DLL名稱(chēng),返回裝入和鏈接之后該DLL的句柄), FreeLibrary, GetProcAddress(其參數(shù)包括函數(shù)的符號(hào)名稱(chēng),返回該函數(shù)的入口指針)等API來(lái)使用DLL函數(shù)。這時(shí)不再需要引入庫(kù)(import library)。
運(yùn)行時(shí)動(dòng)態(tài)鏈接的例子:
HINSTANCE hInstLibrary;//模塊句柄定義
DWORD (WINAPI *InstallStatusMIF)(char*, char*, char*, char*, char*, char*, char*, BOOL);//函數(shù)指針定義
if (hInstLibrary=LoadLibrary("ismif32.dll"))//映射
{
InstallStatusMIF=(DWORD (WINAPI *)(char*,char*,char*, char*, char*, char*, char*, BOOL))
GetProcAddress(hInstLibrary, "InstallStatusMIF");//獲得函數(shù)指針
if (InstallStatusMIF)
{
if (InstallStatusMIF(“office97”, “Microsoft”, “Office 97”, “999.999”, “ENU”,
“1234”, ”Completed successfully”, TRUE) !=0)//調(diào)用DLL模塊中的函數(shù)
{
}
}
FreeLibrary(hInstLibrary);//拆除映射
}
領(lǐng)取大禮包后臺(tái)私信我【大禮包】,前100名額外贈(zèng)送一份價(jià)值1699的內(nèi)核資料包(含視頻教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)
ello,小伙伴們
今天和大家說(shuō)說(shuō)“如何找回一臺(tái)Win10電腦”
為什么馮叔想到了這個(gè)問(wèn)題
除了大家留言詢(xún)問(wèn)外
還要從4月份發(fā)起的奇葩辦公地點(diǎn)討論說(shuō)起
作為結(jié)實(shí)靠譜的出行伙伴
ThinkPad出現(xiàn)在各類(lèi)乘坐的交通工具上實(shí)屬常見(jiàn)
但看到大家的留言,馮叔佩服得五體投地
辦公經(jīng)歷還可以如此精jing彩xin絕dong倫po
到底陪伴大家出現(xiàn)在了哪些匪夷所思的場(chǎng)合
馮叔隨便列舉幾個(gè):
審訊室做筆錄,鍵盤(pán)加持,手速開(kāi)掛
上得了廳堂,下得了礦井
手術(shù)麻醉前我還能再碼幾行代碼
它是整間黑網(wǎng)吧里最黑的仔
……
…
帶著ThinkPad在外奔波、隨時(shí)隨地打開(kāi)電腦蓋就開(kāi)始辦公的超人們,忙碌之中請(qǐng)留意手邊ThinkPad,謹(jǐn)防丟失或被盜,尤其是出租車(chē)、公交車(chē)、高鐵等交通工具上。雖然丟失的電腦可以嘗試按下面的方法找回,但假如發(fā)現(xiàn)電腦已經(jīng)“跑”到另一個(gè)城市的時(shí)候,想必會(huì)很心累,所以希望大家永遠(yuǎn)不要用到這項(xiàng)功能!
Windows10系統(tǒng)自帶的設(shè)備查找功能,可以幫助追蹤丟失的電腦,電腦的定位同步到微軟官網(wǎng)上,用其他設(shè)備登錄你的Microsoft賬號(hào),就可以看到你的電腦在地圖上的位置。使用這項(xiàng)功能有一些限制條件,下面展開(kāi)介紹。
1、首先在電腦上開(kāi)啟“查找我的設(shè)備”功能:
打開(kāi)控制面板-設(shè)置-更新與安全-查找我的設(shè)備,更改狀態(tài)為“開(kāi)”。
2、接著在任意一臺(tái)電腦上登錄微軟官網(wǎng):
點(diǎn)擊右上角個(gè)人頭像-我的Microsoft賬戶
進(jìn)入個(gè)人主頁(yè)—“設(shè)備”,點(diǎn)擊“管理”
查看定位涉及到關(guān)鍵隱私,提示再輸一遍密碼
驗(yàn)證完成后選擇設(shè)備,點(diǎn)擊“顯示詳細(xì)信息”—“查找我的設(shè)備”
這時(shí)就可以看到電腦的當(dāng)前位置啦,例如某某大廈,有位置名稱(chēng)和地圖標(biāo)記,以及你上次查看時(shí)間。如果不準(zhǔn)確,刷新試試。
地圖上定位到大概方圓100米的范圍,如果想要定位更精確比較困難,比如忘了電腦落在哪件辦公室,這項(xiàng)功能恐怕起不到作用。
接著將其遠(yuǎn)程鎖定,依次選擇“鎖定”—“下一步”,跟掛失銀行卡類(lèi)似,禁止其他人使用本地賬戶,你仍可以追蹤電腦的定位。
最后放一個(gè)大招,鍵入鎖屏界面消息,也就是你想說(shuō)的話,正在使用設(shè)備的人打開(kāi)電腦就能看到,是不是很厲害?
1、丟失的電腦安裝win10系統(tǒng),并且登錄了微軟個(gè)人賬號(hào),我們知道微軟官方即將永久停止對(duì)win7等系統(tǒng)的支持。
查看是否登錄了微軟賬號(hào):開(kāi)始菜單—設(shè)置—賬戶信息,右側(cè)顯示賬號(hào)登錄情況。
2、丟失的電腦聯(lián)網(wǎng)并且電池有電,只有這樣電腦才能發(fā)送定位。丟失的電腦能聯(lián)網(wǎng)大概有兩種可能:電腦自動(dòng)連接WiFi,因?yàn)橹斑B接過(guò)這個(gè)WiFi,電腦鎖不鎖屏沒(méi)影響;第二種可能是沒(méi)有開(kāi)機(jī)密碼或被破解了,手動(dòng)連接網(wǎng)絡(luò)。
3、“查找我的設(shè)備”功能和定位功能沒(méi)有被禁用,如果丟失前沒(méi)有打開(kāi)或被人搶先一步關(guān)閉也無(wú)法定位。
4、追蹤設(shè)備的最后一個(gè)前提,電腦丟失后沒(méi)有重裝系統(tǒng)。
使用這項(xiàng)功能必須滿足以上條件,所以電腦丟失后不能確保百分之百可以找回,平時(shí)最好有所準(zhǔn)備,增加找回的可能性。馮叔心里OS:以后再也不敢不看管好電腦了~
電腦丟失后應(yīng)該馬上重置微軟密碼以增強(qiáng)安全性,因?yàn)槌硕ㄎ恍畔ⅲ娔X的狀態(tài)、歷史瀏覽記錄、搜索記錄等等信息也已經(jīng)上傳至云服務(wù)器,登錄微軟官網(wǎng)就可以查看或清除,你還可以通過(guò)登錄官網(wǎng)直接管理你的電腦。保護(hù)個(gè)人隱私,管理好微軟賬號(hào)密碼非常重要。
磊 發(fā)自 凹非寺
量子位 | 公眾號(hào) QbitAI
有點(diǎn)恐怖。
現(xiàn)在,AI只需隨意一張照片,就能知道你在哪里,而且是可以精確到經(jīng)緯度的那種!
例如下面這張隨便到不能再隨便的自拍,你能猜到小姐姐在哪里嗎?
這事交給現(xiàn)在的AI來(lái)處理,它只需要“看”一眼,就能把照片里的“底褲都給扒出來(lái)”:
美國(guó),加利福尼亞州,舊金山機(jī)場(chǎng)洗手間,93號(hào)登機(jī)口附近……
坐標(biāo):37.6189° N,122.3744° W
再如下面這張照片,AI根據(jù)湖的特征、樹(shù)木和背景中的山脈,就匹配到了瑪麗湖,同樣是給出了精準(zhǔn)的坐標(biāo):
恐怖如斯,恐怖如斯。
至于這個(gè)AI工具,則是最近由一位俄羅斯黑客所推出,名叫GeoSpy,號(hào)稱(chēng)是可以根據(jù)照片里的各種細(xì)節(jié)做分析來(lái)判斷地理位置。
包括光線、植物、建筑風(fēng)格、天氣,并將它們與大量街景/地理照片進(jìn)行對(duì)比,據(jù)說(shuō)也用到了地理空間視覺(jué)大語(yǔ)言模型的技術(shù)。
而GeoSpy的功能,像極了此前一款基于谷歌地圖的游戲GeoGuessr——
游戲中會(huì)展示一張街景圖,然后玩家要從地圖上找到它的坐標(biāo)位置;給出答案與正確坐標(biāo)越近,分?jǐn)?shù)越高。
之前也有一位國(guó)外小哥(ID:georainbolt)憑借只需看0.1秒街景,就能在世界地圖上快速鎖定位置而在網(wǎng)絡(luò)上躥紅。
果不其然,斯坦福計(jì)算機(jī)系學(xué)生Andrew Gao在嘗試了GeoSpy之后,就開(kāi)始喊話這位小哥了:
你要失業(yè)嘍~
不過(guò)也有GeoGuessr的職業(yè)玩家坐不住了,站出來(lái)表示不服:
申請(qǐng)一戰(zhàn)!
這位挑戰(zhàn)者,名叫做Gavin(下文我們簡(jiǎn)稱(chēng)“G哥”),是一位正在參與GeoGuessr 2024世界杯的職業(yè)選手。
G哥把他跟AI在線對(duì)壘的情況上傳到了網(wǎng)上。
規(guī)則和GeoGuessr一致,還是看圖猜位置。
在第一輪對(duì)決中,G哥憑借抓到了馬路道邊上土耳其樣式柱子的細(xì)節(jié),判斷這張圖可能是在土耳其附近。
結(jié)果顯示,這張圖里的位置確實(shí)是在土耳其附近,但距離精準(zhǔn)的位置還差241km。
接下來(lái)就輪到GeoSpy這個(gè)AI選手登場(chǎng)了。
G哥處理的方式是將截圖“投喂”給AI,在靜候了片刻之后,GeoSpy就給出了結(jié)果。
國(guó)家:土耳其
經(jīng)緯度:39.998923, 32.607491
然后G哥在地圖中搜索這個(gè)經(jīng)緯度,再跟GeoGuessr的“標(biāo)準(zhǔn)答案”做比較:
第一輪的結(jié)果可以說(shuō)是讓G哥大受震驚,GeoSpy給出的位置比他的更近……來(lái)看下G哥當(dāng)時(shí)的表情:
在接下來(lái)的“火拼”中,G哥變得更加仔細(xì),都湊近屏幕去捕捉細(xì)節(jié)了。
G哥這次給出的答案是蘇門(mén)答臘島,但實(shí)際的結(jié)果卻不是很理想,距離“標(biāo)準(zhǔn)答案”足足703km。
到了GeoSpy這邊,雖然大致位置都是在印度尼西亞,但這次給出的位置就沒(méi)有那么準(zhǔn)確了。
不過(guò)比起G哥給出的答案,距離上卻還是AI的答案更近些,這使得G哥開(kāi)始有點(diǎn)無(wú)語(yǔ)子……
在接下來(lái)的比試中,即便G哥把猜測(cè)距離壓縮了86km,但GeoSpy給出的結(jié)果又是更接近于“標(biāo)準(zhǔn)答案”。
G哥此時(shí)已經(jīng)開(kāi)始掩面了:
在最后一輪battle中,G哥直接說(shuō)出:
人類(lèi)必須反將AI一軍。
然后G哥把頭埋得更深了,當(dāng)他捕捉到圖中路邊有文字時(shí),臉上露出了得意的笑容:
這局穩(wěn)了,AI它不識(shí)字的。
G哥的結(jié)果是,距離標(biāo)準(zhǔn)答案134km。
不過(guò)令G哥萬(wàn)萬(wàn)沒(méi)想到的是,GeoSpy,它!識(shí)!字!
這張照片是在波蘭拍攝的,因?yàn)榻ㄖ锷蠈?xiě)著“Abet”,這是一家波蘭公司。
然而G哥還是覺(jué)得這把有希望,因?yàn)樗l(fā)現(xiàn)GeoSpy只能定位到城市。
所以這把如果AI給出的坐標(biāo)是“標(biāo)準(zhǔn)答案”旁邊的城市“華沙”,那么G哥就贏了。
結(jié)果還真是……G哥也是露出了久違的笑容,并驕傲地說(shuō):
AI永遠(yuǎn)不會(huì)打敗人類(lèi)!
(Emmmm……G哥,你非要這么算的話……也行。)
G哥在下一輪的比拼中,將地圖范圍縮小到了自己的老家——芝加哥。
這次在自己的地盤(pán)上,G哥的表現(xiàn)非常勇猛,有距離“標(biāo)準(zhǔn)答案”僅2m和4m的成績(jī)。
不過(guò)AI這邊也是非常精準(zhǔn),起碼在看圖描述的過(guò)程中可以精確地說(shuō)出周邊的地址,這也讓G哥著實(shí)捏了一把汗。
但在地圖上搜AI給出的坐標(biāo)的時(shí)候,卻比文字描述的地點(diǎn)遠(yuǎn)一些了,有的甚至還定位到了海上。
……
最后,G哥在與AI交鋒了數(shù)次之后感慨道:
這次體驗(yàn)非常有趣并且讓人印象深刻。
但我也害怕這樣的技術(shù)在未來(lái)5年后會(huì)迭代到什么樣的程度。
其實(shí)在剛才G哥體驗(yàn)的過(guò)程,我們就能發(fā)現(xiàn)GeoSpy也存在一定的bug。
例如它更傾向于把地點(diǎn)定位到某個(gè)城市,以及給出的經(jīng)緯度坐標(biāo)會(huì)跟文字描述的地點(diǎn)有偏差。
網(wǎng)友們?cè)趯?shí)際體驗(yàn)過(guò)后也有類(lèi)似的感覺(jué)。
以至于許多人開(kāi)始懷疑這個(gè)GeoSpy到底是不是憑借所謂的“地理空間視覺(jué)大語(yǔ)言模型”技術(shù)。
畢竟現(xiàn)在每張照片的背后就會(huì)有大量且豐富的信息:
但無(wú)論如何,這件事情倒是給我們敲了一個(gè)警鐘——
技術(shù)的發(fā)展雖然日新月異,但我們也要時(shí)刻警惕數(shù)據(jù)安全的問(wèn)題;平常一定要注意,不然一不小心就可能被開(kāi)盒。
參考鏈接:
[1]https://weibo.com/6444741184/OdDVBnynj#comment
[2]https://www.youtube.com/watch?v=FitqxvDuEIY
[3]https://www.reddit.com/r/geoguessr/
[4]https://twitter.com/WSXJPDD/status/1786728819446931488
[5]https://twitter.com/gregorycgravett/status/1785894800488583591
— 完 —
量子位 QbitAI · 頭條號(hào)簽約
關(guān)注我們,第一時(shí)間獲知前沿科技動(dòng)態(tài)