新聞中心
隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)攻擊越來越嚴(yán)重,各種漏洞不斷涌現(xiàn)。Linux系統(tǒng)是世界上更流行的開源操作系統(tǒng)之一,但它也無法避免被黑客針對,系統(tǒng)漏洞的修復(fù)是Linux管理者必須要面對的問題。而函數(shù)級熱補(bǔ)丁技術(shù)可以在不停機(jī)的情況下及時修補(bǔ)漏洞,提高Linux系統(tǒng)的安全性。

在晉州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需定制,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,晉州網(wǎng)站建設(shè)費(fèi)用合理。
什么是函數(shù)級熱補(bǔ)丁技術(shù)?
函數(shù)級熱補(bǔ)丁技術(shù)(Function Level Patching)是一種修補(bǔ)程序的技術(shù),可以在原有程序的基礎(chǔ)上,通過修改程序中某一個函數(shù)的代碼實(shí)現(xiàn)修復(fù)bug或漏洞的目的。相對于全局熱補(bǔ)丁,函數(shù)級熱補(bǔ)丁只是對于某個特定函數(shù)進(jìn)行修改,不會對整個應(yīng)用程序造成影響,避免了不必要的破壞和安全風(fēng)險。
傳統(tǒng)的漏洞修復(fù)方法往往需要重新編譯整個程序,停機(jī)重啟才能生效,速度較慢。而函數(shù)級熱補(bǔ)丁通過對程序中某個函數(shù)進(jìn)行修改,可以不中斷系統(tǒng)進(jìn)程的運(yùn)行,提高修復(fù)速度,大大縮短了修復(fù)時間。
函數(shù)級熱補(bǔ)丁技術(shù)的優(yōu)勢
1. 長時間運(yùn)行無需停機(jī)重啟
相對于傳統(tǒng)的漏洞修復(fù)方法,函數(shù)級熱補(bǔ)丁技術(shù)可以在運(yùn)行的系統(tǒng)上直接修復(fù)漏洞,無需影響系統(tǒng)的正常運(yùn)行,因此可以長時間運(yùn)行無需停機(jī)重啟,提高了服務(wù)器的穩(wěn)定性和可靠性。
2. 修復(fù)速度快
在黑客攻擊可能隨時發(fā)生的情況下,實(shí)時修復(fù)漏洞至關(guān)重要,函數(shù)級熱補(bǔ)丁技術(shù)可以通過修改程序中某個特定的函數(shù),快速地修復(fù)漏洞,大大加快了修復(fù)速度。
3. 安全性高
函數(shù)級熱補(bǔ)丁技術(shù)可以針對某個特定函數(shù)進(jìn)行修補(bǔ),不會對整個程序造成不必要的風(fēng)險,從而大大提高了系統(tǒng)的安全性,避免了不必要的破壞。
如何使用函數(shù)級熱補(bǔ)丁技術(shù)修復(fù)漏洞
1. 首先需要確定漏洞的位置和危害程度,為修補(bǔ)程序做好準(zhǔn)備。
2. 制定修補(bǔ)方案,分析需要修改的函數(shù),對問題進(jìn)行定位和解決。
3. 開始修補(bǔ)程序,在指定的函數(shù)中進(jìn)行修改,實(shí)現(xiàn)對漏洞的修復(fù)。
4. 驗(yàn)證修補(bǔ)結(jié)果并測試,確保修補(bǔ)后系統(tǒng)運(yùn)行的穩(wěn)定性和安全性。
5. 應(yīng)用修補(bǔ)程序,將修補(bǔ)應(yīng)用到系統(tǒng)中,提高系統(tǒng)的防護(hù)能力。
函數(shù)級熱補(bǔ)丁技術(shù)是一種高效、快速、安全的漏洞修復(fù)方案,可以有效地提高Linux系統(tǒng)的安全性,保護(hù)系統(tǒng)不被黑客攻擊。同時,Linux系統(tǒng)的管理員可以依據(jù)漏洞的實(shí)際情況和系統(tǒng)需求來選擇修復(fù)方案,制定細(xì)致的修補(bǔ)計劃,并在修補(bǔ)過程中保證系統(tǒng)的穩(wěn)定性和可靠性,以及及時在系統(tǒng)運(yùn)行中修復(fù)漏洞,從而大大提高系統(tǒng)的安全性和可靠性。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220如何給linux安裝新內(nèi)核?
一、獲取內(nèi)核源碼
二、解壓內(nèi)核源碼
首先以root帳號登錄,然后進(jìn)入/usr/src子目錄。如果用戶在安裝Linux時,安裝了內(nèi)核的源代碼,則會發(fā)現(xiàn)一個linux-x.y.z的子目錄。該目錄下存放著內(nèi)核x.y.z的源代碼。此外,還會發(fā)現(xiàn)一個指向該目錄的鏈接linux。刪除該連接,然后將新內(nèi)核的源文件拷貝到/usr/src目錄中,并解壓:
#tarzxvfLinux-2.3.14.tar.gz
文件釋放成功后,在/usr/src目錄下會生成一個linux子目錄。其中包含了內(nèi)核2.3.14的全部源代碼。將/usr/include/a、/usr/inlude/linux、/usr/include/scsi鏈接到/usr/src/linux/include目錄下的對應(yīng)目錄中。
#cd/usr/include
#rm-Rfalinux
#ln-s/usr/src/linux/include/a-i386a
#ln-s/usr/src/linux/include/linuxlinux
#ln-s/usr/src/linux/include/scsiscsi
刪除源代碼目錄中殘留的.o文件和其它從屬文件。
#cd/usr/src/linux
#makemrproper
三.增量補(bǔ)丁
有時不需要完全重新安裝,只需打增量補(bǔ)丁,類似升級,在內(nèi)核源碼樹根目錄運(yùn)行:
patch-p1
四.內(nèi)核源碼樹目錄:
arch:包含和硬件體系結(jié)構(gòu)相關(guān)的代碼,每種平臺占一個相應(yīng)基啟的目錄。和32位PC相關(guān)的代碼存放在i386目錄下,其中比較重要的包括kernel(內(nèi)核核心部分)、mm(內(nèi)存管理)、math-emu(浮點(diǎn)單元仿真)、lib(硬件相關(guān)工具函數(shù))、boot(引導(dǎo)程序)、pci(PCI總線)和power(CPU相關(guān)狀態(tài))。
block:部分塊設(shè)備驅(qū)動程序。
crypto:常用加密和散列算法(如AES、SHA等),還有一些壓縮和CRC校驗(yàn)算法。
Documentation:關(guān)于內(nèi)核各部分的通用解釋和注釋。
drivers:設(shè)備驅(qū)動程序,每個不同的驅(qū)動占亂明用一個子目錄。
fs:各種支持的文件系統(tǒng),如ext、fat、ntfs等。
include:頭文件。其中,和系統(tǒng)相關(guān)的頭文件被放置在linux子目錄下。
init:內(nèi)核初始化代碼(注意不是系統(tǒng)引導(dǎo)代碼)。
ipc:進(jìn)程間通信的代碼。
kernel:內(nèi)核的最核心部分,包括進(jìn)程調(diào)度、定時器等,和平臺相關(guān)的一部分代碼放在arch/*/kernel目錄下。
lib:庫文件代碼。
mm:內(nèi)存管理代碼,和平臺相關(guān)的一部分代碼放在arch/*/mm目錄下。
net:網(wǎng)絡(luò)相關(guān)代碼,實(shí)現(xiàn)了各種常見的網(wǎng)絡(luò)協(xié)議。
scripts:用于配置內(nèi)核文件的腳本文件。
security:主要是一個SELinux的模塊。
sound:常用音頻設(shè)備的驅(qū)動程序等。
usr:實(shí)現(xiàn)了一個cpio。
在i386體系下,系統(tǒng)引導(dǎo)將從arch/i386/kernel/head.s開始執(zhí)行,并進(jìn)而轉(zhuǎn)移到init/main.c中的main()函數(shù)初始化內(nèi)核。
五.配置內(nèi)核
#cd/usr/src/linux
內(nèi)核配置方法有三種:
(1)命令行:makeconfig
(2)菜單模式的配置界面:makemenuconfig
(3)Xwindow:makexconfig
Linux的內(nèi)核配置程序提供了一系列配置選項。對于每一個配置選項,用戶可以回答\”y\”、\”m\”或\”n\”。其中\(zhòng)”y\”表示將相應(yīng)特性的支持或設(shè)備驅(qū)動程序編譯進(jìn)內(nèi)核;\”m\”表示將相應(yīng)特性的支持或設(shè)備驅(qū)動程序編譯成可加載模塊,在需要時,可由系統(tǒng)或用戶自行加入到內(nèi)核中去;\”n\”表示內(nèi)核不提供相應(yīng)特性或驅(qū)動程序的支持。由于內(nèi)核的配置選項非常多,本文只介紹一些比較重要的選項。
1、Codematurityleveloptions(代碼成熟度選項)
Promptfordevelopmentand/orincompletecode/drivers(CONFIG_EXPERIMENTAL)如果用戶想要使用還處于測試階段的代碼或驅(qū)搏陪如動,可以選擇“y”。如果想編譯出一個穩(wěn)定的內(nèi)核,則要選擇“n”。
2、Processortypeandfeatures(處理器類型和特色)
(1)、Processorfamily(386,486/Cx486,586/K5/5×86/6×86,Pentium/K6/TSC,PPro/6x86MX)選擇處理器類型,缺省為Ppro/6x86MX。
(2)、MaximumPhysicalMemory(1GB,2GB)內(nèi)核支持的更大內(nèi)存數(shù),缺省為1G。
(3)、Mathemulation(CONFIG_MATH_EMULATION)協(xié)處理器仿真,缺省為不仿真。
(4)、MTRR(MemoryTypeRangeRegister)support(CONFIG_MTRR)
選擇該選項,系統(tǒng)將生成/proc/mtrr文件對MTRR進(jìn)行管理,供Xserver使用。
(5)、Symmetricmulti-processingsupport(CONFIG_P)選擇“y”,內(nèi)核將支持對稱多處理器。
3、Loadablemodulesupport(可加載模塊支持)
(1)、Enableloadablemodulesupport(CONFIG_MODULES)選擇“y”,內(nèi)核將支持加載模塊。
(2)、Kernelmoduleloader(CONFIG_KMOD)選擇“y”,內(nèi)核將自動加載那些可加載模塊,否則需要用戶手工加載。
4、Generalsetup(一般設(shè)置)
(1)、Networkingsupport(CONFIG_NET)該選項設(shè)置是否在內(nèi)核中提供網(wǎng)絡(luò)支持。
(2)、PCIsupport(CONFIG_PCI)該選項設(shè)置是否在內(nèi)核中提供PCI支持。
(3)、PCIaccesode(BIOS,Direct,Any)該選項設(shè)置Linux探測PCI設(shè)備的方式。選擇“BIOS”,Linux將使用BIOS;選擇“Direct”,Linux將不通過BIOS;選擇“Any”,Linux將直接探測PCI設(shè)備,如果失敗,再使用BIOS。
(4)Parallelportsupport(CONFIG_PARPORT)選擇“y”,內(nèi)核將支持平行口。
5、PlugandPlayconfiguration(即插即用設(shè)備支持)
(1)、PlugandPlaysupport(CONFIG_PNP)選擇“y”,內(nèi)核將自動配置即插即用設(shè)備。
(2)、ISAPlugandPlaysupport(CONFIG_ISAPNP)選擇“y”,內(nèi)核將自動配置基于ISA總線的即插即用設(shè)備。
6、Blockdevices(塊設(shè)備)
(1)、NormalPCfloppydisksupport(CONFIG_BLK_DEV_FD)選擇“y”,內(nèi)核將提供對軟盤的支持。
(2)、EnhancedIDE/MFM/RLLdisk/cdrom/tape/floppysupport(CONFIG_BLK_DEV_IDE)選擇“y”,內(nèi)核將提供對增強(qiáng)IDE硬盤、CDROM和磁帶機(jī)的支持。
7、Networkingoptions(網(wǎng)絡(luò)選項)
(1)、Packetsocket(CONFIG_PACKET)選擇“y”,一些應(yīng)用程序?qū)⑹褂肞acket協(xié)議直接同網(wǎng)絡(luò)設(shè)備通訊,而不通過內(nèi)核中的其它中介協(xié)議。
(2)、Networkfirewalls(CONFIG_FIREWALL)選擇“y”,內(nèi)核將支持防火墻。
(3)、TCP/IPnetworking(CONFIG_INET)選擇“y”,內(nèi)核將支持TCP/IP協(xié)議。
(4)TheIPXprotocol(CONFIG_IPX)選擇“y”,內(nèi)核將支持IPX協(xié)議。
(5)、AppletalkDDP(CONFIG_ATALK)選擇“y”,內(nèi)核將支持AppletalkDDP協(xié)議。
8、SCSIsupport(SCSI支持)
如果用戶要使用SCSI設(shè)備,可配置相應(yīng)選項。
9、Networkdevicesupport(網(wǎng)絡(luò)設(shè)備支持)
Networkdevicesupport(CONFIG_NETDEVICES)選擇“y”,內(nèi)核將提供對網(wǎng)絡(luò)驅(qū)動程序的支持。
10、Ethernet(10or100Mbit)(10M或100M以太網(wǎng))
在該項設(shè)置中,系統(tǒng)提供了許多網(wǎng)卡驅(qū)動程序,用戶只要選擇自己的網(wǎng)卡驅(qū)動就可以了。此外,用戶還可以根據(jù)需要,在內(nèi)核中加入對FDDI、PPP、SLIP和無線LAN(WirelessLAN)的支持。
11、Characterdevices(字符設(shè)備)
(1)、Virtualterminal(CONFIG_VT)選擇“y”,內(nèi)核將支持虛擬終端。
(2)、Supportforconsoleonvirtualterminal(CONFIG_VT_CONSOLE)
選擇“y”,內(nèi)核可將一個虛擬終端用作系統(tǒng)控制臺。
(3)、Standard/generic(dumb)serialsupport(CONFIG_SERIAL)
選擇“y”,內(nèi)核將支持串行口。
(4)、Supportforconsoleonserialport(CONFIG_SERIAL_CONSOLE)
選擇“y”,內(nèi)核可將一個串行口用作系統(tǒng)控制臺。
12、Mice(鼠標(biāo))
PS/2mouse(aka\”auxiliarydevice\”)support(CONFIG_POUSE)如果用戶使用的是PS/2鼠標(biāo),則該選項應(yīng)該選擇“y”。
13、Filesystems(文件系統(tǒng))
(1)、Quotasupport(CONFIG_QUOTA)選擇“y”,內(nèi)核將支持磁盤限額。
(2)、Kernelautomountersupport(CONFIG_AUTOFS_FS)選擇“y”,內(nèi)核將提供對automounter的支持,使系統(tǒng)在啟動時自動mount遠(yuǎn)程文件系統(tǒng)。
(3)、DOSFATfssupport(CONFIG_FAT_FS)選擇“y”,內(nèi)核將支持DOSFAT文件系統(tǒng)。
(4)、ISO9660CDROMfilesystemsupport(CONFIG_ISO9660_FS)
選擇“y”,內(nèi)核將支持ISO9660CDROM文件系統(tǒng)。
(5)、NTFSfilesystemsupport(readonly)(CONFIG_NTFS_FS)
選擇“y”,用戶就可以以只讀方式訪問NTFS文件系統(tǒng)。
(6)、/procfilesystemsupport(CONFIG_PROC_FS)/proc是存放Linux系統(tǒng)運(yùn)行狀態(tài)的虛擬文件系統(tǒng),該項必須選擇“y”。
(7)、Secondextendedfssupport(CONFIG_EXT2_FS)EXT2是Linux的標(biāo)準(zhǔn)文件系統(tǒng),該項也必須選擇“y”。
14、NetworkFileSystems(網(wǎng)絡(luò)文件系統(tǒng))
(1)、NFSfilesystemsupport(CONFIG_NFS_FS)選擇“y”,內(nèi)核將支持NFS文件系統(tǒng)。
(2)、Bfilesystemsupport(tomountWfWsharesetc.)(CONFIG_B_FS)
選擇“y”,內(nèi)核將支持B文件系統(tǒng)。
(3)、NCPfilesystemsupport(tomountNetWarevolumes)(CONFIG_NCP_FS)
選擇“y”,內(nèi)核將支持NCP文件系統(tǒng)。
15、PartitionTypes(分區(qū)類型)
該選項支持一些不太常用的分區(qū)類型,用戶如果需要,在相應(yīng)的選項上選擇“y”即可。
16、Consoledrivers(控制臺驅(qū)動)
VGAtextconsole(CONFIG_VGA_CONSOLE)選擇“y”,用戶就可以在標(biāo)準(zhǔn)的VGA顯示方式下使用Linux了。
17、Sound(聲音)
Soundcardsupport(CONFIG_SOUND)選擇“y”,內(nèi)核就可提供對聲卡的支持。
18、Kernelhacking(內(nèi)核監(jiān)視)
MagicSysRqkey(CONFIG_MAGIC_SYSRQ)選擇“y”,用戶就可以對系統(tǒng)進(jìn)行部分控制。一般情況下選擇“n”。
六、編譯內(nèi)核
(一)、建立編譯時所需的從屬文件
#cd/usr/src/linux
#makedep
(二)、清除內(nèi)核編譯的目標(biāo)文件
#makeclean
(三)、編譯內(nèi)核
#makezImage
內(nèi)核編譯成功后,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內(nèi)核的映像文件zImage。如果編譯的內(nèi)核很大的話,系統(tǒng)會提示你使用makebzImage命令來編譯。這時,編譯程序就會生成一個名叫bzImage的內(nèi)核映像文件。
(四)、編譯可加載模塊
如果用戶在配置內(nèi)核時設(shè)置了可加載模塊,則需要對這些模塊進(jìn)行編譯,以便將來使用inod命令進(jìn)行加載。
#makemodules
#makemodelus_install
編譯成功后,系統(tǒng)會在/lib/modules目錄下生成一個2.3.14子目錄,里面存放著新內(nèi)核的所有可加載模塊。
七、啟動新內(nèi)核
(一)、將新內(nèi)核和System.map文件拷貝到/boot目錄下
#cp/usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-2.3.14
#cp/usr/src/linux/System.map/boot/System.map-2.3.14
#cd/boot
#rm-fSystem.map
#ln-sSystem.map-2.3.14System.map
(二)、配置/etc/lilo.conf文件。在該文件中加入下面幾行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
(三)、使新配置生效
#/in/lilo
(四)、重新啟動系統(tǒng)
#/in/reboot
DelphiforLinux中應(yīng)用共享對象庫
本文用通俗易懂的語言介紹Linux平臺上共享對象庫(SO)的基本概念及主要優(yōu)點(diǎn) 通過剖析在耐陪Delphi for Linux中應(yīng)用SO與在Delphi for Windows中應(yīng)用DLL的異同 以編程實(shí)例講述了Linux平臺的SO庫文件的組成 SO庫文件的函數(shù)重載 特殊編譯指令 采用Delphi for Linux創(chuàng)建SO的編程規(guī)則 使用前的Linux系統(tǒng)設(shè)置 以及在Delphi for Linux中用隱式或顯式鏈接方法裝入和使用SO函數(shù)的基本方法 經(jīng)驗(yàn)及技巧 并對應(yīng)用SO可能出現(xiàn)的問題進(jìn)行了探討和分析 共享對象庫基本概念 Delphi for Linux是Borland公司推出的基于Linux平臺的 面向?qū)ο蟮目梢暬_發(fā)工具 是目前Linux平臺上很好的應(yīng)用開發(fā)工具 Delphi for Linux也稱Kylix 大家用Kylix開發(fā)Linux應(yīng)用程序時 可能使用過Linux操作系統(tǒng)本身帶的大量SO文件 SO是一種特殊的運(yùn)行文件 包含若干方法 對象和資源 它不能直接運(yùn)行 但可以被Kylix應(yīng)用程序或其它可執(zhí)行文件動態(tài)調(diào)用 SO文件擴(kuò)展名為 so 編譯前源文件扒讓擴(kuò)展名為 dpr 本文所舉例子均在Red Hat Linux 及Kylix 環(huán)境下調(diào)試編譯通過 并可正常運(yùn)行 圖 是Kylix主程序與SO庫的層次關(guān)系圖 從中可看出使用SO庫有以下幾個優(yōu)點(diǎn)圖 Kylix主程序與SO庫的層次關(guān)系圖 ◆ 多個Kylix程序或它的多個單元文件可通過接口共用一個SO庫文件 另一方面 某一個Kylix程序 可通過多個接口使用多個SO庫文件 這樣 SO變成一種可共用的資源 實(shí)現(xiàn)真正的 資源共享 大大縮小了Kylix應(yīng)用程序的執(zhí)行代碼 增強(qiáng)了軟件的可重用性 ◆ 將SO文件作為Kylix應(yīng)用程序的公共調(diào)用模塊設(shè)計時 由于其獨(dú)立于應(yīng)用程序 軟件升級春畝局時只需修改SO庫文件及編譯SO 無需更改及重編譯Kylix應(yīng)用主程序 ◆ 不僅可使用Kylix編寫SO庫 還可使用C或C++等常用語言來編寫 只要遵循特定的接口規(guī)范 共享對象庫的創(chuàng)建 SO庫文件的構(gòu)成 SO庫文件和Kylix標(biāo)準(zhǔn)單元文件的內(nèi)部結(jié)構(gòu)基本相同 也有聲明 實(shí)現(xiàn)及初始化部分 區(qū)別之一在于SO庫只是其它程序可以調(diào)用的方法(包括函數(shù)及過程) 區(qū)別之二庫程序以library關(guān)鍵字而非project開頭啟動其項目文件 庫程序包含有exports語句 其列出要向外部提供的導(dǎo)出函數(shù)及過程 下面是SO庫文件代碼的簡單例子 用以說明其構(gòu)成 library MyFirstSO uses SysUtils classes { Delphi for Windows 中引用類庫為Windows } function Add (A Char B Char) Integer cdecl overload begin Result := Ord (A) + Ord (B) end function Add (A Integer B Integer) Integer cdecl overload begin Result := A + B end function Double (N Integer) Integer cdecl begin Result := N * end; exports Add (A Integer B Integer) Add (A Char B Char) name AddChar Double SO庫文件中的函數(shù)重載 SO庫也可以使用重載函數(shù)(即多個函數(shù)使用相同名稱 不同參數(shù)) 使用時需在重載的函數(shù)聲明后標(biāo)上overload指令 Kylix可以用原名稱導(dǎo)出一個重載函數(shù) 在exports從句中表示其參數(shù)表 若要導(dǎo)出多個重載函數(shù) 則要在exports從句中用name字句指定不同名稱 以區(qū)別重載 這可從上面的例子MyFirstSO中看出 Add是重載函數(shù) 為調(diào)用時區(qū)分 一個用原函數(shù)聲明Add導(dǎo)出 另一個用AddChar導(dǎo)出 SO庫的特殊編譯指令 編譯后生成的SO庫運(yùn)行文件使用lib前綴和 so擴(kuò)展名 考慮到實(shí)際命名規(guī)則與版本和支持符號鏈 Kylix在Object Pascal語言中引入了幾個特殊編譯指令 這些在Delphi中沒有什么意義 庫源文件MyFirstSO dpr編譯后產(chǎn)生的執(zhí)行文件為libMyFirstSO so ◆ $SOPREFIX 改變名稱前綴 默認(rèn)為lib(正常庫)或bpl(Kylix包) 用前綴區(qū)別兩種庫是因?yàn)長inux的庫用單一擴(kuò)展( so) ◆ $SOSUFFIX 在庫名與擴(kuò)展名之間增加文本 指定版本或其它信息 ◆ $SOVERSION 在擴(kuò)展名之后增加版本號 ◆ $SONAME 表示相關(guān)符號鏈名 由編譯器自動生成 例如 下列代碼生成庫libsimple so 和符號鏈libsimple so library simple uses SysUtils Classes //函數(shù)定義省略 {$SOVERSION } {$SONAME libsimple so } 共享對象庫的使用 Kylix應(yīng)用程序使用SO庫時 可以采用兩種方式 一種是隱式鏈接(Implicit linking) 也稱靜態(tài)裝入 另一種是顯式鏈接(Explicit Linking) 也稱動態(tài)裝入 下面分別介紹這兩種鏈接方式的使用方法 技巧及將窗體對象放入SO庫的技術(shù) 使用前的系統(tǒng)設(shè)置 自定義SO庫建好后 Kylix應(yīng)用程序調(diào)用時會報錯 這是因?yàn)镵ylix找不到新建庫 必須對系統(tǒng)進(jìn)行相關(guān)設(shè)置 這與在Delphi for Windows中使用DLL庫不同 DLL庫建好后只需將編譯后的DLL文件放到Delphi主程序目錄下即可使用 操作步驟如下 ◆ 將編譯好的SO庫文件放到Linux系統(tǒng)庫目錄/lib或/usr/lib下 或者在Linux系統(tǒng)庫路徑shell變量LD_LIBRARY_PATH中加入自定義SO庫文件所在路徑 ◆ 在根用戶(root)下 用ldconfig命令刷新庫緩沖區(qū) ◆ 對Kylix執(zhí)行文件使用ldd命令 查看該程序所關(guān)聯(lián)的SO庫 隱式鏈接 隱式鏈接是指在應(yīng)用程序開始執(zhí)行時就將SO庫文件加載到應(yīng)用程序中 實(shí)現(xiàn)隱式鏈接并不難 只需在應(yīng)用程序中加入庫函數(shù)的聲明語句及庫的external定義從句 則庫函數(shù)可以和一般局部函數(shù)一樣使用 比如 要使用libMyFirstSO so中的Add函數(shù) 則只要在應(yīng)用程序中增加下面語句 function Add (A Integer B Integer) Integer cdecl external libMyFirstSO so 顯式鏈接 顯式鏈接是應(yīng)用程序在執(zhí)行過程中可根據(jù)實(shí)際需要隨時加載SO庫文件 也可以隨時卸載SO庫文件 還可在運(yùn)行時進(jìn)行SO庫的切換 而這些是隱式鏈接無法做到的 與隱式鏈接相比 顯式鏈接具有更大的靈活性 在Kylix中 要動態(tài)裝入庫和調(diào)用導(dǎo)出函數(shù)可以用Delphi仿真代碼或自然Linux方法 下面分別介紹這兩種方法 ( )用Delphi仿真代碼動態(tài)裝入 在Windows中動態(tài)裝入DLL是用Windows API函數(shù)—LoadLibrary或Delphi提供的SafeLoadLibrary函數(shù)完成的 找到庫后 程序調(diào)用Windows API函數(shù)—GetProcAddress搜索DLL導(dǎo)出函數(shù) 若找到匹配 則返回所請求函數(shù)指針 并將這個函數(shù)指針轉(zhuǎn)換成適當(dāng)類型和調(diào)用 使用完后調(diào)用FreeLibrary 從內(nèi)存中釋放庫 Kylix中使用Pascal RTL仿真函數(shù)實(shí)現(xiàn)SO庫動態(tài)裝入 下面的例子只列出Kylix應(yīng)用程序中與動態(tài)鏈接相關(guān)部分 而非完整Kylix單元文件代碼 unit DynaForm; interface uses SysUtils Classes Qcontrols Qforms type TForm = class(TForm) Button : TButton; procedure Button Click(Sender: TObject); end; var Form TForm implementation {$R * XFM} type TComputeInteger = function (x Integer y Integer) Integer cdecl //調(diào)用庫函數(shù)接口類型定義 procedure TForm Button Click(Sender TObject) var Handle Thandle Compute TputeInteger begin Handle:=LoadLibrary( libMyFirstSO so ) //動態(tài)裝入庫 if Handle then //找到庫 begin Compute:=TputeInteger(GetProcAddress(Handle Add ) //搜索庫函數(shù)Add 并返回函數(shù)指針 if Assigned(Compute) then ShowMessage(IntToStr(Compute( )) //使用庫函數(shù) FreeLibrary(Handle) //釋放庫 end else ShowMessage( Library not found ) end ( )用Linux自然代碼動態(tài)裝入 也可以使用Libc系統(tǒng)單元中的低級Linux函數(shù) 這樣可使用更多參數(shù) 更好地控制系統(tǒng) 使用的Linux函數(shù)分別為dlopen(打開并裝入庫函數(shù)) dlsym(搜索庫函數(shù)) dlclose(釋放庫) 因此 上例中調(diào)用庫的代碼變?yōu)? procedure TForm Button Click(Sender TObject) var Handle Pointer Compute TputeInteger begin Handle:=dlopen( libMyFirstSO so ) //動態(tài)裝入庫 if Handlenil then //找到庫 begin Compute:=TputeInteger(dlsym(Handle Add ) //搜索庫函數(shù)Add 并返回函數(shù)指針 if Assigned(Compute) then ShowMessage(IntToStr(Compute( )) //使用庫函數(shù) dlclose(Handle) //釋放庫 end else ShowMessage( Library not found ) end ( )SO庫中窗體對象的使用 除了包含函數(shù)和過程的庫之外 還可以將Kylix建立的窗體放在共享對象中 這可以是對話框或其它窗體 生成新的庫對象之后 只要在庫源文件的聲明部分增加對窗體單元文件 lishixinzhi/Article/program/Delphi/202311/24683
關(guān)于linux 函數(shù)級熱補(bǔ)丁的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計,成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。
當(dāng)前題目:Linux:使用函數(shù)級熱補(bǔ)丁,快速修復(fù)漏洞(linux函數(shù)級熱補(bǔ)丁)
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/djohssi.html


咨詢
建站咨詢
