欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python內(nèi)存地址函數(shù),python獲取內(nèi)存

python怎么修改某個內(nèi)存地址的數(shù)據(jù)

使用ctypes模塊調(diào)用WriteProcessMemory函數(shù),在創(chuàng)建程序進(jìn)程后,就可以修改該程序指定內(nèi)存地址。WriteProcessMemory的函數(shù)原型如下所示。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、循化網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為循化等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

BOOL WriteProcessMemory(

HANDLE???? hProcess,

LPVOID???? lpBaseAddress,

LPCVOID??? lpBuffer,

SIZE_T ??? nSize,

SIZE_T* ?? lpNumberOfBytesWritten

);

其參數(shù)含義如下。

·???? hProcess:要寫內(nèi)存的進(jìn)程句柄。

·???? lpBaseAddress:要寫的內(nèi)存起始地址。

·???? lpBuffer:寫入值的地址。

·???? nSize:寫入值的大小。

·???? lpNumberOfBytesWritten?? :實(shí)際寫入的大小。

python代碼示例如下:

from?ctypes?import?*

#?定義_PROCESS_INFORMATION結(jié)構(gòu)體

class?_PROCESS_INFORMATION(Structure):?????

_fields_?=?[('hProcess',?c_void_p),

('hThread',?c_void_p),

('dwProcessId',?c_ulong),

('dwThreadId',?c_ulong)]

#?定義_STARTUPINFO結(jié)構(gòu)體

class?_STARTUPINFO(Structure):

_fields_?=?[('cb',c_ulong),

('lpReserved',?c_char_p),

('lpDesktop',?c_char_p),

('lpTitle',?c_char_p),

('dwX',?c_ulong),

('dwY',?c_ulong),

('dwXSize',?c_ulong),

('dwYSize',?c_ulong),

('dwXCountChars',?c_ulong),

('dwYCountChars',?c_ulong),

('dwFillAttribute',?c_ulong),

('dwFlags',?c_ulong),

('wShowWindow',?c_ushort),

('cbReserved2',?c_ushort),

('lpReserved2',?c_char_p),

('hStdInput',?c_ulong),

('hStdOutput',?c_ulong),

('hStdError',?c_ulong)]

NORMAL_PRIORITY_CLASS?=?0x00000020??????????????#?定義NORMAL_PRIORITY_CLASS

kernel32?=?windll.LoadLibrary("kernel32.dll")???????#?加載kernel32.dll

CreateProcess?=?kernel32.CreateProcessA?????????#?獲得CreateProcess函數(shù)地址

ReadProcessMemory?=?kernel32.ReadProcessMemory?#?獲得ReadProcessMemory函數(shù)地址

WriteProcessMemory?=?kernel32.WriteProcessMemory????#?獲得WriteProcessMemory函數(shù)地址

TerminateProcess?=?kernel32.TerminateProcess

#?聲明結(jié)構(gòu)體

ProcessInfo?=?_PROCESS_INFORMATION()

StartupInfo?=?_STARTUPINFO()

file?=?'ModifyMe.exe'???????????????????????????#?要進(jìn)行修改的文件

address?=?0x0040103c????????????????????????????????#?要修改的內(nèi)存地址

buffer?=?c_char_p("_")??????????????????????????#?緩沖區(qū)地址

bytesRead?=?c_ulong(0)??????????????????????????#?讀入的字節(jié)數(shù)

bufferSize?=?len(buffer.value)??????????????????#?緩沖區(qū)大小

#?創(chuàng)建進(jìn)程

if?CreateProcess(file,?0,?0,?0,?0,?NORMAL_PRIORITY_CLASS,?0,?0,?byref(StartupInfo),?byref(ProcessInfo)):

#?讀取要修改的內(nèi)存地址,以判斷是否是要修改的文件

if?ReadProcessMemory(ProcessInfo.hProcess,?address,?buffer,?bufferSize,?byref(bytesRead)):

if?buffer.value?==?'\x74':

buffer.value?=?'\x75'??????????????????#?修改緩沖區(qū)內(nèi)的值,將其寫入內(nèi)存

#?修改內(nèi)存

if?WriteProcessMemory(ProcessInfo.hProcess,?address,?buffer,?bufferSize,?byref(bytesRead)):

print?'成功改寫內(nèi)存!'

else:

print?'寫內(nèi)存錯誤!'

else:

print?'打開了錯誤的文件!'

TerminateProcess(ProcessInfo.hProcess,0)???#?如果不是要修改的文件,則終止進(jìn)程

else:

print?'讀內(nèi)存錯誤!'

else:

print?'不能創(chuàng)建進(jìn)程!'

python如何控制內(nèi)存

python控制內(nèi)存的方法:

一、對象的引用計(jì)數(shù)機(jī)制

二、垃圾回收機(jī)制

三、內(nèi)存池機(jī)制

一、對象的引用計(jì)數(shù)機(jī)制

Python內(nèi)部使用引用計(jì)數(shù),來保持追蹤內(nèi)存中的對象,所有對象都有引用計(jì)數(shù)。

引用計(jì)數(shù)增加的情況:

1、一個對象分配一個新名稱

2、將其放入一個容器中(如列表、元組或字典)

引用計(jì)數(shù)減少的情況:

1、使用del語句對對象別名顯示的銷毀

2、引用超出作用域或被重新賦值 sys.getrefcount( )函數(shù)可以獲得對象的當(dāng)前引用計(jì)數(shù)

多數(shù)情況下,引用計(jì)數(shù)比你猜測得要大得多。對于不可變數(shù)據(jù)(如數(shù)字和字符串),解釋器會在程序的不同部分共享內(nèi)存,以便節(jié)約內(nèi)存。

二、垃圾回收

1、當(dāng)一個對象的引用計(jì)數(shù)歸零時,它將被垃圾收集機(jī)制處理掉。

2、當(dāng)兩個對象a和b相互引用時,del語句可以減少a和b的引用計(jì)數(shù),并銷毀用于引用底層對象的名稱。然而由于每個對象都包含一個對其他對象的應(yīng)用,因此引用計(jì)數(shù)不會歸零,對象也不會銷毀。(從而導(dǎo)致內(nèi)存泄露)。為解決這一問題,解釋器會定期執(zhí)行一個循環(huán)檢測器,搜索不可訪問對象的循環(huán)并刪除它們。

三、內(nèi)存池機(jī)制

Python提供了對內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。

1、Pymalloc機(jī)制。為了加速Python的執(zhí)行效率,Python引入了一個內(nèi)存池機(jī)制,用于管理對小塊內(nèi)存的申請和釋放。

2、Python中所有小于256個字節(jié)的對象都使用pymalloc實(shí)現(xiàn)的分配器,而大的對象則使用系統(tǒng)的malloc。

3、對于Python對象,如整數(shù),浮點(diǎn)數(shù)和List,都有其獨(dú)立的私有內(nèi)存池,對象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)。

更多Python知識請關(guān)注Python視頻教程欄目。

python如何進(jìn)行內(nèi)存管理

Python的內(nèi)存管理主要有三種機(jī)制:引用計(jì)數(shù)機(jī)制,垃圾回收機(jī)制和內(nèi)存池機(jī)制。

引用計(jì)數(shù)機(jī)制

簡介

python內(nèi)部使用引用計(jì)數(shù),來保持追蹤內(nèi)存中的對象,Python內(nèi)部記錄了對象有多少個引用,即引用計(jì)數(shù),當(dāng)對象被創(chuàng)建時就創(chuàng)建了一個引用計(jì)數(shù),當(dāng)對象不再需要時,這個對象的引用計(jì)數(shù)為0時,它被垃圾回收。

特性

1.當(dāng)給一個對象分配一個新名稱或者將一個對象放入一個容器(列表、元組或字典)時,該對象的引用計(jì)數(shù)都會增加。

2.當(dāng)使用del對對象顯示銷毀或者引用超出作用于或者被重新賦值時,該對象的引用計(jì)數(shù)就會減少。

3.可以使用sys.getrefcount()函數(shù)來獲取對象的當(dāng)前引用計(jì)數(shù)。多數(shù)情況下,引用計(jì)數(shù)要比我們猜測的大的多。對于不可變數(shù)據(jù)(數(shù)字和字符串),解釋器會在程序的不同部分共享內(nèi)存,以便節(jié)約內(nèi)存。

垃圾回收機(jī)制

特性

1.當(dāng)內(nèi)存中有不再使用的部分時,垃圾收集器就會把他們清理掉。它會去檢查那些引用計(jì)數(shù)為0的對象,然后清除其在內(nèi)存的空間。當(dāng)然除了引用計(jì)數(shù)為0的會被清除,還有一種情況也會被垃圾收集器清掉:當(dāng)兩個對象相互引用時,他們本身其他的引用已經(jīng)為0了。

2.垃圾回收機(jī)制還有一個循環(huán)垃圾回收器, 確保釋放循環(huán)引用對象(a引用b, b引用a, 導(dǎo)致其引用計(jì)數(shù)永遠(yuǎn)不為0)。

內(nèi)存池機(jī)制

簡介

在Python中,許多時候申請的內(nèi)存都是小塊的內(nèi)存,這些小塊內(nèi)存在申請后,很快又會被釋放,由于這些內(nèi)存的申請并不是為了創(chuàng)建對象,所以并沒有對象一級的內(nèi)存池機(jī)制。這就意味著Python在運(yùn)行期間會大量地執(zhí)行malloc和free的操作,頻繁地在用戶態(tài)和核心態(tài)之間進(jìn)行切換,這將嚴(yán)重影響Python的執(zhí)行效率。為了加速Python的執(zhí)行效率,Python引入了一個內(nèi)存池機(jī)制,用于管理對小塊內(nèi)存的申請和釋放。

內(nèi)存池概念

內(nèi)存池的概念就是預(yù)先在內(nèi)存中申請一定數(shù)量的,大小相等的內(nèi)存塊留作備用,當(dāng)有新的內(nèi)存需求時,就先從內(nèi)存池中分配內(nèi)存給這個需求,不夠了之后再申請新的內(nèi)存。這樣做最顯著的優(yōu)勢就是能夠減少內(nèi)存碎片,提升效率。內(nèi)存池的實(shí)現(xiàn)方式有很多,性能和適用范圍也不一樣。

特性

1.Python提供了對內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。

2.Pymalloc機(jī)制。為了加速Python的執(zhí)行效率,Python引入了一個內(nèi)存池機(jī)制,用于管理對小塊內(nèi)存的申請和釋放。

3.Python中所有小于256個字節(jié)的對象都使用pymalloc實(shí)現(xiàn)的分配器,而大的對象則使用系統(tǒng)的 malloc。

4.對于Python對象,如整數(shù),浮點(diǎn)數(shù)和List,都有其獨(dú)立的私有內(nèi)存池,對象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)。

python查看對象內(nèi)存地址的函數(shù)

在python中可以用id()函數(shù)獲取對象的內(nèi)存地址。

#例如:

object = 1 + 2

print(id(object)) #4304947776

新聞標(biāo)題:python內(nèi)存地址函數(shù),python獲取內(nèi)存
鏈接地址:http://chinadenli.net/article0/dsgcsio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器自適應(yīng)網(wǎng)站移動網(wǎng)站建設(shè)網(wǎng)站營銷外貿(mào)網(wǎng)站建設(shè)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作